0

我是 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
);

我收到此错误:

错误:无法在“PU_tb”中绑定参数“image_height”
错误:无法在“PU_tb”中绑定参数“image_width”错误:无法在“PU_tb”
中绑定参数“kernel_height”
错误:无法在“中绑定参数“kernel_width” 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;

我究竟做错了什么?

4

1 回答 1

1

以下代码工作正常。确保您在 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 overridding中。

于 2016-07-04T07:23:01.753 回答