Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 从ASIC验证应用程序角度将类成员作为参数传递给randomize()函数的用例_System Verilog - Fatal编程技术网

System verilog 从ASIC验证应用程序角度将类成员作为参数传递给randomize()函数的用例

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

另外,在哪个上下文中需要传递“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 ); // 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)
仅用于检查所有随机变量的当前值是否满足约束条件,而不实际随机进行任何操作。这对于调试非常有用