如何在verilog中使用loop / generate初始化参数化数组参数?

时间:2015-09-13 06:08:16

标签: arrays parameters verilog system-verilog

我想初始化参数化数组参数,如下所示:

parameter n = 4;
parameter [(log2(n)-1):0] state [(n-1):0] = '{2'h3, 2'h2, 2'h1, 2'h0}; // for n=4

如果n = 4,此赋值可以正常工作。当n = 8时,它应该初始化为

{3'h7, 3'h6, 3'h5, 3'h4, 3'h3, 3'h2, 3'h1, 3'h0}

我想像这样初始化它:

for(i=0,i<n,i=i+1)
    state[i] = i;

现在我应该用什么来进行初始化?我可以用生成来做吗?这里log2是一个函数。

1 个答案:

答案 0 :(得分:1)

首先,您正在使用Verilog的超级集合和继承者SystemVerilog。 Verilog不支持排列参数(向量正常),Verilog无法分配整个解压缩数组('{}是SystemVerilog)。

使用SystemVerilog,您可以使用以下内容自动缩放STATE的值:

parameter N = 4;
parameter [(log2(N)-1):0] STATE [N] = state_val();

typedef [(log2(N)-1):0] state_t [N];
function state_t state_val();
  for(int i=0; i<N; i++)
    state_value[i] = i;
endfunction : state_val

注意:大多数编码风格指南建议使用大写的参数和小写的变量;这样可以更容易阅读。这就是我在答案中将nstate更改为NSTATE的原因。