|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
前向拼接符号(//),我举个例子:已知数据每个时钟上升沿输入一个数据(数据总数未知):a1=1001,a2=0101,a3=1110,a4=1101,( a5=………………,an=0001
我要实现当所有数据输入完之后得到:val = a1//a2//a3//a4//a5…… //an = 0001 …… 1101 1110 0101 1001,并且将val输出,用verilog怎么实现呢?
我曾想过使用位拼接运算符{},每来一个数据就拼接一下用寄存器temp = {a2,a1}……保存,但是每次拼接后temp的位宽都是在变化的,我不能提前声明temp的位宽,不声明位宽又不能通过综合器的综合;所以这条路走不通;
我又打算用memory型的寄存器(比如:reg[3:0] ram[100:0])把数据先全部存下来,因为memory型的寄存器不能作输出,所以我又用for循环一口气将ram的数据按照一定的顺序赋值给输出端口的寄存器out:
- for( cnt=0;cnt<n;cnt=cnt+1 )
- out[ cnt*8+7:0+cnt ] = ram[cnt];
复制代码
但是在综合的时候报错:Most significant bit operand in part-select of vector reg 'out' is illegal,也就是说部分选择赋值是不行的;
然后我就想不出办法了,求高人指点。 |
|