删除foreach循环内的队列项

时间:2016-12-07 03:19:36

标签: system-verilog

当我们需要删除队列中的一些项目时,我们可以轻松编写如下代码:

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中有没有更好的解决方案?

1 个答案:

答案 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数组操作方法