随机打包关联数组的声明

问题描述 投票:1回答:2

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

int              msize  = $urandom_range(20)            ;


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

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

associative-array system-verilog
2个回答
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网站。


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.