我有一个Verilog localparam和一个声明为:
的函数localparam [7:0] someParam[0:15] = someFunc(8'h10);
function [7:0][15:0] someFunc();
input [7:0] some_input;
someFunc[0] = 8'h00;
...
...
endfunction
我得到的错误是:无法分配打包到解包。任何解决方案?
感谢。
答案 0 :(得分:0)
Verilog不支持多维参数数组,如下所述:
有一种方法可以使用SystemVerilog。不支持多维声明,但参数类型可以是typdef
,它可以是多维的。对于函数的返回类型也是如此。请参阅IEEE1800-2012§6.20.1参数声明语法和§6.18用户定义类型。
示例:
typedef logic [7:0] someType [16];
localparam someType someParam = someFunc(8'h10);
function someType someFunc (input [7:0] some_input);
someFunc[0] = 8'h00;
// ...
endfunction
同样,Verilog不支持双打包数组(ex [7:0][15:0] someFunc
)。
SystemVerilog支持双打包数组。所以另一种解决方案是:
localparam [15:0][7:0] someParam = someFunc(8'h10);
function [15:0][7:0] someFunc (input [7:0] some_input);
someFunc[0] = 8'h00;
// ...
endfunction
注意:您希望[15:0][7:0]
是16位8位数组,而不是[7:0][15:0]
,这是8位16位数组。