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