VHDL的简单赋值问题
variable CQI:std_logic_vector(15 downto 0);
variable CQI_1:std_logic_vector(3 downto 0);
variable CQI_2:std_logic_vector(3 downto 0);
。。。。
CQI_1:=(0=>CQI(0),1=>CQI(1),2=>CQI(2),3=>CQI(3));
CQI_2:=(0=>CQI(4),1=>CQI(5),2=>CQI(6),3=>CQI(7));
CQI_3:=(0=>CQI(8),1=>CQI(9),2=>CQI(10),3=>CQI(11));
CQI_4:=(0=>CQI(12),1=>CQI(13),2=>CQI(14),3=>CQI(15));
IF CQI_1=10 THEN CQI:=(0=>'0',1=>'0',2=>'0',3=>'0',
4=>CQI_2(0),5=>CQI_2(1),6=>CQI_2(2),7=>CQI_2(3),
8=>CQI_3(0),9=>CQI_3(1),10=>CQI_3(2),11=>CQI_3(3),
12=>CQI_4(0),13=>CQI_4(1),14=>CQI_4(2),15=>CQI_4(3));END IF;
------这样子没错,但是后面在加上一个IF
IF CQI_2=10 THEN CQI:=(4=>'0',5=>'0',6=>'0',7=>'0',
0=>CQI_1(0),1=>CQI_1(1),2=>CQI_1(2),3=>CQI_1(3),
8=>CQI_3(0),9=>CQI_3(1),10=>CQI_3(2),11=>CQI_3(3),
12=>CQI_4(0),13=>CQI_4(1),14=>CQI_4(2),15=>CQI_4(3));
END IF;
---就会报错
Error (10821): HDL error at aa.vhd(50): can't infer register for "CQI[0]" because its behavior does not match any supported register model
--我的原意是在满足条件下,16进制数CQI只改变其中的某些位数,其余位保持不变。。。
[解决办法]
是立即生效,不过大部分情况下signal同样能解决问题。不过看代码知道你是初学者,variable啊integer啊for/loop啊什么的全都不建议使用。等你能把代码和实际电路图联系起来了用这些东西才不会出错。