题解 | #数据累加输出#

数据累加输出

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    [2:0]    data_cnt;
    
    
    always@(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            data_cnt <= 3'b0;
        else
            begin
                if(valid_a)
                    begin
                        if(data_cnt == 3'd4)
                            data_cnt <= ready_b ? 3'b1 : data_cnt;
                        else
                            data_cnt <= data_cnt + 1'b1;
                    end
                else
                    data_cnt <= data_cnt;
            end
    end
    
    
    always@(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            data_out <= 10'b0;
        else if(valid_a)
            begin
                if(data_cnt != 3'd4)
                    data_out <= data_out + data_in;
                else
                    begin
                        if(ready_b)  
                            data_out <= data_in;
                        else
                            data_out <= data_out;
                    end
            end 
    end
        
    
    always@(*)            //观察信号图可知,其所处的长度就是一个信号的长度,而就是第一个的输入的长度,所以可以根据计数器的值进行设定,采用组合逻辑,若是采用时序,会出现一个延时
    begin
        if(!rst_n)
            valid_b <= 1'b0;
        else
            begin
                if(data_cnt > 3'd3)        //这里就能控制其刚好是第一个数据的长度,因为cnt是随着readyb变化的
                    valid_b <= 1'b1;
                else
                    valid_b <= 1'b0;
            end
    end

    
    assign    ready_a = data_cnt == 3'd4 ? ready_b : 1'b1;
    
endmodule

全部评论

相关推荐

06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
喜欢核冬天的哈基米很想上市:会爆NullPointerException的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务