个人笔记。
如果想要实现处理多个有规律的位宽数据,比如处理a[7:0]、a[14:7]、a[21:14]...这样有规律的位宽,按正常的思路找其规律可以高位可写成7*i,低位可写成7*(i-1),i=1、2、3...此时i是变量,如果你按此规律写成a[7*i:7*(i-1)]形式,那么将会报错error:i is not a constant ,这是因为i在这种形式下只能是常量。
我们可以将其写成:向量名[起始位+/-:位宽]
根据原有向量声明的高低顺序,以起始位为起点,位宽为宽度,+/-为从起始位开始是递增/递减多少位宽。
比如上例:wire [35:0] a;
则其规律可写成 a[(7*i)-:8],i可以是1、2、3..变量
简单的理解又如
a[0+:8]等效于a[7:0] //以0为起始位递增8位宽
a[7-:8]等效于a[7:0] //以7为起始位递减8位宽
又因为原有的向量声明为wire [35:0] a这种从高位到低位的形式所以得到的也是a[7:0]这种从高位到低位的形式。
又如例:wire [0:35] a; //从低位到高位的形式
则a[0+:8]等效于a[0:7] //以0为起始位递增8位宽
a[7-:8]等效于a[0:7] //以7为起始位递减8位宽
注意:起始位为变量 位宽为常量