我在测试平台中覆盖约束时遇到了一些麻烦。 按照我的顺序,我正在做以下事情:
`uvm_do_with(req, {trans_kind == WRITE ;
address == 40'hc0_0000_0000;
mask_mismatch_error == 1;
bus_error_type == SCB_BUS_ERR_NONE;
}) //this line sends the transaction
在我的序列中:
constraint c_mask_mismatch_error_disable_map8 { (cfg_h.is_map8 == 1) -> (mask_mismatch_error == 0); }
日志文件发出此警告:
ncsim:* W,SVRNDF(源位置/行):randomize方法调用 失败。失败的randomize调用的唯一ID是86。
观察模拟时间:79492842 PS + 14
ncsim:* W,RNDOCS:这些约束有助于这一组 冲突约束:})//此行发送事务 ( (mask_mismatch_error == 0); }(来源位置/行)
ncsim:* W,RNDOCS:这些变量导致冲突集 约束:
状态变量:cfg_h.is_map8(1)[source location / line]
rand变量:mask_mismatch_error [源位置/行]
我不明白为什么这种类型的覆盖是不可能的。我该怎么做才能覆盖序列中的约束?
答案 0 :(得分:1)
with
调用的randomize
子句仅用于添加约束;它无法覆盖它们。覆盖约束的正确OOP方法是扩展事务类并在扩展类中声明具有相同名称的约束。
您的另一个选择是使用
关闭约束req.c_mask_mismatch_error_disable_map8.constraint_mode(0);
如果你这样做,你就不能再使用`umm_do_with宏了,很多人建议不要使用它。