一般我们建议多维数组的直接声明不超过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
阅读手记: