System verilog 带变量的系统verilog绑定断言序列
我必须用绑定编写系统verilog断言 断言应该类似于:System verilog 带变量的系统verilog绑定断言序列,system-verilog,system-verilog-assertions,System Verilog,System Verilog Assertions,我必须用绑定编写系统verilog断言 断言应该类似于: assert property (@(posedge (mod_clk & clk_gen_enable)) ##delay (clk_sync == 1)); mod_clk、clk_gen_en和clk_sync是我绑定到的模块的信号,延迟是一个变量,它是计算的结果,应该以st_clk的“单位”为单位,st_clk也是我绑定到t的模块的信号 我怎样才能正确地编写它呢?对于bind to work,您所需要的只是将这个断言封装
assert property (@(posedge (mod_clk & clk_gen_enable)) ##delay (clk_sync == 1));
mod_clk、clk_gen_en和clk_sync是我绑定到的模块的信号,延迟是一个变量,它是计算的结果,应该以st_clk的“单位”为单位,st_clk也是我绑定到t的模块的信号
我怎样才能正确地编写它呢?对于bind to work,您所需要的只是将这个断言封装在一个模块中
module my_module;
assert property (@(posedge (mod_clk & clk_gen_enable)) ##delay (clk_sync == 1));
endmodule
使用bind
构造将myu模块
插入目标模块。Verilog搜索规则将向上搜索以查找您的信号名称
bind my_target_module my_module my_instance_name();
##delay
在您之前指定的时钟边缘上工作,您将其作为mod#clk&clk#U gen_enable
。我猜你真的想把clk\u gen\u enable
作为暗示
property sync;
int counter;
@(posedge mod_clk) (clk_gen_enable, counter=delay)
|-> @(posedge st_clk) (1,counter--)[*0:$] ##1 counter<0 ##0 (clk_sync == 1));
endproperty
属性同步;
整数计数器;
@(posedge mod_clk)(clk_gen_启用,计数器=延迟)
|->@(posedge st#u clk)(1,计数器--)[*0:$]##1计数器这里有许多不清楚的东西。例如,您如何绑定到什么中。是什么让您认为您提供的代码不正确?你是否犯了错误,行为不当?请提供一个可以复制的例子,并将你的问题细化到一个特定的问题。@dave_59-这就是我的意思。但是我可以在循环数中使用一个变量吗?它可能会偶尔改变……对不起,我的回答中没有提到这个要求。请参见编辑后的回答能否解释第二部分(1,计数器--)[*0:$]##1 counterSystemVerilog断言的工作原理与文本正则表达式类似[*0:$]
表示前面的表达式1
必须在0到无限个连续循环之间为真。下一个循环,计数器
必须为负数。当匹配时,同样,clk\u sync
必须为true。它工作不正常。我可以在波形中看到,断言是活动的,因为mod_clk
的负边缘,并且在clk_sync
的负边缘之后完成了st_clk
的一个时钟,以防clk_sync==0
(并且它通过了“尽管它应该失败”)。如果clk\u sync==0
则自mod\u clk
的posedge开始,断言处于活动状态,并在clk\u sync
的负边缘结束。