请高手帮忙改一个vhdl数字钟程序,这个是显示模块的程序,由于自己能力有限改不好。请各位大侠给出修改后的正确程序,最好能说明一下错误原因,小女子非常感谢~!!
模块的主要功能是:当SHOW_NEW_TIME端口输入信号为高电平时,根据NEW_TIME端口输入的时间数据,产生相应的6个七段数码显示器的驱动数据,并在DISPLAY端口输出该信号;当SHOW_NEW_TIME端口输入信号为低电平时,若SHOW_ALARM端口的输入信号为高电平,则根据ALARM_TIME端口输入的时间数据,产生相应的6个七段数码显示器的驱动数据,并在DISPLAY端口输出该信号;当SHOW_NEW_TIME端口和SHOW_ALARM端口的输入信号都为低电平时,若ALARM_TIME端口的输入信号值与CURRENT_TIME端口的输入信号值相同,SOUND_ALARM端口输出高电平。
我写的程序如下
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE WORK.PACK_CLOCK.ALL;
ENTITY C_DISPLAY IS
PORT(ALARM_TIME,CURRENT_TIME,NEW_TIME:IN T_CLOCK_TIME;
SHOW_NEW_TIME,SHOW_ALARM:IN STD_LOGIC;
SOUND_ALARM :OUT STD_LOGIC;
DISPLAY:OUT T_DISPLAY);
END ENTITY C_DISPLAY;
ARCHITECTURE ART OF C_DISPLAY IS
SIGNAL A:T_CLOCK_TIME;
BEGIN
CTRL:PROCESS(ALARM_TIME,CURRENT_TIME,NEW_TIME,SHOW_ALARM,SHOW_NEW_TIME)
BEGIN
SOUND_LP: FOR I IN ALARM_TIME'RANGE LOOP
IF NOT(ALARM_TIME(I) = CURRENT_TIME(I)) THEN
SOUND_ALARM<='0';
EXIT SOUND_LP;
ELSE
SOUND_ALARM<='1';
END IF;
END LOOP SOUND_LP;
IF SHOW_NEW_TIME = '1' THEN
A <= NEW_TIME;
ELSIF SHOW_ALARM = '1' THEN
A <= ALARM_TIME;
ELSIF SHOW_ALARM = '0' THEN
A <= CURRENT_TIME;
END IF;
END PROCESS;
PROCESS(A)
BEGIN
CASE A IS
WHEN "0000"=> DISPLAY <="0111111";
WHEN "0001"=> DISPLAY <="0000110";
WHEN "0010"=> DISPLAY <="1011011";
WHEN "0011"=> DISPLAY <="1001111";
WHEN "0100"=> DISPLAY <="1100110";
WHEN "0101"=> DISPLAY <="1101101";
WHEN "0110"=> DISPLAY <="1111101";
WHEN "0111"=> DISPLAY <="0000111";
WHEN "1000"=> DISPLAY <="1111111";
WHEN "1001"=> DISPLAY <="1110011";
WHEN OTHERS=> NULL;
END CASE;
END PROCESS;
END ARCHITECTURE ART;
其中,PACK_CLOCK这个是 程序包 主要是定义了
SUBTYPE T_DIGITAL IS INTEGER RANGE 0 TO 9;
SUBTYPE T_SHORT IS INTEGER RANGE 0 TO 65535;
TYPE T_CLOCK_TIME IS ARRAY (5 DOWNTO 0) OF T_DIGITAL;
TYPE T_DISPLAY IS ARRAY (5 DOWNTO 0) OF T_DIGITAL;
编译出现错误 Can't interpret expression 在 case A is 这一句,还有个错误是该vhdl程序prevent further processing