我编写了一个代码来按以下方式初始化压缩关联数组。
int msize = $urandom_range(20) ;
bit [0:3] [0:msize] mem [int] ;
但是,它显示的错误如下:“常量表达式的非法操作数”
这个的替代方案是什么?
答案 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,则测试将不会重建