面试问题: 我有一个基于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。该课程可能存在错误,并且可以编辑。
答案 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