Verilog - 在生成块中增加局部参数

Verilog - increment local parameter in generate block

我在我的 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 是我模块中的本地参数。

我一直在寻找可以在生成块中使用第二个参数的方法,我发现我只能在 for 循环中使用 genvar 变量,所以我无法为 j 创建第二个 genvar 变量.

我遇到了这个问题: Incrementing Multiple Genvars in Verilog Generate Statement

我尝试将我的代码作为第二个答案的基础,但我的情况略有不同,因为我只是在 if 语句中递增它。

如有任何帮助,我们将不胜感激。

您将不得不创建一个函数来定义 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

没试过这个,但希望它能让你接近你想要的。