经常碰到的问题就是使用一个vector的时候
input [11:0] a;
想每隔4个取一组 即a[3:0] a[7:4] a[11:8]
for(genvar i =0; i<3 : i = i+1)
a[(i*4+3):i*4]
这种形式会报错 i is not constant file. 这种错误,表示verilog不知道这个a选取的时候是不是一个固定值。
解决方法有两种
一用连接符
a={in[i*4+3],in[i*4+2],in[i*4+1],in[i*4+0]}
每个相应位置选取一个;
二是使用verilog 2000新标准中的 +: 或者 -: 这种符号
a[ i*4 +: 4]
+: 第二位表示选取多少位,我的情况选取4位,第一位 i*4 表示从那个点开始 + 就是 向上4位 - 就是向下4位。