System verilog 绑定断言序列与变量
System verilog bind assertion sequence with variable
我必须编写带绑定的系统 verilog 断言。
断言应该是这样的:
assert property (@(posedge (mod_clk & clk_gen_enable)) ##delay (clk_sync == 1));
mod_clk、clk_gen_en 和 clk_sync 是我绑定的模块的信号,延迟是一个变量,它是计算的结果,应该在 [= st_clk 的 17=] 这也是我绑定的模块的信号
怎么写才正确??
要使绑定生效,您只需将此断言封装在一个模块中
module my_module;
assert property (@(posedge (mod_clk & clk_gen_enable)) ##delay (clk_sync == 1));
endmodule
使用 bind
构造将 my_module
插入目标模块。 Verilog 搜索规则将向上搜索以查找您的信号名称。
bind my_target_module my_module my_instance_name();
##delay
在您之前指定的时钟边沿工作,您将其设为 mod_clk & clk_gen_enable
。我猜你真的想暗示 clk_gen_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
我必须编写带绑定的系统 verilog 断言。
断言应该是这样的:
assert property (@(posedge (mod_clk & clk_gen_enable)) ##delay (clk_sync == 1));
mod_clk、clk_gen_en 和 clk_sync 是我绑定的模块的信号,延迟是一个变量,它是计算的结果,应该在 [= st_clk 的 17=] 这也是我绑定的模块的信号 怎么写才正确??
要使绑定生效,您只需将此断言封装在一个模块中
module my_module;
assert property (@(posedge (mod_clk & clk_gen_enable)) ##delay (clk_sync == 1));
endmodule
使用 bind
构造将 my_module
插入目标模块。 Verilog 搜索规则将向上搜索以查找您的信号名称。
bind my_target_module my_module my_instance_name();
##delay
在您之前指定的时钟边沿工作,您将其设为 mod_clk & clk_gen_enable
。我猜你真的想暗示 clk_gen_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