随机抽样关联数组的最佳方法是什么?我尝试过以下方法,但是randomize方法总是失败。
std::randomize(idx) with {assoc_array.exists(idx);};我想我可以从关联数组的第一个元素开始,将next方法称为随机次数,以达到所需的目的。但是,有没有更好的办法呢?为什么上面的约束随机化不起作用?
发布于 2015-09-22 23:30:03
问题是,当在约束中调用函数时,函数的输入参数首先是随机的,然后将结果作为状态变量传递给函数。如果函数返回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}};https://stackoverflow.com/questions/32728352
复制相似问题