如何创建具有随机大小的不同随机值的动态数组?

时间:2016-03-08 02:07:29

标签: system-verilog

面试问题: 我有一个基于systemverilog的类如下:

class A;
rand n;
constraint c:{n>=10 &&n<=15};
bit [31:0] arr[];
randc [31:0] data;
endclass

在这种情况下&#39; n&#39;是动态数组arr的大小。问题是如何编写一个方法来创建数组,以便该数组中的所有元素彼此不同。

所以问题是randc类型只能确保每次实例化类时,我得到一个不同的值,但是如何将这些值存储在这样的数组中呢?任何帮助表示赞赏。

P.S。该课程可能存在错误,并且可以编辑。

3 个答案:

答案 0 :(得分:4)

您需要唯一约束。

class A;
  rand bit [31:0] arr[];

  constraint arr_size { arr.size() inside {[10:15]}; }
  constraint arr_uniq { unique {arr}; }

endclass

答案 1 :(得分:0)

如果没有唯一性,你可以这样做:

class T;
  randc bit [31:0] x;
endclass

class A;
  rand bit [31:0] arr[];
  local T temp;

  function void post_randomize();
    foreach (arr[i])
    begin
      void'(temp.randomize());
      arr[i] = temp.x;
    end 
    void'(temp.randomize());  
  endfunction

  constraint size_con { arr.size() inside {[10:15]}; }
endclass

答案 2 :(得分:0)

你可以使用一些严格的约束来生成动态数组的独特随机模式。我试着为它提供一些解决方案。我还为它添加了一个代码示例。希望它会对你有所帮助。

class A;

  rand int a[];

  constraint generate_unique_dyn_array {
  foreach( a[ii] )
   {
       foreach( a[jj] )
       {
            if( ii != jj )
                 a[ii] != a[jj] ;
       }
   }
}
endclass