什么时候在 always 块中分配一个值?

问题描述 投票:0回答:0

在下面的上升沿检测器代码中,为什么在一个 clk 周期的上升沿检测到上升沿时,检测到的信号被赋值为 1,而 prev_signal 获得延迟 1 个 clk 周期的信号值?

module rising_edge_detector(
    input clk,
    input signal,
    output reg detected
);

    reg prev_signal;

    always @(posedge clk) begin
        if (signal && !prev_signal) begin
            detected <= 1;
        end else begin
            detected <= 0;
        end
        prev_signal <= signal;
    end

endmodule

TIA

当我模拟这段代码时,我得到了正确的上升沿检测器。但是 prev_signal 获得延迟 1 个 clk 周期的信号值,其中检测到在同一 clk 周期中获得 0 和 1 的值。

verilog system-verilog clock
© www.soinside.com 2019 - 2024. All rights reserved.