![芯片验证调试手册:验证疑难点工作锦囊](https://wfqqreader-1252317822.image.myqcloud.com/cover/927/47548927/b_47548927.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1.11 多维数组的声明和使用,哪种方式更合适呢?
一般我们建议多维数组的直接声明不超过3个维度(例如,int arr_fix_d1[2][3][4])。在声明多维数组时,可以伴随有rand属性,或将数组类型声明为动态数组等常见操作。
如果是多维动态数组,一种简单的方法是直接声明多维动态数组。在要求随机属性时,可以在约束中对多维数组的每个维度进行约束。
对于复杂的结构,可以先使用结构体来封装,再进行逐级嵌套,而在上层约束中对整个结构体构成的多维数组进行约束。如果不仅数据成员复杂,而且每一级的数据成员之间也有较复杂的约束,那么可以先使用类来进行数据封装,并在该层次中声明约束,而后进行逐层封装。
关键词:
multi-dimension,array,class,struct
避坑指南:
对于通过类来逐层封装多维数组的情况,不但要注意在句柄数组前使用rand来描述,还要考虑在每一级通过函数post_randomize()对动态数组的句柄元素进行对应的实例创建和句柄复制。
上面这一步很重要,因为上层类的随机化只会随机化数组的大小,而不会创建下层类的实例。要实现这一目的,可以通过post_randomize()函数来完成(其伴随着对randomize()函数的调用)。
参考代码:sv_multi_dimension_array.sv
![](https://epubservercos.yuewen.com/563682/26947507002660206/epubprivate/OEBPS/Images/txt002_16.jpg?sign=1739288216-WbVwwBYCZ3TmLHssTmRyK33UOZN24tFG-0-1616b1ef03b4b86718dc29ce72fcaccf)
![](https://epubservercos.yuewen.com/563682/26947507002660206/epubprivate/OEBPS/Images/txt002_17.jpg?sign=1739288216-5t2eFeHb4NIp7iAEBpfmiGZl287u5ANg-0-b3e8b57e38c1833f01567854c9e2bf1a)
阅读手记: