System verilog 如何延迟时钟的开始?

System verilog 如何延迟时钟的开始?,system-verilog,clock,System Verilog,Clock,使用系统verilog及其新版本和verilog, 我想在测试台上将时钟的开始延迟46.666ns。 为此,我声明了另一个信号,将其切换到46.666后的1,并用它选通我的时钟。但是它不起作用,我不明白为什么。任何帮助都将不胜感激。 我正在使用的代码: // generate CLKXI and inject to vt logic clk = 1; logic clkstart = 0; initial begin #46.666ns clkstart = 1; end alway

使用系统verilog及其新版本和verilog, 我想在测试台上将时钟的开始延迟46.666ns。 为此,我声明了另一个信号,将其切换到46.666后的1,并用它选通我的时钟。但是它不起作用,我不明白为什么。任何帮助都将不胜感激。 我正在使用的代码:

// generate CLKXI and inject to vt
logic clk = 1;
logic clkstart = 0;

initial begin
    #46.666ns clkstart = 1;
end

always 
begin
    if (clkstart && ~clk) #21.25ns clk = ~clk;
    else if (clkstart && clk)  #20.416ns clk = ~clk;
end

assign test_wrapper.dut_top.CLKXI = clk;

问题是当
clkstart
为0时,您的
始终
块进入一个零延迟无限循环,时间无法前进。我想你想要的是

initial begin
    #46.666ns 
    forever begin
         #21.25ns clk = 0;
         #20.416ns clk = 1;
    end

谢谢,这使它工作了:)但是,模拟运行速度明显慢于我使用时的速度:
始终#21.833ns clk=~clk
。这和永久循环有关吗?当你比较一些不起作用的东西和现在起作用的东西时,很难说。模拟是否仍在同一时间结束?可能是占空比差异。调试性能问题的最佳方法是使用工具的探查器。