天天看点

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位。

继续阅读