信号之间的竞争条件

时间:2017-03-22 08:43:17

标签: verilog race-condition blocking test-bench

我遇到了一个测试平台,它基本上可以归结为下面的例子:时钟和信号在相同的时间步长中用阻塞分配改变。我相信这会导致时钟和两个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

1 个答案:

答案 0 :(得分:1)

是的,这是竞争条件,因为您正在使用ctrlx的阻止分配,并且它们正在与posedge clk同时更改。因此,分配给dffx的值是不确定的,可以从模拟器到模拟器不等。

避免这种情况的一种方法是在clk:

的negedge上更改ctrlx
  reg clk = 0;