问题描述
在尝试验证触发器是否在上升沿对输入值进行采样时,我遇到了 Systemverilog 'assert' 令人费解的行为。如果我在上升沿后添加一个任意小的延迟,则断言似乎会通过,但不是正确的。但是,如果我添加一个在上升沿时间打印输出值的“始终”块,它将显示正确的值。顺便说一句,“如果”比较的行为类似于“断言”。我使用 Modelsim 作为我的模拟器。下面是我的带有内联注释的代码来说明问题。另请查看链接中的图片以获得进一步说明。
谢谢。
`timescale 1ns/1ns
module example_t(input logic clk,input logic resetb,input logic selector,output logic result);
always_ff @ (posedge clk or ~resetb)
if(~resetb)
result <= 0;
else
result <= selector ? 1'b1 : 1'b0;
endmodule
module tst();
logic clk;
logic resetb;
logic selector;
logic result;
example_t example(.clk(clk),.resetb(resetb),.selector(selector),.result(result));
//Simulate a clock
always
#10 clk = ~clk;
initial
begin
clk = 0;
resetb = 0; //Reset
selector = 0;
#20
@(posedge clk);
resetb = 1;
#20
@(posedge clk);
selector = 1;
#20 //**At this time we are at 70ns**
@(posedge clk); //**We are already at the posedge,but adding just in case**
assert(result == 1'b1); //**This will fail,meaning result[enter image description here][1]==0 at 70ns**
end
always @ (result)
begin
$display("result=%h time=%t",result,$realtime); //**This will print the value at 70ns as 1**
end
endmodule
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)