1.随机约束
1.1基础随机关键字
rand 动态随机变量,每次randomize()都会随机
randc 循环随机,取值不重复,一轮取完重新循环
constraint 约束块,封装约束条件
solve…before 约束求解优先级,控制多变量随机先后顺序
soft 软约束,可被外部更高优先级约束覆盖
disable constraint 关闭某个约束块
1.2基础关系约束
inside{[100:200]};
unique 数组元素互不重复
1.3条件约束
if-else
蕴含->
1.4数组约束
数组长度约束
数组foreach遍历约束,比如递增或递减
数组求和、求积、计数
1.5权重分布约束
dist := 值本身按照权重分配
dist 😕 区间均分后按照权重分配
1.6双向约束和求解顺序
solve A before B 指定先求解A再解B;
1.7 约束块控制
c_addr.constraint_mode(0);//关闭约束,1为打开约束
rand_mode();//开关变量随机
1.8 外部约束
std::randomize(var)with{var>6;};
static constraint 所有实例共享一套约束
2.举例
2.1地址在0~127随机,且写操作数据不能为0
rand bit [7:0] addr;
//范围约束
constraint c_addr{addr inside{[0:127]};}
constraint c_link{wr->data!=0;}
3.约束常见问题
1.双向约束导致求解爆炸、约束冲突
2.数组下标越界,
3.条件自相矛盾
4.求解空间过大,仿真器超时
5.randc变量周期内无可用取值;
4.约束解决问题
约束冲突debug:开-solve_trace、分布关闭约束块、区分软硬约束;
9475

被折叠的 条评论
为什么被折叠?



