如何在Verilog中将打包数组返回到localparam

时间:2014-06-21 01:24:58

标签: verilog

我有一个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 

我得到的错误是:无法分配打包到解包。任何解决方案?

感谢。

1 个答案:

答案 0 :(得分:0)

Verilog不支持多维参数数组,如下所述:

  • IEEE1364-1995§3.10参数
  • IEEE1364-2001§3.11.1模块参数
  • IEEE1364-2005§4.10.1模块参数

有一种方法可以使用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)。

  • IEEE1364-1995§10.3.1定义功能
  • IEEE1364-2001§10.3.1功能声明
  • IEEE1364-2005§10.4.1功能声明

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位数组。