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