SystemVerilog 中的 $stable 在总线上运行吗?
Does $stable in SystemVerilog Operate on Buses?
我想验证总线在断言中是否稳定。例如,如果 data
在 re
下降沿之后时钟发生变化,我希望以下断言会标记错误。
wire clk, rst_n, re;
wire [15:0] data;
a_chk_stable_data:
assert property (@(posedge clk) disable iff(!rst_n)
($fell(re) |=> $stable(data[15:0])))
else begin
$display("ERROR: one or more bits of data not stable");
end
我认为 $rose
仅在总线的 LSB 上运行 (link)。 $stable
是否也只在 LSB 上运行,还是支持任何宽度的信号?
根据the spec,$stable
对整个表达式进行运算。而 $rose
和 $fell
对表达式的 LSB 进行运算。
来自 IEEE 1800-2012 的第 16.9.3 节:
— $rose
returns true if the LSB of the expression changed to 1 . Otherwise, it returns false.
— $fell
returns true if the LSB of the expression changed to 0 . Otherwise, it returns false.
— $stable
returns true if the value of the expression did not change. Otherwise, it returns false.
— $changed
returns true if the value of the expression changed. Otherwise, it returns false.
我想验证总线在断言中是否稳定。例如,如果 data
在 re
下降沿之后时钟发生变化,我希望以下断言会标记错误。
wire clk, rst_n, re;
wire [15:0] data;
a_chk_stable_data:
assert property (@(posedge clk) disable iff(!rst_n)
($fell(re) |=> $stable(data[15:0])))
else begin
$display("ERROR: one or more bits of data not stable");
end
我认为 $rose
仅在总线的 LSB 上运行 (link)。 $stable
是否也只在 LSB 上运行,还是支持任何宽度的信号?
根据the spec,$stable
对整个表达式进行运算。而 $rose
和 $fell
对表达式的 LSB 进行运算。
来自 IEEE 1800-2012 的第 16.9.3 节:
—
$rose
returns true if the LSB of the expression changed to 1 . Otherwise, it returns false.
—$fell
returns true if the LSB of the expression changed to 0 . Otherwise, it returns false.
—$stable
returns true if the value of the expression did not change. Otherwise, it returns false.
—$changed
returns true if the value of the expression changed. Otherwise, it returns false.