【问题标题】:System Verilog: Check if Signal stays high系统 Verilog:检查信号是否保持高电平
【发布时间】:2021-09-02 18:23:40
【问题描述】:

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

【问题讨论】:

  • SVA 可以根据时钟周期检查宽度。

标签: system-verilog verification


【解决方案1】:

如果这个信号是模块端口,可以使用$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2020-02-20
    • 1970-01-01
    相关资源
    最近更新 更多