У меня есть массив регистров/шин и одна результирующая шина, определенная следующим образом.
wire [BW-1:0] bus_array[NUM-1:0];
reg [BW-1:0] and_result;
где
parameter BW = 4;
parameter NUM = 8;
Я хочу выполнить BW-битную операцию И над элементами массива и присвоить результат регистру and_result
.
Я пытаюсь сделать это следующим образом.
integer l;
generate
genvar m;
for (m=0; m<BW; m=m+1)
begin : BW_LOOP
always @ (*)
begin
and_result[m] = 1'b1;
for (l=0; l<NUM; l=l+1)
and_result[m] = and_result[m] & bus_array[l][m];
end
end
endgenerate
Однако, когда я имитирую это в Modelsim 10.1e, я получаю следующую ошибку.
Ошибка: (vsim-3601) Предел итерации достигнут за время 2 нс
Если я не использую цикл генерации, а вместо этого имею экземпляры BW блока always @ (*)
, симуляция работает нормально.
Из сообщения об ошибке я могу сделать вывод, что существует проблема с циклом генерации for, но я не могу решить эту проблему.