Verilog - увеличить локальный параметр в блоке генерации - PullRequest
0 голосов
/ 29 марта 2019

Я получаю сообщение об ошибке в моем блоке генерации Verilog, в строке, где написано j = j + 1;«j - неизвестный тип»

genvar i;
generate
    localparam integer j = 0;
    for (i = 0; i < BUFFER; i=i+1) begin
        if((i%DATA_WIDTH) < (KERNEL_SIZE-1)) begin
            assign o_input_matrix[((j+1)*DATA_WIDTH)-1:j*DATA_WIDTH] = 
buffer[((i+1)*DATA_WIDTH)-1:i*DATA_WIDTH];
            j = j+1;
        end
    end
endgenerate

BUFFER, DATA_WIDTH и KERNEL_SIZE - это локальные параметры, которые есть в моем модуле.

Я искал способы получитьПараметр в моем блоке генерации, я обнаружил, что я могу использовать только переменные genvar в цикле for, поэтому я не могу сделать 2-ую переменную genvar для j.

Я сталкивался с таким вопросом: Увеличение нескольких Genvars в Verilog Generate Statement

Я попытался основать свой код второго ответа, но моя ситуация немного отличается, потому что я 'только увеличивая его в операторе if.

Любая помощь будет принята.

1 Ответ

0 голосов
/ 29 марта 2019

Вам нужно будет создать функцию для определения значения j.

genvar i;
for (i = 0; i < BUFFER; i=i+1)
   if((i%DATA_WIDTH) < (KERNEL_SIZE-1)) begin
      localparam j = func(i);
      assign o_input_matrix[((j+1)*DATA_WIDTH)-1:j*DATA_WIDTH] = 
buffer[((i+1)*DATA_WIDTH)-1:i*DATA_WIDTH];
        end
    end
function integer func(integer ii);
   for (ii = 0;ii < BUFFER; ii++)
     if ((ii %DATA_WIDTH) < (KERNEL_SIZE-1)) ii++;
endfunction

Не пробовал, но надеюсь, что это приблизит вас к тому, что вы хотите.

...