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
是否有一种简单的方法来检查给定信号是否在几微秒内保持高电平。据我了解,在 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