题解 | #数据累加输出#
数据累加输出
https://www.nowcoder.com/practice/956fa4fa03e4441d85262dc1ec46a3bd
//感觉有问题 很奇怪 `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 ); reg [1:0] data_cnt; assign ready_a = !valid_b | ready_b; always @(posedge clk or negedge rst_n ) begin if(!rst_n) data_cnt <= 'd0; else if(valid_a && ready_a) data_cnt <= (data_cnt == 2'd3) ? 'd0 : (data_cnt + 1'd1); end always @(posedge clk or negedge rst_n ) begin if(!rst_n) valid_b <= 'd0; else if(data_cnt == 2'd3 && valid_a && ready_a) valid_b <= 1'd1; else if(valid_b && ready_b) valid_b <= 1'd0; end always @(posedge clk or negedge rst_n ) begin if(!rst_n) data_out <= 'd0; else if(ready_b && valid_a && ready_a && (data_cnt == 2'd0)) data_out <= data_in; else if(valid_a && ready_a) data_out <= data_out + data_in; end endmodule // `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 // ); // assign ready_a=!valid_b|ready_b; // reg[2:0]cnt; // reg [9:0] data; // reg [9:0] data1; // always@(posedge clk or negedge rst_n)begin // if(!rst_n) // begin // data1<=0; // end // else // begin // data1<=data; // end // end // always@(posedge clk or negedge rst_n) // if(!rst_n) // begin // cnt<=0; // data<=0; // valid_b<=0; // end // else if(valid_a) // begin // if(cnt==0) // begin // valid_b<=0; // cnt<=cnt+1; // data<=data_in; // end // else if(cnt==4) // begin // if(data1!=data)begin // valid_b<=1; // data<=data+data_in; // cnt<=0;end // else begin // valid_b<=1; // data<=data; // cnt<=cnt;end // end // else // valid_b<=0; // cnt<=cnt+1; // data<=data&data_in; // end // else begin // valid_b<=0; // data<=data; // cnt<=cnt; // end // always@(posedge clk or negedge rst_n)begin // if(!rst_n) // begin // data_out<=0; // end // if(valid_a)begin // if(cnt==4&&(data1!=data)) // data_out<=data+data_in; // else if(cnt==4&&(data1==data)) // data_out<=data; // else if(cnt==0) // data_out<=data_in; // else // data_out<=data+data_in; // end // else // data_out<=0; // end // endmodule