Когда нам нужно удалить некоторые элементы внутри очереди, мы можем легко писать код, как показано ниже:удалять элементы очереди внутри Еогеасп цикла
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?
Решение в [этот вопрос] (http://stackoverflow.com/questions/30494550/how-to-match-and-delete-an-element-from-a-queue) не работает для меня. Аналогичное решение может быть реализовано с использованием цикла 'repeat':' repeat (q.size()) begin if (q [i] == 1) q.delete (i); i ++; end'. Обратите внимание, что итератор в цикле 'repeat' является постоянным, даже если размер очереди меняется. – sharvil111
@ sharvil111 В моем первоначальном вопросе была опечатка. Я изменил его, и теперь он должен работать. – awill
В моем предыдущем комментарии я указал на аналогичный вопрос. Вот простая ссылка на этот вопрос: http://stackoverflow.com/questions/30494550/how-to-match-and-delete-an-element-from-a-queue – sharvil111