Начальное значение 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;