首页 > 其他分享 >Randomizing Arrays and Queues

Randomizing Arrays and Queues

时间:2022-08-17 12:33:24浏览次数:70  
标签:rand Randomizing addr dq2 constraint Arrays Queues len data

您可以随机化动态数组、关联数组和队列。可以将它们声明为“rand”或“randc”,这将导致数组的所有元素被随机化。数组中的所有元素都是随机的,每次随机( 调用randomize() )会覆盖任何先前的数据。您还可以约束单个的数组元素。下面是一个示例:

class aClass;
   rand bit [1:0] addr [ ] = {1,2,3,4}; //dynamic array
   //associative array
   rand bit [7:0] St [string] = '{"Peter":26, "Paul":24};
   rand bit [7:0] dq2[$] = { 3, 2, 7, 1 }; //queue
   rand bit [2:0] len;
   rand bit [7:0] data [ ]; //dynamic array
 //constraint size of dynamic array 'data'
   constraint length { data.size == len; }
 //constraint addr[0] of dynamic array 'addr'
   constraint addrC {addr[0] == 0;}
 //constraint dq2[0] of queue 'dq2'
   constraint dq2C {dq2[0] == 'hff;}
  endclass
  module tb;
    initial begin
      aClass aC = new ( );
      for (int i = 0; i < 4; i++) begin
        aC.randomize();
        $display ("addr=%p St=%p dq2=%p", aC.addr, aC.St, aC.dq2);
      end
      $display("\n");
      for (int i = 0; i < 4; i++) begin
        aC.randomize( );
        $display ("len=%0d data=%p", aC.len, aC.data);
      end
    end
  endmodule

 

模拟结果:

Compiler version S-2021.09; Runtime version S-2021.09; Aug 17 00:05 2022
addr = '{'h0, 'h3, 'h3, 'h1} St = '{"Paul":'h8a, "Peter":'hc4} dq2 = '{'hff, 'h73, 'h42, 'h49}
addr = '{'h0, 'h2, 'h3, 'h2} St = '{"Paul":'h91, "Peter":'h83} dq2 = '{'hff, 'h3d, 'hdb, 'hfe}
addr = '{'h0, 'h1, 'h2, 'h3} St = '{"Paul":'hec, "Peter":'h99} dq2 = '{'hff, 'hd2, 'hac, 'hb4}
addr = '{'h0, 'h1, 'h3, 'h1} St = '{"Paul":'h93, "Peter":'h37} dq2 = '{'hff, 'h6a, 'h61, 'h84}


len = 1 data = '{'hb}
len = 4 data = '{'h7b, 'h95, 'hb9, 'h78}
len = 1 data = '{'h0}
len = 6 data = '{'hda, 'hea, 'hf6, 'he7, 'hd1, 'h9a}
V C S S i m u l a t i o n R e p o r t

 在“aClass”类中,我们声明了两个动态数组“addr”和“data”,一个字符串类型(“St”)的关联数组和一个名为“dq2”的队列。所有都被声明为“rand”。然后我们约束动态数组“addr”的单个元素以及队列“dq2”的单个元素:

//constraint addr[0] of dynamic array 'addr'
constraint addrC {addr[0] == 0;}
//constraint dq2[0] of queue 'dq2'
constraint dq2C {dq2[0] == 'hff;}

此外,我们声明了一个 rand 变量“len”,并使用它的随机值来约束动态数组“data”的大小:

rand bit [2:0] len;
rand bit [7:0] data [ ];
//constraint size of dynamic array 'data'
constraint length { data.size == len; }

当这些数组和队列被随机化时,这些约束将保持不变。

“addr”、“St”和“dq2”的随机值如模拟日志的第一部分所示。请注意,addr[0] 被限制为“0”,dq2[0] 被限制为 'hff。因此,您会看到这些值不是随机的。其他单个元素按预期随机化。注意关联数组元素是如何随机化的。

在模拟日志的第二部分,我们看到“len”的随机值。这个“len”值将调整动态数组“data”的大小。如模拟日志所示,“len”不断变化,数组“data”的大小也在变化。因此,您会看到不同大小的“data”数组,并且其各个元素是随机的。

当一个队列被randomize()调整大小时,元素会根据需要在队列的后面(即右侧)插入或删除,以产生新的队列大小;插入的任何新元素都采用元素类型的默认值。

标签:rand,Randomizing,addr,dq2,constraint,Arrays,Queues,len,data
From: https://www.cnblogs.com/xiangtianxiao/p/16594661.html

相关文章