Jump to content

    
Sign in to follow this  
Aleх

Переменная задержка в симуляции

Recommended Posts

Привет! Основательно подзабыл верилог. Нужно получить в симуляции переменную задержку в проводе. При этом рандом должен генериться не один раз при компиляции ($random?), а происходить на лету во время симуляции, т.е. в идеале - каждый следующий toggle провода должен быть с новой задержкой.

Вот код

module inv(
    input    wire    A,
    output    wire    Y
    );
assign #1 Y = ~A;
endmodule

Вместо #1 надо вставить нечто. Можно сменить язык на SV.

Спасибо!

Share this post


Link to post
Share on other sites

Приветствую!

 

Вызов функции расчет задержки для assign "выполняется" один раз в начале сима. В этом  можно убедится  посмотрев на изменения значение del.   

assign #((del=$urandom_range(max, min)))  Y = A;


поэтому если хотите менять задержку  с изменением сигнала  нужно привязаться к этому изменению.   Например 

...
int delay;
assign #(delay)  Y = A;

always (A) delay = $urandom_range(max, min);

 Ну  или  проще  -  использовав  процедурное присвоение , в этом случае вызов функции происходит при каждом изменении сигнала A.
 

  always @(*) begin
    Y = #($urandom_range(max, min)) A;
  end

  // или
  always @(*) begin
    Y <= #($urandom_range(max, min)) A;
  end

 

Удачи! Rob.

P.S.   Xорошая дока по различию  задержек  в Verilog 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this