如何在 SystemVerilog 中检查信号在使用 ModelSim 进行仿真期间变高
How to check in SystemVerilog that signal went high during simulation using ModelSim
我需要检查,在测试平台期间,特定信号是否至少在一个时钟周期内变为逻辑 1。
我测试了以下断言,它们应该是等价的:
initial assert property (
@(posedge clk_tree_x.ClkRsBST_ix.clk)
s_eventually TS.TSUpdated) else
$error("Was not active");
和
initial begin
assert property (@(posedge clk_tree_x.ClkRsBST_ix.clk)
strong(##[*] TS.TSUpdated)) else
$error("Was not active");
end
在使用 Mentor ModelSim SE64 2021.1 进行仿真时,结果非常奇怪。
在 第一次模拟通过 时,模拟完全忽略了这个断言。在 第二次模拟传递 上,ModelSim 显然使用先前模拟的结果来宣布 在断言触发的新 运行 模拟发生 之前:
# Time: 2005087500 ps Started: 5 ns Scope: tb_bst_provider.DUT.fook File: bst_provider.sv Line: 669
# ** Warning: (vsim-8777) Breakpointing based on severity while evaluating concurrent assertion is not supported.
# Time: 2005087500 ps Iteration: 0 Region: /tb_bst_provider/DUT File: bst_provider.sv
不确定这是否对所有强属性都是一致的行为,但它对任何类型的单元测试几乎没有用,因为测试永远不会 运行 两次使用相同的参数。
有什么方法可以断言 'signal is not present through the simulation run' 确实可以与 modelsim 一起使用吗?
我不确定你是否可以用断言来做到这一点。您可以使用断言覆盖检测非活动信号。在任何情况下,您都不应该在初始块中放置断言。
可以在不使用断言的情况下完成对 activity 的潜在检查,如下例所示。
always @(posedge clk) begin
if (sig == 1)
active <= 1;
end
final begin
if (!active)
$error("was not active");
else
$info ("it was active");
end
只需确保您可以正常退出模拟,否则 final 可能在中断的情况下根本不会执行。
我需要检查,在测试平台期间,特定信号是否至少在一个时钟周期内变为逻辑 1。
我测试了以下断言,它们应该是等价的:
initial assert property (
@(posedge clk_tree_x.ClkRsBST_ix.clk)
s_eventually TS.TSUpdated) else
$error("Was not active");
和
initial begin
assert property (@(posedge clk_tree_x.ClkRsBST_ix.clk)
strong(##[*] TS.TSUpdated)) else
$error("Was not active");
end
在使用 Mentor ModelSim SE64 2021.1 进行仿真时,结果非常奇怪。
在 第一次模拟通过 时,模拟完全忽略了这个断言。在 第二次模拟传递 上,ModelSim 显然使用先前模拟的结果来宣布 在断言触发的新 运行 模拟发生 之前:
# Time: 2005087500 ps Started: 5 ns Scope: tb_bst_provider.DUT.fook File: bst_provider.sv Line: 669
# ** Warning: (vsim-8777) Breakpointing based on severity while evaluating concurrent assertion is not supported.
# Time: 2005087500 ps Iteration: 0 Region: /tb_bst_provider/DUT File: bst_provider.sv
不确定这是否对所有强属性都是一致的行为,但它对任何类型的单元测试几乎没有用,因为测试永远不会 运行 两次使用相同的参数。
有什么方法可以断言 'signal is not present through the simulation run' 确实可以与 modelsim 一起使用吗?
我不确定你是否可以用断言来做到这一点。您可以使用断言覆盖检测非活动信号。在任何情况下,您都不应该在初始块中放置断言。
可以在不使用断言的情况下完成对 activity 的潜在检查,如下例所示。
always @(posedge clk) begin
if (sig == 1)
active <= 1;
end
final begin
if (!active)
$error("was not active");
else
$info ("it was active");
end
只需确保您可以正常退出模拟,否则 final 可能在中断的情况下根本不会执行。