HDLbits: Circuits/Sequential Logic/Latches and Flip-Flops/Edgecaptu

这道题目需要实现的:

(1) 对2个相邻输入 in[31:0] 进行下降沿检测,比方说,

第1个输入的 in = 32'b0000_0000_0000_0000_0000_0000_0000_0010,

第2个输入的 in = 32'b0000_0000_0000_0000_0000_0000_0000_0000,

可以看到,在 in[1] 这个位置有一个从 1到0 的变化,检测到这个下降沿之后,输出的 out[1] 置为1.

(2) 除非复位,否则输出 out 中的所有高位都需要被保留,简单点说,一旦 out 中的某些位被置为1后,它就会一直保持,只有检测到复位信号,这些位才会重新置为0.

代码实现:

module top_module (
    input clk,
    input reset,
    input [31:0] in,
    output [31:0] out
);
    
    reg [31:0] in_next;
    
    always @(posedge clk)
        begin
            in_next <= in;  //打一拍,用寄存器存一下输入信号in
            if(reset)
                out <= 32'd0;
            else
                out <= out | ((in_next ^ 32'b0000_0000_0000_0000_0000_0000_0000_0000) & (in ^ 32'b1111_1111_1111_1111_1111_1111_1111_1111));  //检测in_next的高位和in的低位,需要同时满足
        end                                       

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值