使用函数进行多维填充参数声明



最近我在考虑使用简单的数学方程预先计算所有必要的参数,然后再在生成结构中实例化逻辑单元。在我需要 2-D 参数的情况下,如果 2-D 数组是一组固定值,则很容易,例如

parameter para_1[1:0][2:0] = '{2{3{0}}}; .

但我想要的是一个指示值的函数,这样在将返回值分配给参数之前可以在函数内部实现复杂的方程。

理想情况下,我想要如下的东西:

function func01 [1:0][1:0] (input int test);
  int index;
  for (index=0; index<=2; index++) begin
    func01[index] = index + $floor(index/2) + $mod(index, 2) + test;
  end
endfunction
parameter test1 = 1;
parameter logic test2 [1:0][1:0] = func01(test1);

但是ModelSim直接抱怨第一行代码 - ** Error: (vlog-13069) near "[": syntax error, unexpected '[', expecting ';' or '('.

最终的想法是有一个块,在详细阐述时计算所有参数/常量,以便这些参数/常量可以在生成块中进行实例化,也可以在细化时使用。

希望这是有道理的,并提前非常感谢。

最好台海

首先,如果你想要打包数组,维度范围位于数组名称的左侧。我建议使用显式数据类型。

parameter bit [1:0][2:0] para_1 = '{2{3{0}}};.

然后,函数声明的返回类型位于函数名称之前。

function bit [1:0][1:0] func01  (input int test);

顺便说一句,如果您希望函数的返回类型具有解压缩的维度,则必须使用 typedef ,这在任何情况下都是一种很好的做法。

typedef bit [1:0] myParam_t [2:0];
parameter myParam_t para_1 = '{default:0};
function myParam_t func01  (input int test);

相关内容

  • 没有找到相关文章