Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Verilog 信号之间的竞争条件_Verilog_Race Condition_Blocking_Test Bench - Fatal编程技术网

Verilog 信号之间的竞争条件

Verilog 信号之间的竞争条件,verilog,race-condition,blocking,test-bench,Verilog,Race Condition,Blocking,Test Bench,我遇到了一个测试台,它基本上可以归结为以下示例:时钟和信号在同一时间段内通过阻塞分配进行更改。我相信这会导致时钟和两个ctrlX信号之间出现竞争情况,但我无法在EDA操场上证明(我知道这超出了我的控制范围)。我说的有比赛条件对吗? (EDA游乐场链接:) 模块tb\u示例; reg clk=1; reg[3:0]dff1,dff2; reg[3:0]ctrl1='d0; reg[3:0]ctrl2='d0; 初始开始 #10 ctrl1='d1; #20 ctrl1='d2; #10 ctrl1

我遇到了一个测试台,它基本上可以归结为以下示例:时钟和信号在同一时间段内通过阻塞分配进行更改。我相信这会导致时钟和两个ctrlX信号之间出现竞争情况,但我无法在EDA操场上证明(我知道这超出了我的控制范围)。我说的有比赛条件对吗? (EDA游乐场链接:)

模块tb\u示例;
reg clk=1;
reg[3:0]dff1,dff2;
reg[3:0]ctrl1='d0;
reg[3:0]ctrl2='d0;
初始开始
#10 ctrl1='d1;
#20 ctrl1='d2;
#10 ctrl1='d3;
#100美元完成;
结束
总是开始
#5时钟=!时钟;
结束
初始开始
$dumpfile(“dump.vcd”);
$dumpvars(0,tb_示例);
结束
初始开始
#10 ctrl2='d1;
#20 ctrl2='d2;
#10 ctrl2='d3;
#100美元完成;
结束
始终@(posedge(clk))开始

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

避免这种情况的一种方法是更改clk负边缘上的ctrlx:

  reg clk = 0;
  reg clk = 0;