verilog $time 基于时钟周期
verilog $time based clock period
我正在生成 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;
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;
我正在生成 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;
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;