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

From: Rich, Dave <Dave_Rich_at_.....>
Date: Wed Jun 10 2009 - 17:01:22 PDT
Cliff,

 

You need to seed the process using the srandom(seed) method

 

 

initial begin

            process p = process::self();

            p.srandom(seed);

            repeat (20) #1 a = $urandom;

 

Dave

 

 

> -----Original Message-----

> From: owner-sv-ec@server.eda.org [mailto:owner-sv-ec@server.eda.org]
On

> Behalf Of Cliff Cummings

> Sent: Wednesday, June 10, 2009 4:32 PM

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

 


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Jun 10 17:04:51 2009

This archive was generated by hypermail 2.1.8 : Wed Jun 10 2009 - 17:05:31 PDT