經常碰到的問題就是使用一個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位。