我想初始化参数化数组参数,如下所示:
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是一个函数。
答案 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
注意:大多数编码风格指南建议使用大写的参数和小写的变量;这样可以更容易阅读。这就是我在答案中将n
和state
更改为N
和STATE
的原因。