|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
帮忙看一个local variable相关问题sequence local_var; byte local_data = 8'h0f; ((b, local_data = 8'h0d, $display("%0dns",$stime,,,"local_data_first=%0h",local_data)) or (((##0 (local_data == 8'h0f)), $display("%0dns",$stime,,,"local_data_second=%0h",local_data)))) ##5 (local_data == 8'h0f); endsequence gcheck: assert property (@(posedge clk) $rose(en) |-> ##1 local_var);
代码不完整,主要说明想问的问题
仿真过程中我改变了OR里面第二个分支最前面的delay,上述code中为##0,我分别改成##0,##1,##2得到如下log。
1: ##0 or no delay(default as the code show)
# 250ns local_data_second=f
# 250ns local_data_first=d
And the assertion passed.
2: ##1
# 250ns local_data_first=d
# ** Error: Assertion error.
# Time: 350 ns Started: 230 ns
The assertion failed.
3. ##2
# 250ns local_data_first=d
# 290ns local_data_second=f
The assertion passed.
在##1的仿真log中可以看到OR的右边分支是fail的,因为没有display数据,所以我改变了写法希望找出local_data的值在##1下到底是多少
((b, local_data = 8'h0d, $display("%0dns",$stime,,,"local_data_first=%0h",local_data)) or (((##1 !(local_data == 8'h0f)), $display("%0dns",$stime,,,"local_data_second=%0h",local_data)))) ##5 (local_data == 8'h0f);
The log show:
# 250ns local_data_first=d
# 270ns local_data_second=0
# ** Error: Assertion error.
# Time: 370 ns Started: 230 ns
从我的理解上,进入OR sequence判断后,会在两个并行的thread中各自产生local_data。在第二个分支里,因为没有对local变量再次赋值,所以他的值应该始终是初始赋值的8'h0f,所以为什么在##1的条件下会显示值为8'h0,而在##0和##2会显示是8'h0f。 |
|