SystemVerilog之随机约束

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、分布关闭约束块、区分软硬约束;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值