随机打包关联数组的声明

时间:2013-07-31 13:06:00

标签: associative-array system-verilog

我编写了一个代码来按以下方式初始化压缩关联数组。

int              msize  = $urandom_range(20)            ;


bit  [0:3]      [0:msize]   mem     [int]               ;  

但是,它显示的错误如下:“常量表达式的非法操作数”
这个的替代方案是什么?

2 个答案:

答案 0 :(得分:2)

数组的压缩部分的尺寸必须是一致的,在编译时决定。 msize的分配在运行时决定。使msize在编译时分配一个参数。

或者,如果您希望mem在运行时具有随机msize,则应将mem定义为:

bit [0:3] mem [int] [];

在访问任何元素之前,您应该放置:

if(!mem.exists(lookup_id)) mem[int_key_address] = new[msize];

IEEE Std 1800-2012的第7段中阅读SystemVerilog中关于数组的所有内容,它是免费的IEEE网站。

答案 1 :(得分:0)

您可以将数组定义为rand并使用约束:

  rand msize    
  rand bit  [0:3] mem [int] []

然后在约束中:
      msize inside [5:10]
      foreach(mem[idx]) mem[idx].size == msize
在旁注中,$ urandom中使用的种子与系统verilog种子不同,因此如果使用$ urandom,则测试将不会重建