【问题标题】:Not seeing a clock cycle delay in Vivado simulation during a register/flipflop assignment在寄存器/触发器分配期间在 Vivado 仿真中看不到时钟周期延迟
【发布时间】:2021-12-10 13:13:06
【问题描述】:

我正在尝试从信号ext_sample_clk 生成一个脉冲。我的设计目前有 2 个时钟信号,clkext_sample_clk,这是我通过测试台生成的。以下是我的简化代码。除此之外,我还有clk 和重置生成逻辑,为简单起见,我没有显示。如果需要,我可以分享。

module tb;
reg clk;
reg rst;
reg ext_sample_clk;
reg ext_sample_clk_r1;
wire ext_sample_pulse_orig;

//clock gen logic
always 
begin
    clk = 1'b1; 
    #5; // 10 ns

    clk = 1'b0;
    #5;
end

// reset gen logic
initial 
begin 
    rst = 1;
    #(100);
    rst = 0;
end

// ext_sample_clk logic
always 
begin
    ext_sample_clk = 1'b1; 
    #50; 
    ext_sample_clk = 1'b0;
    #50; 
end

// register the ext_sample_clk logic, should infer a flip flop
always @(posedge clk) begin
    if (rst)
        ext_sample_clk_r1       <= 0;
    else
        ext_sample_clk_r1       <= ext_sample_clk; // lhs doesn't appear to be delayed by 1 clock cycle wrt to rhs
end     
assign ext_sample_pulse_orig   = ext_sample_clk        && !ext_sample_clk_r1; 

endmodule

与 ext_sample_clk 相比,我希望 ext_sample_clk_r1 延迟一个时钟脉冲。但以下是我在 Vivado 上运行仿真时观察到的情况。

谁能解释为什么我在 ext_sample_clk_r1 中没有看到参考 ext_sample_clk 的时钟周期延迟。我错过了什么吗?

【问题讨论】:

    标签: verilog simulation fpga vivado test-bench


    【解决方案1】:

    由于您希望 ext_sample_clk_r1ext_sample_clk 与同一个时钟 (clk) 同步,因此您需要使用非阻塞分配 (&lt;=) 将它们从 posedge clk 中分离出来:

    initial begin 
        ext_sample_clk = 1'b1; 
        forever begin
            repeat (10) @(posedge clk);
            ext_sample_clk <= ~ext_sample_clk;
        end
    end
    

    这是edaplayground 上的一个运行示例。

    【讨论】:

      【解决方案2】:

      获得您看到的结果的最可能方法是使用对ext_sample_clk 的阻塞赋值,而不是非阻塞赋值。您的测试台需要遵循与设计的一部分相同的规则,以避免竞争条件。使用非阻塞分配或让您的测试平台在相反的边缘应用信号。

      【讨论】:

      • 我试图让我的代码(除了复位和时钟生成)在设计和测试平台之间保持相同。那么您能否更详细地解释一下如何使用非阻塞分配或让我的测试平台在对面应用信号来解决我的问题。提前致谢。
      • 因为ext_sample_clk上升的时间与clk的上升沿竞争你不知道最后一个always块是在ext_sample_clk更新之前还是之后执行的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      相关资源
      最近更新 更多