Paul, I agree with Arturo, structs and classes are similar constructs for randomization. Therefore, if a struct variable IS declared as rand, but an element of the struct is not declared as rand, then that element will not be randomized when the struct is randomized. Thus the purpose of the 'rand' attribute within a struct declaration. Other observations: - if none of the elements of struct (or class) are rand, randomizing the struct variable does nothing. - A struct that contains non-integral elements can be randomized as long as the non-integral elements are also not rand. (same as for a class). Ray > -----Original Message----- > From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On > Behalf Of Arturo Salz > Sent: Wednesday, February 22, 2006 11:37 AM > To: William Paulsen; Rich, Dave; sv-ec@eda.org > Subject: RE: [sv-ec] A question about randomize and non-rand > class handle members > > Paul, > > I believe the LRM needs work in this respect. Your question > is not limited to classes, but it also applies to nested structures: > > typedef struct { rand int a; } s_a; > > struct { > s_a a; // is this randomized > rand int b; > } > > I think the easiest solution would be to treat structures and > classes as orthogonal constructs. Then, a struct that is not > declared as rand will not be randomized, even if it includes > rand members. However, when the randomize operator is applied > to the struct (which is itself not declared as a rand member) > then all its rand-declared members are randomized. > > Arturo > > -----Original Message----- > From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On > Behalf Of William Paulsen > Sent: Wednesday, February 22, 2006 7:38 AM > To: Rich, Dave; sv-ec@eda.org > Subject: RE: [sv-ec] A question about randomize and non-rand > class handle members > > Thanks, > But please consider something similar for structs. If a > struct member is rand, but the struct object in a class is > not rand, does the struct member get randomized? > > EG, does c1.s1.i1 get randomized in a c1.randomize() call? > > If so, then I would expect classes to have similar behavior. > > If not, then what's the purpose of allowing a rand qualifier > on a struct member? > > Bill > > > > module top; > > typedef struct { > rand integer i1; // Does this get randomized? > integer i2; > } struct_t; > > class class1; > struct_t s1; // Note this is not rand > endclass > > integer r; > class1 c1 = new; > > initial begin > r = c1.randomize(); > end > endmodule > > > > -----Original Message----- > From: Rich, Dave [mailto:Dave_Rich@mentor.com] > Sent: Wednesday, February 22, 2006 10:21 AM > To: William Paulsen; sv-ec@eda.org > Subject: RE: [sv-ec] A question about randomize and non-rand > class handle members > > No, only if the declaration of c1 was rand. > > rand class1 c1; > > See 13.3 > > > -----Original Message----- > > From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of > > William Paulsen > > Sent: Wednesday, February 22, 2006 5:23 AM > > To: sv-ec@eda.org > > Subject: [sv-ec] A question about randomize and non-rand > class handle > > members > > > > > > Here's a question about randomization: > > > > In this example, should c2.c1.i1 be randomized? Ie, must randomize > > dereference all handle members in a class and solve all rand members > of > > those classes? (and also recurse) > > > > Thanks, > > Bill Paulsen > > > > > > > > module top; > > > > class class1; > > rand integer i1; > > endclass > > > > class class2; > > class1 c1; // Note there's no rand qualifier endclass > > > > integer r; > > class2 c2 = new; > > > > initial begin > > r = c2.randomize(); > > end > > endmodule > > > >Received on Wed Feb 22 17:30:48 2006
This archive was generated by hypermail 2.1.8 : Wed Feb 22 2006 - 17:31:05 PST