System verilog 从ASIC验证应用程序角度将类成员作为参数传递给randomize()函数的用例
另外,在哪个上下文中需要传递“null”参数? 请参考SV LRM中的第18.11节System verilog 从ASIC验证应用程序角度将类成员作为参数传递给randomize()函数的用例,system-verilog,System Verilog,另外,在哪个上下文中需要传递“null”参数? 请参考SV LRM中的第18.11节 class CA; rand byte x, y; byte v, w; constraint c1 { x < v && y > w ); endclass CA a = new; a.randomize(); // random variables: x, y state variables: v, w a.randomize( x
class CA;
rand byte x, y;
byte v, w;
constraint c1 { x < v && y > w );
endclass
CA a = new;
a.randomize(); // random variables: x, y state variables: v, w
a.randomize( x ); // random variables: x state variables: y, v, w
a.randomize( v, w ); // random variables: v, w state variables: x, y
a.randomize( w, x ); // random variables: w, x state variables: y, v
CA类;
rand字节x,y;
字节v,w;
约束c1{xw);
末级
CA a=新的;
a、 randomize();//随机变量:x,y状态变量:v,w
a、 随机化(x);//随机变量:x状态变量:y、v、w
a、 随机化(v,w);//随机变量:v,w状态变量:x,y
a、 随机化(w,x);//随机变量:w,x状态变量:y,v
如何在testbench中使用此功能,或者此语言功能的用例是什么?假设您有一个特定的测试,需要将变量
y
固定为值5。SystemVerilog为您提供了4不同的实现方法
使用上面所示的方法,您可以在调用randomize之前设置y=5
:
y=5;
a.randomize( x ); // y becomes a state variable
事实上,这种方法很少使用,除非你有一个非常小的随机变量集要处理。我从来没有见过有人试图用这种方式随机非随机变量
另一种方法是设置随机模式
y=5;
a.y.rand_mode(0); // y becomes a state variable
a.randomize();
如果需要,您必须记住设置随机模式(1)。
然而,最简单的方法是使用带约束的
a.randomize() with {y==5;};
但上述所有方法的问题在于它需要修改过程代码。面向对象编程(OOP)方法正在扩展该类
class YCA extends CA;
constraint y5 {y==5;}
endclass
为了回答您的最后一个问题,randomize(null)
仅用于检查所有随机变量的当前值是否满足约束条件,而不实际随机进行任何操作。这对于调试非常有用