学习记录17(SV的数组约束)

1.约束数组的size()函数
用来统计动态数组或者队列的元素个数,此时就不用new()来锁定元素个数
image

2.约束数组的sum()函数
用来计算动态数组或者队列的所有元素的和
image

3.约束数组的常见错误例子
错误1:对于元素长度一定要是无符号随机值,要固定位宽或者将元素范围写在约束中(第二张图)。
image
image

错误2:对于元素的数值,在确定完上下限时,位数要加1,防止溢出
image

错误3:跟2一样会导致溢出,要求约束的1024数值要大于元素的位宽1位或者两位.
image
本质上就是相加超出了定义数组的位宽,导致溢出。

有趣sv数组的约束示例:https://www.cnblogs.com/Alfred-HOO/articles/17432900.html
为什么压缩数组packed约束可以直接用等号,而非压缩数组只能通过foreach逐个元素约束
非压缩数组不能直接用标量 == 进行整体约束,因为它的多个容器无法被单个整数值匹配;必须用 foreach 逐容器约束,或用数组字面量一次性全部匹配。
以arr == 5为例,那么:
合并数组:整个大容器只有一个整数值,所以写 arr == 5,求解器懂你的意思(比较这 32 位是否等于 5)。
非合并数组:是 4 个独立的小容器。如果你写 arr == 5,编译器会报类型不匹配,因为它不知道你指的是第 0 个容器,还是希望 4 个容器都等于 5,还是希望某种组合。这就是你直觉中“等号找不到操作元素”的根源。

posted on 2026-08-01 15:25  tuck0603  阅读(15)  评论(0)    收藏  举报

导航