学习记录15(SV的随机约束)

1.为什么引入随机化?
image
image

SUV中90%是镜像测试,10%是随机测试。

2.随机约束的核心价值?
1)发现难以预见的缺陷:定向测试只能覆盖设计者认为可能存在的缺陷,而随机测试能够生成大量非预期的场景,从而发现连设计者和验证者都未曾想到的隐蔽 Bug。随着芯片复杂度提升,仅靠定向测试已无法满足验证需求,随机测试能有效补充这一短板
2)大幅减少代码量:随机化通过一次定义约束即可生成多种多样的激励,显著减少了测试代码的编写工作量,能更灵活地模拟协议异常、时序偏差等复杂场景。

rand和randc,randc在区间内所有数随机打乱,且必须出现只能出现一次,单位内所有数都产生完之后进行新一轮的产生
rand是范围完全随机,没有周期,可重复产生同一个数
image
这里constraint c是名为c的约束,直接约束随机化范围,随机化可能会失败,所以写代码时要严谨,
assert(p.randomize()) 是一个即时断言(Immediate Assertion),用来检查 assert是否为真,p.randomize())调用对象 p 的随机化方法,也就是验证随机化是否按照定义的约束 c,是否真的能生成一个合法的随机值。
assert如果求解器失败了,它会立即触发 fatal 终止仿真,而不是让错误的值(src 保持默认 0)悄悄传到 DUT,导致仿真跑飞但你还找不到原因。

随机化约束种类:
image
1)布尔表达式,这与c语言中不同点在于输出的是逻辑判断,这里的布尔表达式则是一种规则,通过与或非(&&/||/!)以及大于小于等于等进行约束,条件满足约束生效,也包括蕴含操作符和iff
image
2)权重表达式,前面的本子有写总结,这里展示的是带变量的权重分配,一种是独立权重,一种是分布权重。
image

3)范围表达式
image
物理取反~,逻辑取反!

!(逻辑):“看意义”,非零即真,输出只有 1 位 True/False。用在 if、while 判断里。~(物理):“改电平”,每一位强制翻转,位宽不变。用在数据掩码、信号极性转换上。

image
4)条件表达式

  • if--else
  • ->蕴含符

posted on 2026-07-23 15:15  tuck0603  阅读(12)  评论(0)    收藏  举报

导航