题目:
对于 32 位矢量中的每个位,捕获输入信号从一个时钟周期中的 1 变为下一个时钟周期的 0。“捕获”表示输出将保持 1,直到寄存器复位(同步复位)。
每个输出位的行为类似于 SR 触发器:输出位应设置为(1)在发生 1 到 0 转换后的周期。当复位为高电平时,输出位应在正时钟边沿复位(至0)。如果上述两个事件同时发生,则重置优先。在下面示例波形的最后 4 个周期中,“reset”事件比“set”事件早一个周期发生,因此此处没有冲突。
在下面的示例波形中,为清楚起见,分别显示了 reset、in[1] 和 out[1]。
分析:
对于32位向量中的每一位,当输入信号从一个时钟周期的1变化到下一个时钟周期的0时捕获(因为in由1变到0后,out才为1,故为捕捉下降沿),“捕获”意味着输出将保持1(直到被reset高电平有效进行复位(同步重置)。
每个输出位的行为就像一个SR触发器:输出位应该在发生1到0转换后的周期被设置(为1)。当复位为高时,输出位应该在正时钟边缘复位(为0)。如果上述两个事件同时发生,则reset具有优先级。
在下面示例波形的最后4个周期中,“reset”事件比“set”事件早一个周期发生,因此这里不存在冲突。
关键点:1、下降沿捕获
out <= ~in & in_d1; //下边沿检测
out <= in & ~in_d1; //上边沿检测
out <= in ^in_d1l; //双边沿检测
2、捕获时,输出保持为1,直到reset高电平有效(表示out会延续上一个时钟周期的状态)
Verilog代码:
module top_module (
input clk,
input reset,
input [31:0] in,
output [31:0] out
);
reg [31:0] in_d1;
always @(posedge clk)
begin
integer i;
in_d1 <= in;
if(reset)
out <= 32'b0;
else
out <= ~in & in_d1 |out; //其中“|out”表示捕获后保持上一个out状态,直到复位
end
endmodule
参考原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/120258410