Verilog - generate random delay time in testbench

AI Thread Summary
The discussion revolves around generating random delay times and values in a Verilog testbench. The user attempts to implement a for-loop to create random delays but encounters a syntax error related to the use of a variable for delay timing. Suggestions include using a second for-loop to incrementally wait for 1ns instead of using the variable directly. The user expresses a need to adjust the maximum and minimum values for the delays, indicating ongoing challenges with the implementation. Overall, the conversation focuses on troubleshooting the random delay generation in Verilog.
hoheiho
Messages
43
Reaction score
0

Homework Statement


Hi, I would like to generate a random delay time and value in testbench. This is what I did:

Code:
for(i=0;i<300;i=i+30)
  begin
  j = i + {$random} % (300 - i) // MIN + {$random} % (MAX - MIN )
  #j b = {$random} %3;
  #3ns b = 3'b000;
  end

I want to generate random value in random time. int i give me the range of random time. j is the actual random delay timing and b is the random value.
What I want to do here is generate a range -> generate delay time-> use value b in the the generated delay time -> recover value b after 3ns.

But it comes out error with:
**near "#": syntax error, unexpected '#', expecting ';'

Is that mean I can only use a actual value for the delay? Like #30, #20...but not a unknown value #j ? I have google it but cannot find any useful information about my problem..

Thank you very much for the help
Ivan
 
Last edited:
Physics news on Phys.org
Hi hoheiho!

Looks like you have it right.
Suppose you create a for-loop up to j and wait #1 each time?
 
Thank for your reply
Sorry for my poor english, I didnt get what you mean by wait #1ns? I would like to create a for loop and get the random delay timing between 0 ns to 300ns. It will generate a random delay time each 30ns. (i=0;i<300;i=i+30).
For example
0 ns to 30ns:
j = 20ns -> inject value b at time 20ns -> recovery back to b = 3'b000 at time 23ns -> start next for loop cycle ->
30ns to 60ns:
...
..
.
 
Now that I look again, didn't you forget a ';' on the line before your error?


Btw, instead of waiting with #j, you can also wait with:
Code:
for(k=0;k<j;k=k+1)
  begin
  #1ns ;
  end
 
Sorry for the typing error again :(.

When I do the simulation, the code doesn't work what I prefer. I think I need to use two for loop together to change the MAX and MIN value. I am trying to fix it now.

Thanks :)
 
Back
Top