Verilog error : Unable to bind parameter in module
Verilog error : Unable to bind parameter in module
我是 Verilog 的新手,如果有人能帮我解决这个错误,我将不胜感激:
我正在尝试编写一个测试平台 PU_tb,它正在实例化此模块:
PU_conv #(
.image_width ( image_width ),
.image_height ( image_height ),
.kernel_width ( kernel_width ),
.kernel_height ( kernel_height )
) convolution (
.ACLK ( ACLK ), //input
.image ( image ), //input
.kernel ( kernel ), //input
.result ( result ) //output
);
模块 PU_conv 如下所示:
module PU_conv
#( //Parameters
parameter integer image_width = 10,
parameter integer image_height = 4,
parameter integer kernel_width = 2,
parameter integer kernel_height = 2
)( //PORTS
input wire ACLK,
input wire [0:image_width][image_height:0] image,
input wire [0:kernel_width][kernel_height:0] kernel,
output reg [0:image_width][image_height:0] result
);
我收到这个错误:
error: Unable to bind parameter 'image_height' in 'PU_tb'
error: Unable to bind parameter 'image_width' in 'PU_tb'
error: Unable to bind parameter 'kernel_height' in 'PU_tb'
error: Unable to bind parameter 'kernel_width' in 'PU_tb'
内核和图片的宽高声明如下:
reg[5:0] param_kw;
reg[5:0] param_kh;
reg[5:0] param_iw;
reg[5:0] param_ih; ....
integer kernel_width, kernel_height, image_width, image_height;
always @(param_kw)
kernel_width = param_kw;
always @(param_kh)
kernel_height = param_kh;
always @(param_iw)
image_width = param_iw;
always @(param_ih)
image_height = param_ih;
我做错了什么?
以下代码工作正常。确保您已在 top/tb 模块中正确声明参数。
module PU_conv
#( //Parameters
parameter integer image_width = 10,
parameter integer image_height = 4,
parameter integer kernel_width = 2,
parameter integer kernel_height = 2
) ( //PORTS
input wire ACLK,
input wire [0:image_width][image_height:0] image,
input wire [0:kernel_width][kernel_height:0] kernel,
output reg [0:image_width][image_height:0] result
);
initial
begin
$display("image_width = %0d image_height = %0d",image_width,image_height);
$display("kernel_width = %0d kernel_height = %0d",kernel_width,kernel_height);
end
endmodule
module top();
parameter integer image_width = 8;
parameter integer image_height = 7;
parameter integer kernel_width = 6;
parameter integer kernel_height = 5;
wire ACLK;
wire [0:image_width][image_height:0] image;
wire [0:kernel_width][kernel_height:0] kernel;
reg [0:image_width][image_height:0] result;
PU_conv #(
.image_width ( image_width ),
.image_height ( image_height ),
.kernel_width ( kernel_width ),
.kernel_height ( kernel_height )
) convolution (
.ACLK ( ACLK ), //input
.image ( image ), //input
.kernel ( kernel ), //input
.result ( result ) //output
);
endmodule
仅 SystemVerilog 支持作为输入的多维数组。以下是输出显示:
// Overridden parameters
image_width = 8 image_height = 7
kernel_width = 6 kernel_height = 5
Verilog Parameter over ridding 中发布了类似的问题。
我是 Verilog 的新手,如果有人能帮我解决这个错误,我将不胜感激:
我正在尝试编写一个测试平台 PU_tb,它正在实例化此模块:
PU_conv #(
.image_width ( image_width ),
.image_height ( image_height ),
.kernel_width ( kernel_width ),
.kernel_height ( kernel_height )
) convolution (
.ACLK ( ACLK ), //input
.image ( image ), //input
.kernel ( kernel ), //input
.result ( result ) //output
);
模块 PU_conv 如下所示:
module PU_conv
#( //Parameters
parameter integer image_width = 10,
parameter integer image_height = 4,
parameter integer kernel_width = 2,
parameter integer kernel_height = 2
)( //PORTS
input wire ACLK,
input wire [0:image_width][image_height:0] image,
input wire [0:kernel_width][kernel_height:0] kernel,
output reg [0:image_width][image_height:0] result
);
我收到这个错误:
error: Unable to bind parameter 'image_height' in 'PU_tb'
error: Unable to bind parameter 'image_width' in 'PU_tb'
error: Unable to bind parameter 'kernel_height' in 'PU_tb'
error: Unable to bind parameter 'kernel_width' in 'PU_tb'
内核和图片的宽高声明如下:
reg[5:0] param_kw;
reg[5:0] param_kh;
reg[5:0] param_iw;
reg[5:0] param_ih; ....
integer kernel_width, kernel_height, image_width, image_height;
always @(param_kw)
kernel_width = param_kw;
always @(param_kh)
kernel_height = param_kh;
always @(param_iw)
image_width = param_iw;
always @(param_ih)
image_height = param_ih;
我做错了什么?
以下代码工作正常。确保您已在 top/tb 模块中正确声明参数。
module PU_conv
#( //Parameters
parameter integer image_width = 10,
parameter integer image_height = 4,
parameter integer kernel_width = 2,
parameter integer kernel_height = 2
) ( //PORTS
input wire ACLK,
input wire [0:image_width][image_height:0] image,
input wire [0:kernel_width][kernel_height:0] kernel,
output reg [0:image_width][image_height:0] result
);
initial
begin
$display("image_width = %0d image_height = %0d",image_width,image_height);
$display("kernel_width = %0d kernel_height = %0d",kernel_width,kernel_height);
end
endmodule
module top();
parameter integer image_width = 8;
parameter integer image_height = 7;
parameter integer kernel_width = 6;
parameter integer kernel_height = 5;
wire ACLK;
wire [0:image_width][image_height:0] image;
wire [0:kernel_width][kernel_height:0] kernel;
reg [0:image_width][image_height:0] result;
PU_conv #(
.image_width ( image_width ),
.image_height ( image_height ),
.kernel_width ( kernel_width ),
.kernel_height ( kernel_height )
) convolution (
.ACLK ( ACLK ), //input
.image ( image ), //input
.kernel ( kernel ), //input
.result ( result ) //output
);
endmodule
仅 SystemVerilog 支持作为输入的多维数组。以下是输出显示:
// Overridden parameters
image_width = 8 image_height = 7
kernel_width = 6 kernel_height = 5
Verilog Parameter over ridding 中发布了类似的问题。