首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

VHDL的简单赋值有关问题

2013-01-06 
VHDL的简单赋值问题variable CQI:std_logic_vector(15 downto 0)variable CQI_1:std_logic_vector(3 down

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啊什么的全都不建议使用。等你能把代码和实际电路图联系起来了用这些东西才不会出错。

热点排行