寄存器数据宽度和数据线宽度不匹配产生的问题
小弟用CPLD实现一个控制器,内有4个寄存器,第一个是32位的,其余的是16位的,而我的数据线宽度只有8位,因此我根据不同的地址进行访问寄存器的内容,如01H-03H访问寄存器1(reg1);04H-05H访问寄存器2(reg2);06H-07H访问寄存器3(reg3); 08H-09H访问寄存器4(reg4)。程序如下:
IF ADDRESS="000000" THEN
reg1(31 DOWNTO 24) <=Data;
ELSIF ADDRESS="000001" THEN
reg1(23 DOWNTO 16) <=Data;
ELSIF ADDRESS="000010" THEN
reg1(15 DOWNTO 8) <=Data;
ELSIF ADDRESS="000011" THEN
reg1(7 DOWNTO 0) <=Data;
ELSIF ADDRESS="000100" THEN
reg2(15 DOWNTO 8) <=Data;
ELSIF ADDRESS="000101" THEN
reg2(7 DOWNTO 0) <=Data;
ELSIF ADDRESS="000110" THEN
reg3(15 DOWNTO 8) <=Data;
ELSIF ADDRESS="000111" THEN
reg3(7 DOWNTO 0) <=Data;
ELSIF ADDRESS="001000" THEN
reg4(15 DOWNTO 8) <=Data;
ELSIF ADDRESS="000001" THEN
reg4(7 DOWNTO 0) <=Data;
然而在仿真时出错,信息为reg1、reg2、reg3、reg4均有多个输入源(multiple source),小弟不知何解,望高手指点,后来我用CASE--WHEN语句实现也还是同样的错误,在程序的其他地方,我只是对各个寄存器读,没有在赋值,因此出错的地方应该就在这一段程序内。望高手指点一二,不胜感激!
发表时间:2004年5月25日10:09:29