首页 文章

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

提问于
浏览 542
2

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

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

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

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

附:课堂上可能有错误,可以编辑 .

3 回答

  • 4

    你想要 unique 约束 .

    class A;
      rand bit [31:0] arr[];
    
      constraint arr_size { arr.size() inside {[10:15]}; }
      constraint arr_uniq { unique {arr}; }
    
    endclass
    
  • 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
    
  • 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
    

相关问题