Verilog $ основанный на времени период времени - PullRequest
0 голосов
/ 16 марта 2020

Я создаю имитационную модель PLL. Я могу найти входной период отсчета с помощью $ 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;


1 Ответ

2 голосов
/ 16 марта 2020

Начальное значение periodd равно 0, поэтому вы получаете нулевую задержку l oop, если второй блок 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;
...