sv中soft约束

当一个变量被声明为rand类型后,常常会对其进行一定的约束,但这个范围应该尽量宽一些。

在实际项目中碰到该问题,一个cfg类,其变量x在constraint中做了如下约束

rand bit x;

constraint soft_c_xxx_cfg{

        soft x == 1;

}

并且该xxx_cfg在包含在一个更大的sys_cfg中,且在这个sys_cfg中的post_randomize()函数中调用了xxx_cfg.randomize()

function void post_randomize();

        xxx_cfg.randomize();

endfunction

此时,本想在case中构造x在0和1中随机,在case中代码如下:

p_sequencer.cfg.xxx_cfg.randomize with{

        x inside {0, 1};

};

如上代码实现不了x在0和1中随机,原因是该变量x应遵循其约束条件soft x==1;

此时case中给的范围是0和1,这样会取其交集1作为随机值;

若两个约束没有交集,大概率会报错(约束冲突);

正确的做法:

1.在constraint中的约束范围给宽一些;

2.直接赋值p_sequencer.cfg.xxx_cfg.x == $urandom_range(0, 1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值