SystemVerilog关联数组的随机采样

时间:2015-09-22 22:57:14

标签: system-verilog

随机抽样关联数组的最佳方法是什么?我尝试过以下操作,但randomize方法总是失败。

std::randomize(idx) with {assoc_array.exists(idx);};

我想我可以从关联数组的第一个元素开始随机调用next方法,以达到所需要的效果。但是,还有更好的方法吗?为什么上面的约束随机化不起作用?

1 个答案:

答案 0 :(得分:5)

问题是当你在约束中进行函数调用时,函数的输入参数首先被随机化,然后在传递给函数时将结果视为状态变量。如果函数返回false,则约束失败,并且idx保持不变。如果碰巧选择了确实存在的idx,那么约束就会通过。我假设选择存在的idx的可能性非常低。

我建议将所有索引放入一个数组中,然后随机选择其中一个

typedef bit [11:0] index_type; // or whatever your index type is
int assoc_array[index_type];
index_type idx, index_list[$];
...
index_list = assoc_array.find_index() with ('1);
std::randomize(idx) with {idx inside {index_list}};