题解 | #数据累加输出#

数据累加输出

http://www.nowcoder.com/practice/956fa4fa03e4441d85262dc1ec46a3bd

  1. 测试用例data_out随输入改变,题目没有画完整
  2. ready_a 有效在valid_b无效或ready_b有效时,才能保证不会浪费下一级握手的哪一个周期时间。(即与下一级握手的周期也完成了与上一级的握手)
`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
);
    //defiantion
    reg [1 : 0] cnt;
    wire add_cnt;
    wire end_cnt;
    reg ready_a_r;
    
    //output 
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) data_out <= 10'd0;
        else if(add_cnt && cnt == 0) data_out <= data_in;
        else if(add_cnt) data_out <= data_out + data_in;
    end
    
    assign add_cnt = ready_a && valid_a;
    assign end_cnt = add_cnt && (cnt == 3);
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) cnt <= 'd0;
        else if(end_cnt) cnt <= 'd0;
        else if(add_cnt) cnt <= cnt + 1'b1;
    end
    
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) valid_b <= 'd0;
        else if(end_cnt) valid_b <= 1'b1;
        else if(ready_b) valid_b <= 1'b0;
    end    
    
    assign ready_a = !valid_b | ready_b;
endmodule
全部评论
在第四个有效输入数据,题目波形要求ready_a为高,但是楼主的代码此时ready_a是低电平
点赞 回复 分享
发布于 2023-01-24 10:27 河北

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
某牛奶:一觉醒来全球程序员能力下降200%,小伙成功scanf惊呆在座个人。
点赞 评论 收藏
分享
评论
3
1
分享
牛客网
牛客企业服务