选项A和选项B之间有什么区别
sucess = std::randomize(type_l) with {
type_l inside { A ,B ,C};
type_l dist { A := 2 ,B := 5 ,C := 4 };
};
if( sucess == 0 ) begin
`uvm_fatal("TEST_CFG", "type_l randomization failed")
end
class gen_type;
enum_type type_l;
constraint type_c{
type_l inside { A ,B ,C};
type_l dist { A := 2 ,B := 5 ,C := 4 };
};
endclass
答案 0 :(得分:0)
这里选项A 是内联约束的一个示例,其中一个可以随机化类或模块或程序块的局部变量,而不将其声明为rand
或{{1 }}。
虽然选项B 是对象变量随机化的示例。在此构造中,您必须声明一个变量,您希望将其随机化为randc
或rand
(此处,您尚未将枚举变量声明为randc
或{{1} },所以它会给出一个错误。)
有关详细信息,请参阅以下链接。 http://forums.accellera.org/topic/1235-stdrandomize-vs-randomize-vs-thisrandomize-and-scope/
答案 1 :(得分:0)
基本区别在于std::randomize
是一个函数而不是类方法,而class::randomize
是一个类方法。 randomize
函数可用于任何变量,任何约束都必须是内联约束。
randomize
类方法允许您为类的所有实例提供和控制约束。它将始终使用类中指定的约束以及您提供的任何可选内联约束。 randomize
方法在进行随机化之前也调用pre_randomize
方法,之后调用post_randomize
。
所以:
选项A:
enum_type type_1;
std::randomize(type_1); // No constraints
选项B:
gen_type a;
a.randomize(); // Use constraints specified in class. Call pre/post_randomize
答案 2 :(得分:0)
选项A
选项B