【问题标题】:Race condition between signals信号之间的竞争条件
【发布时间】:2017-03-22 08:43:16
【问题描述】:

我遇到了一个测试平台,它基本上可以归结为以下示例:时钟和信号在同一时间步中通过阻塞分配进行更改。我相信这会导致时钟和两个 ctrlX 信号之间出现竞争状况,但我无法在 EDA 操场上证明(我知道这超出了我的控制范围)。我是否正确存在竞争条件? (EDA Playground 链接:https://www.edaplayground.com/x/5yDX#&togetherjs=gkG5xewfNN

module tb_example;


  reg clk = 1;
  reg [3:0] dff1,dff2;
  reg [3:0] ctrl1 = 'd0;
  reg [3:0] ctrl2 = 'd0;

  initial begin
    #10 ctrl1 = 'd1;
    #20 ctrl1 = 'd2;
    #10 ctrl1 = 'd3;
    #100 $finish;
  end

  always begin
    #5 clk = !clk;  
  end

  initial begin
    $dumpfile("dump.vcd");
    $dumpvars(0,tb_example);
  end

  initial begin
    #10 ctrl2 = 'd1;
    #20 ctrl2 = 'd2;
    #10 ctrl2 = 'd3;
    #100 $finish;
  end

  always @ (posedge(clk)) begin
    dff1 <= ctrl1;
  end

  always @ (posedge(clk)) begin
    dff2 <= ctrl2;
  end

endmodule

【问题讨论】:

    标签: verilog race-condition blocking test-bench


    【解决方案1】:

    是的,这是一种竞争条件,因为您正在为 ctrlx 使用阻塞分配,并且它们与 posedge clk 同时发生变化。因此,分配给 dffx 的值是不确定的,并且可能因模拟器而异。

    避免这种情况的一种方法是在 clk 的 negedge 上更改 ctrlx:

      reg clk = 0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-26
      • 2019-04-29
      • 2016-11-16
      • 1970-01-01
      • 2016-02-02
      • 2013-11-14
      • 2021-09-03
      • 1970-01-01
      相关资源
      最近更新 更多