天天看點

verilog中 在選擇vector部分的時候無法使用variable變量的問題

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

繼續閱讀