系统verilog期望行为

时间:2018-01-24 13:21:53

标签: system-verilog system-verilog-assertions

我尝试将expect与以下属性一起使用

module tb;

logic a;
logic clk=0;

default clocking @(posedge clk); endclocking

always
  #5ns clk = ~clk;

initial begin
  $dumpfile("dump.vcd"); $dumpvars;
  $display("START");
  a = 0;
  #100ns;
  a = 1;
  #100ns;
  $finish;
end

initial begin
  #10ns;
  expect(@(posedge clk) 1 ##1 $changed(a) |-> 1) $display("SUCCESS"); else
$display("FAIL");
end

endmodule

预期会在100ns变为0之前阻塞吗?

1 个答案:

答案 0 :(得分:0)

不,它会阻塞到第二个(posedge clk),无论a的值如何,并且将始终通过。

expect语句在第一个clk边缘之前不会开始评估属性。先行者需要两个周期才能匹配或不匹配。由于结果始终为真,因此该属性会在匹配时传递。如果没有匹配,该物业也会空转。