SystemVerilog 中的 $stable 在总线上运行吗?

Does $stable in SystemVerilog Operate on Buses?

我想验证总线在断言中是否稳定。例如,如果 datare 下降沿之后时钟发生变化,我希望以下断言会标记错误。

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.