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
没试过这个,但希望它能让你接近你想要的。
我在我的 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
没试过这个,但希望它能让你接近你想要的。