ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Randomizing Arrays and Queues

2022-08-17 12:30:23  阅读:161  来源: 互联网

标签: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
来源: https://www.cnblogs.com/xiangtianxiao/p/16594661.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有