System Verilog:检查信号是否保持高电平

System Verilog: Check if Signal stays high

是否有一种简单的方法来检查给定信号是否在几微秒内保持高电平。据我了解,在 SVA 中我们只能检查信号在某个时间戳是否高。

如果这个信号是模块端口,你可以使用$width时序检查。

module desgin(input wire signal);
  specify
    $width(posedge signal, 2us);
  endspecify
  ...
endmodule

如果这是任意信号,您可以使用 bind 语句将此模块插入设计中的任何位置

module widthcheck #(real limit) (input signal);
  specify
    $width(posedge signal, limit);
  endspecify
endmodule

module testbench;
  bind target_instance widthcheck#(2us) (target_signal);
  ...
endmodule

当然,总有蛮力方法

real rise, fall, width;
always begin
  wait(signal)  rise = $realtime;
  wait(!signal) fall = $realtime;
  width = fall - rise;
  if (width<limit)
     $error("signal width(%t) less than limit(%t)", width, limit);
end