# Verilog - generate random delay time in testbench

1. Jul 14, 2012

### hoheiho

1. The problem statement, all variables and given/known data
Hi, I would like to generate a random delay time and value in testbench. This is what I did:

Code (Text):
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: Jul 14, 2012
2. Jul 14, 2012

### I like Serena

Hi hoheiho!

Looks like you have it right.
Suppose you create a for-loop up to j and wait #1 each time?

3. Jul 14, 2012

### hoheiho

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:
...
..
.

4. Jul 14, 2012

### I like Serena

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 (Text):
for(k=0;k<j;k=k+1)
begin
#1ns ;
end

5. Jul 14, 2012

### hoheiho

Sorry for the typing error again :(.

When I do the simulation, the code doesnt 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 :)