Randomizing Arrays and Queues
作者:互联网
您可以随机化动态数组、关联数组和队列。可以将它们声明为“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 来源: https://www.cnblogs.com/xiangtianxiao/p/16594661.html