verilog $ тактовый период на основе времени

Я создаю имитационную модель ФАПЧ. Я могу найти период входного сигнала ref, используя $ time, и разделить период с помощью делителя pll, чтобы сгенерировать выходные часы pll. как показано ниже, но симулятор ничего не показывает на форме волны, хотя синтаксической ошибки нет. Что плохого в таком подходе?

 time prev_t, periodd;
 reg clk = 0;

  always @(posedge CLK_PLL_IN) begin
    periodd = $time - prev_t;
    prev_t  = $time;
  end 

  always #(periodd/pll_div) clk = ~clk;



person Fradaric Joseph    schedule 16.03.2020    source источник
comment
Ваш код не является полноценным автономным средством тестирования. Добавьте необходимый код: заголовок модуля, определение CLK_PLL_IN и то, как вы создаете сигнал (часы) с этим и т. Д.   -  person Oldfart    schedule 16.03.2020


Ответы (1)


Начальное значение periodd равно 0, поэтому вы попадете в цикл с нулевой задержкой, если второй блок always начинается раньше первого. Я также предлагаю использовать realtime и $realtime вместо time и $time в случае, если фракционная часть periodd/pll_div меньше временной шкалы.

realtime prev_t, periodd=0;
reg clk = 0;

  always @(posedge CLK_PLL_IN) begin
    periodd = $time - prev_t;
    prev_t  = $time;
  end 

  initial wait(periodd >0)
      forever #(periodd/pll_div) clk = ~clk;
person dave_59    schedule 16.03.2020