如何控制SystemVerilog类的rand_mode?实现仅随机化指定成员的需求
解决方法
首先明确:你之前用b_const.constraint_mode(0)只是禁用了b的约束,但b本身还是rand类型变量,所以随机化时依然会被赋予随机值,这就是问题所在。要实现仅随机化a、不随机化b和c,有两种简便方法:
方法一:指定randomize()的随机化变量列表
直接在randomize()中传入需要随机化的变量名,这样只有指定的变量会被随机化,其他rand变量保持当前值(未初始化则为默认的x态,若之前赋值过则保留赋值结果)。
示例代码:
A at = new(); // 仅随机化a,b和c保持原有状态 assert(at.randomize(a));
方法二:关闭b和c的随机属性
通过rand_mode(0)将b、c的随机属性关闭,这样它们会被当作普通变量,随机化过程中不会被修改。
示例代码:
A at = new(); at.b.rand_mode(0); at.c.rand_mode(0); assert(at.randomize());
如果需要后续恢复b、c的随机属性,只需调用rand_mode(1)即可。
内容的提问来源于stack exchange,提问作者mmmw
相关产品推荐
相关产品推荐

