IMHO, adding new text to an LRM clause cannot be considered an editorial correction. Editorial corrections are fixing typographical errors on existing text, such as spelling, punctuation, fonts, and English grammar. Stu ~~~~~~~~~~~~~~ Stuart Sutherland stuart@sutherland-hdl.com (503) 692-0898 > -----Original Message----- > From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of Arturo > Salz > Sent: Wednesday, June 10, 2009 7:07 PM > To: Clifford E. Cummings; sv-ec@eda.org > Subject: RE: [sv-ec] Question about seeding $urandom > > I just realize that the srandom method is missing from the process prototype > in section 9.7. > > Perhaps we should try to fix that as a typo for this LRM? > > Arturo > > -----Original Message----- > From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of Clifford > E. Cummings > Sent: Wednesday, June 10, 2009 5:43 PM > To: sv-ec@eda.org > Subject: RE: [sv-ec] Question about seeding $urandom > > Hi, Ray - > > This also helps! In fact, as I kept reading into section 18.14.2, I > found another working example of what I needed: > > process::self.srandom(seed); > > Your example (b) (below) is particularly interesting. > > Essentially declare a process handle "p" and don't do anything with > it until we enter the initial block. > > Once inside the initial block, grab a handle to the active initial > block p.self() (?? - is this analysis true) and assign the initial > block process handle to the declared "p" handle and then proceed to > seed the p-handle, which points to the active initial block process (??) > > I appreciate the education. I was not getting it from the LRM. > > Regards - Cliff > > At 05:24 PM 6/10/2009, Ryan, Ray wrote: > > > >Cliff, > > > >The $urandom and $urandom_range methods both use the RNG(Random Number > >Generator) > >of the executing thread. Each thread has it's own RNG. The state of the > >RNG for > >a dynamic process (thread) is initially seeded with the next random > >number from the > >RNG of the executing thread when the a dynamic process is created. See > >18.14.1 for > >initialization of the RNG for static threads. > > > >The RNG state of a thread can be seeded by either: > >a) calling $urandom(seed). The value of the parameter is used to seed > >the internal > > RNG state of the executing thread. The method then returns the next > >random > > number from initialized RNG. For example: > > $display( $urandom(10) ); // seed the thread RNG and print 1st > >the random number > > $display( $urandom() ); // print the next (2nd) random number > > $display( $urandom() ); // print the next (3rd) random number > > $display( $urandom(1) ); // reset the RNG state based on the > >seed value 10 > > $display( $urandom() ); // print next, should be same 2nd > >value for seed 10 > > $display( $urandom() ); // print next, should be same 3rd > >value for seed 10 > > In contrast $random(seed) does not have an internal state, it simply > >uses the seed > > parameter to compute a random number AND it also updates the > >parameter (which should > > be a variable). > > The updated seed variable can then be passed to $random(seed) to get > >the next random number. > > > >b) The RNG of a thread can also be seeded using the srandom method the > >of the process (class). > > For example: > > process p; > > initial begin > > p = p.self(); // get handle to the 'process' class for > >the executing thread > > p.srandom(10); // initialize the RNG of the thread with > >seed 10 > > $display($urandom()); > > $display($urandom()); > > $display($urandom()); > > This should print the same sequence of 3 random number as above in > >a). > > > > > >- Ray Ryan > > > > > > > > > > > -----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. > > ---------------------------------------------------- > 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. -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Thu Jun 11 09:11:57 2009
This archive was generated by hypermail 2.1.8 : Thu Jun 11 2009 - 09:12:50 PDT