`timescale 1ns/1ns module valid_ready( input clk , input rst_n , input [7:0] data_in , input valid_a , input ready_b , output ready_a , output reg valid_b , output reg [9:0] data_out ); wire ready_a; wire [7:0]bu; wire [7:0]fubu; assign fubu={data_in[7],~data_in[6:0]+1'b1}; assign bu=data_in[7]?fubu: data_in; wire [9:0] kuo; assign kuo={bu[7],bu[7],bu[7],bu[7],bu}; reg [2:0]cnt; always@(posedge clk or negedge rst_n)begin if(!rst_n) cnt<=0; else if(valid_b&ready_b) cnt<=1; else if(valid_a&ready_a) //输入数据有效且本模块可以接收数据时,计数 cnt<=cnt+1; end always@(posedge clk or negedge rst_n) begin if(!rst_n) begin data_out<=0; valid_b<=0; end else if(valid_a) if(ready_a) if(ready_b&valid_b) begin data_out<=kuo; valid_b<=0; end else begin data_out<=data_out+kuo; if(cnt==3) valid_b<=1; else valid_b<=0; end else begin data_out<=data_out; valid_b<=1; end end assign ready_a=(valid_b&(!ready_b))? 0:1; endmodule