其他分享
首页 > 其他分享> > Randomizing Object Handle

Randomizing Object Handle

作者:互联网

您可以将对象句柄声明为“rand”。在这种情况下,该对象的所有变量和约束都是随机的。随机化不会修改实际的对象句柄。此外,对象句柄不能声明为“randc”。下面是一个例子:

class child;
  rand bit [7:0] data;
endclass
class parent extends child;
  rand bit [7:0] addr;
  rand child ch = new ( ); //object handle is 'rand'
endclass
  module tb;
    int i;
    parent pp = new ( );
    initial begin
      for (i=0; i < 4; i++) begin
        pp.randomize( );
        $display("Parent addr = %h Child data = %h", pp.addr, 
pp.ch.data);
      end
    end
  endmodule

模拟结果:

Compiler version S-2021.09; Runtime version S-2021.09; Aug 17 00:35 2022
Parent addr: 8f Child data: 11
Parent addr: 97 Child data: 16
Parent addr: de Child data: f3
Parent addr: 4f Child data: b5
V C S S i m u l a t i o n R e p o r t

“child”类有一个 rand 变量“addr”。 “父”类扩展了“子”类,并添加了一个名为“数据”的 rand 变量。现在,我们用名为“ch”的对象句柄在“parent”类中实例化“child”类。然后我们随机化对象句柄“ch”,如代码所示。接下来,当我们在模块“tb”中实例化类“parent”并将其随机化(pp.randomize())时,它不仅会随机化其属性,还会随机化类“child”的属性。因此,您在模拟日志中看到“addr”(属于“parent”类)和“data”(属于“child”类)​​都是随机的。显然,如果“ch”没有声明为rand,它的属性就不会被随机化。示例如下:

 1 class child;
 2   rand bit [7:0] data;
 3 endclass
 4 class parent extends child;
 5   rand bit [7:0] addr;
 6   rand child ch = new ( ); //object handle is 'rand'
 7 endclass
 8   module tb;
 9     int i;
10     parent pp = new ( );
11     initial begin
12       for (i=0; i < 4; i++) begin
13         pp.randomize( );
14         $display("Parent addr = %h Child data = %h", pp.addr, 
15 pp.ch.data);
16       end
17     end
18   endmodule

模拟结果:

Compiler version S-2021.09; Runtime version S-2021.09; Aug 17 00:38 2022
Parent addr: 8f Child data: 00
Parent addr: 97 Child data: 00
Parent addr: de Child data: 00
Parent addr: 4f Child data: 00
V C S S i m u l a t i o n R e p o r t

 

标签:rand,child,Randomizing,Handle,addr,Object,pp,Child,data
来源: https://www.cnblogs.com/xiangtianxiao/p/16594720.html