当我们需要删除队列中的一些项目时,我们可以轻松编写如下代码:
foreach(queue[i]) begin
if(queue[i].value == 1)
queue.delete(i);
end
但是当队列[0] ==队列[1] == 1时,上面的代码中存在错误。因为queue.delete(0)将更改队列中项目的所有索引。
所以目前我使用的代码如下:
foreach(queue[i]) begin
if(queue[i].value == 1) begin
queue.delete(i);
i--;
end
end
它有效,但乍一看看起来很混乱。
所以我的问题是: 在系统verilog中有没有更好的解决方案?
答案 0 :(得分:0)
我相信这应该有用(我现在无法测试它。确保在你试用时坚持订单)
queue = queue.find() with ( item.value != 1 );
另一种方法是找到符合条件的所有索引,按顺序排序,然后遍历索引
int qi[$] = queue.find_index() with ( item.value == 1 );
qi = qi.sort() with ( -item ); // sort highest to lowest
foreach(qi[idx]) queue.delete(qi[idx]);
有关详细信息,请参阅IEEE1800-2012§7.12数组操作方法