SystemVerilog关联数组的随机采样

ohc*_*mel 2 system-verilog

随机采样关联数组的最佳方法是什么?我尝试了以下但该randomize方法总是失败.

std::randomize(idx) with {assoc_array.exists(idx);};
Run Code Online (Sandbox Code Playgroud)

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

dav*_*_59 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}};
Run Code Online (Sandbox Code Playgroud)