как отложить начало часов?

Используя системный verilog и новый для него и для verilog, я хочу отложить начало часов на 46,666 нс в тестовом стенде. для этого я объявил другой сигнал, переключил его на 1 после 46.666 и стробировал им свои часы. однако он не работает, и я не понимаю, почему. любая помощь будет очень признательна. код, который я использую:

// 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;

person Yarok    schedule 08.11.2017    source источник


Ответы (1)


Проблема в том, что когда clkstart равно 0, ваш блок always попадает в бесконечный цикл с нулевой задержкой, и время не может идти вперед. Я думаю, что ты хочешь

initial begin
    #46.666ns 
    forever begin
         #21.25ns clk = 0;
         #20.416ns clk = 1;
    end
person dave_59    schedule 08.11.2017
comment
Спасибо, это заставило это работать :) однако симуляция работает заметно медленнее, чем когда я запускал ее с помощью: always #21.833ns clk = ~clk. это связано с бесконечным циклом? - person Yarok; 08.11.2017
comment
Трудно сказать, когда вы сравниваете то, что не работало, с тем, что сейчас работает. Моделирование по-прежнему заканчивается в одно и то же время? Может разница в рабочем цикле. Лучший способ устранить проблемы с производительностью — использовать профилировщик вашего инструмента. - person dave_59; 08.11.2017