RE: [sv-ec] Question about seeding $urandom

From: Bresticker, Shalom <shalom.bresticker_at_.....>
Date: Thu Jun 11 2009 - 07:01:36 PDT
Cliff,

You got lucky with respect to the syntax.
The BNF does not allow empty parentheses to either $random or $urandom, and for $random, the seed has to be an integral variable and may not be a constant. 
Some tools will not compile those cases.

Regards,
Shalom 

> -----Original Message-----
> From: owner-sv-ec@server.eda.org 
> [mailto:owner-sv-ec@server.eda.org] On Behalf Of Clifford E. Cummings
> Sent: Thursday, June 11, 2009 2:32 AM
> To: sv-ec@server.eda.org
> Subject: [sv-ec] Question about seeding $urandom
> 
> Hi, All -
> 
> I think random falls under EC, so at the bottom is the question.
> 
> I was playing with $urandom and trying to seed it, and have run into 
> problems related to my understanding of seeding this function.
> 
> The following code is also in an attached file: urandomtest.sv
> (I run the nine different iterations using +define+RUN1 thru 
> +define+RUN9)
> 
> program urandomtest;
>    logic [7:0] a;
>    int         seed;
> 
>    initial $monitor("a=%h", a);
> 
>    initial begin
>      `ifdef RUN1
>      repeat(20) #1 a = $random();
>      `elsif RUN2
>      repeat(20) #1 a = $random(145);
>      `elsif RUN3
>      seed = 145;
>      repeat(20) #1 a = $random(seed);
>      `elsif RUN4
>      repeat(20) #1 a = $urandom();
>      `elsif RUN5
>      repeat(20) #1 a = $urandom(145);
>      `elsif RUN6
>      seed = 145;
>      repeat(20) #1 a = $urandom(seed);
>      `elsif RUN7
>      repeat(20) #1 a = $urandom_range(145);
>      `elsif RUN8
>      repeat(20) #1 a = $urandom_range(100,145);
>      `elsif RUN9
>      seed = 145;
>      repeat(20) #1 a = $urandom_range(seed);
>      `endif
>    end
> endprogram
> 
> $random - normal Verilog behavior
> RUN1 - $random() generates 20 random numbers
> 
> RUN2 - generates the same random number 20 times, each time using the 
> seed value of 145.
> 
> RUN3 - generates 20 random numbers with the first number based on the 
> "seed" value of 145.
> 
> $urandom - a few surprises
> 
> RUN4 - generates 20 urandom numbers.
> 
> RUN5 - generates the same urandom number 20 times, each time using 
> the seed value of 145. In P1800-2009 Ballot Draft, clause 18.13.1, 
> last sentence in the paragraph after the prototype function is a 
> little misleading when it says: "The random number generator (RNG) 
> shall generate the same sequence of random numbers every time the 
> same seed is used."
> 
> RUN6 - generates the same urandom number 20 times, each time using 
> the seed value of 145 (seeding behavior is different than Verilog's 
> $random from RUN3).
> 
> $urandom_range - no big surprises
> 
> RUN7 - generates 20 urandom_range numbers between 0-145
> 
> RUN8 - generates 20 urandom_range numbers between 100-145
> 
> RUN9 - generates 20 urandom_range numbers between 0-145
> 
> Question - what is the correct way to seed the $urandom function when 
> used in procedural code outside of a class??
> 
> Thanks for any feedback.
> 
> Regards - Cliff
> 
> ----------------------------------------------------
> Cliff Cummings - Sunburst Design, Inc.
> 14314 SW Allen Blvd., PMB 501, Beaverton, OR 97005
> Phone: 503-641-8446 / FAX: 503-641-8486
> cliffc@sunburst-design.com / www.sunburst-design.com
> Expert Verilog, SystemVerilog, Synthesis and Verification Training
> 
> -- 
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
> 
> 
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Thu Jun 11 07:02:54 2009

This archive was generated by hypermail 2.1.8 : Thu Jun 11 2009 - 07:03:45 PDT