在systermverilog中将部分rand_mode部分关闭后,如何有效将其打开

时间:2018-08-29 13:12:33

标签: random constraints system-verilog

我的课程如下:

class h1_c;
  rand bit[1:0] h1_a;
  rand bit[1:0] h1_b;
  h2_c h2;
  function new()
    h2 = new();
  endfunction
endclass

class h2_c;
  rand bit[1:0] h2_a;
  rand bit[1:0] h2_b;
  h3_c h3;
  function new()
    h3 = new();
  endfunction
endclass

class h3_c;
  rand bit[1:0] h3_a;
  rand bit[1:0] h3_b;
endclass

module p1;   
  h1_c h1;

  initial begin
    h1 = new();
    h1.h2.h2_a.rand_mode(0);
    h1.h2.h3.h3_a.rand_mode(0);
    h1.randomize();
    //How to turn all rand_mode on effectively after I turn them off seperately.
    //which like h1.*.rand_mode(1);
  end
endmodule

我关闭了某些变量的rand模式,并希望在randomize()之后有效地将它们全部打开。有什么有效的方法吗?

1 个答案:

答案 0 :(得分:1)

根据1800-2017 LRM的18.8节,您可以在使用rand_mode(1)设置对象中的所有变量时省略变量名

h1.rand_mode(1);
// is equivalent to 
h1.h1_a.rand_mode(1);
h1.h1_b.rand_mode(1);
h1.h1_c.rand_mode(1);

这应该递归到h1.h1_c中,设置其rand_mode变量。但是我会检查您的工具,因为从阅读LRM来看这种行为并不明显。