Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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 - Fatal编程技术网

Verilog 延迟阻塞/非阻塞

Verilog 延迟阻塞/非阻塞,verilog,Verilog,我现在被一段Verilog代码弄糊涂了,它是一种测试阻塞或非阻塞分配特性的代码,它与延迟模型相结合 代码如下: 然而,模拟结果是: 0,0,x,x 4,1,x,x 13,1,0,x 15,1,0,1 我想知道为什么总是@(x,y)没有在时隙2和4触发。您已经声明x,y,z为1位。因此,当设置为2时,您只能获得2'b10的LSB(位0) 如果您只是测试延迟建模,则使用整数而不是reg integer x,y,z; 现在应该可以看到大于1的值。关于的更新示例 如果我将您的显示器更新为显示器

我现在被一段Verilog代码弄糊涂了,它是一种测试阻塞或非阻塞分配特性的代码,它与延迟模型相结合

代码如下:

然而,模拟结果是:

 0,0,x,x
 4,1,x,x
13,1,0,x
15,1,0,1

我想知道为什么总是@(x,y)没有在时隙2和4触发。

您已经声明x,y,z为1位。因此,当设置为2时,您只能获得2'b10的LSB(位0)

如果您只是测试延迟建模,则使用整数而不是reg

integer x,y,z;
现在应该可以看到大于1的值。关于的更新示例

如果我将您的显示器更新为显示器

initial begin
  forever begin
    $display("%3t: %2d,  %2d,  %2d",$realtime, x, y, z);
    #2;
  end
end
我在
#2
上没有得到相同的结果,但是如果我们将循环延迟更改为
#1
,它看起来就像预期的那样工作。我曾尝试强制执行
`timescale
,但这似乎无法解决问题

# KERNEL:   0:  2,   0,   0
# KERNEL:   1:  2,   0,   0
# KERNEL:   2:  2,   0,   2 //<-- update at time 2
变成

always @* begin

您是正确的,宽度不匹配和未初始化的x、y、z值会导致观察问题\同时,仅对该零件进行修改,即可得到与手工计算相同的仿真结果。$monitor足以捕获特定模拟步骤的“最终”结果,因为它位于非活动区域。因此,不需要永久+显示,我想:)再次感谢您的时间
# KERNEL:   0:  2,   0,   0
# KERNEL:   1:  2,   0,   0
# KERNEL:   2:  2,   0,   2 //<-- update at time 2
always @(a,b) begin
always @* begin