1

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

int              msize  = $urandom_range(20)            ;


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

但是,它显示错误,例如:“常量表达式的非法操作数”
这个选项是什么。

4

2 回答 2

3

数组的压缩部分的维度必须是常数,在编译时决定。的分配msize是在运行时决定的。在msize编译时分配一个参数。

或者,如果你想在运行时mem有一个随机数,那么应该定义为:msizemem

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

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

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

阅读IEEE Std 1800-2012 § 7 中 SystemVerilog 中有关数组的所有内容,它可从 IEEE 网站免费获得。

于 2013-07-31T22:10:59.393 回答
0

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

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

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

于 2013-08-01T17:11:04.040 回答