Система Verilog связать последовательность утверждений с переменной - PullRequest
0 голосов
/ 16 января 2020

Мне нужно написать системное verilog утверждение с привязкой.

Утверждение должно быть примерно таким:

assert property (@(posedge (mod_clk & clk_gen_enable)) ##delay (clk_sync == 1));

mod_clk, clk_gen_en и clk_syn c являются сигналом модуля, который я bind to, и delay - это переменная, которая является результатом вычисления и должна быть в «единицах» st_clk, которая также является сигналом модуля, который я связываю t Как я могу написать это правильно ??

1 Ответ

1 голос
/ 16 января 2020

Для привязки к работе все, что вам нужно, это инкапсулировать это утверждение в модуле

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
...