我编写了一个代码来以下列方式初始化一个打包的关联数组。
int msize = $urandom_range(20) ;
bit [0:3] [0:msize] mem [int] ;
但是,它显示错误,例如:“常量表达式的非法操作数”
这个选项是什么。
我编写了一个代码来以下列方式初始化一个打包的关联数组。
int msize = $urandom_range(20) ;
bit [0:3] [0:msize] mem [int] ;
但是,它显示错误,例如:“常量表达式的非法操作数”
这个选项是什么。
数组的压缩部分的维度必须是常数,在编译时决定。的分配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 网站免费获得。
您可以将数组定义为 rand 并使用约束:
rand msize
rand bit [0:3] mem [int] []
然后在一个约束中:
msize inside [5:10]
foreach(mem[idx])
mem[idx].size == msize
附带说明 $urandom 中使用的种子与系统verilog种子不同,因此如果您使用 $urandom 测试将不会重建