谁能帮我修改下数字时钟的程序啊
请大家帮我改下这个数字时钟的程序,总共有3个错误和6个警告,但是我费了好大的劲就上不知道错在那里,请高手不赐教。小弟在此先谢谢大家了啊!
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.std_logic_arith.all;
ENTITY CK20 IS
PORT(CLK,SETH,SETM,SETS,RST: IN STD_LOGIC;
SECOND: OUT STD_LOGIC;
LMIN,HMIN,LHOUR,HHOUR,LSEC,HSEC: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CK20;
ARCHITECTURE CLOCK OF CK20 IS
SIGNAL CLK1,CLK2:STD_LOGIC;
SIGNAL LMIN1,HMIN1,LHOUR1,HHOUR1,LSEC1,HSEC1: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL DISPLAYOUT: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL DBUS: STD_LOGIC_VECTOR(7 DOWNTO 0);
FUNCTION DISPLAY(SIGNAL A: STD_LOGIC_VECTOR(0 to 3))
RETURN STD_LOGIC_VECTOR IS --产生显示的子程序
BEGIN
CASE A IS
when "0001" => DISPLAYOUT <= "0001";
when "0010" => DISPLAYOUT <= "0010";
when "0011" => DISPLAYOUT <= "0011";
when "0100" => DISPLAYOUT <= "0100";
when "0101" => DISPLAYOUT <= "0101";
when "0110" => DISPLAYOUT <= "0110";
when "0111" => DISPLAYOUT <= "0111";
when "1000" => DISPLAYOUT <= "1000";
when "1001" => DISPLAYOUT <= "1001";
when "1010" => DISPLAYOUT <= "1010";
when "1011" => DISPLAYOUT <= "1011";
when "1100" => DISPLAYOUT <= "1100";
when "1101" => DISPLAYOUT <= "1101";
when "1110" => DISPLAYOUT <= "1110";
when "1111" => DISPLAYOUT <= "1111";
when others => DISPLAYOUT <= "0000";
END CASE;
RETURN DISPLAYOUT;
END FUNCTION DISPLAY;
BEGIN
SECOND <=CLK1;
LSEC <=DISPLAY(LSEC1); --秒种的个位
HSEC <=DISPLAY(HSEC1); --秒种的十位
LMIN <=DISPLAY(LMIN1); --分钟的个位
HMIN <=DISPLAY(HMIN1); --分钟的十位
LHOUR <=DISPLAY(LHOUR1); --小时的个位
HHOUR <=DISPLAY(HHOUR1); --小时的十位
P1:PROCESS(CLK,RST) --CLK1产生一秒的时钟的块语句
CONSTANT N:INTEGER:=32768;
VARIABLE COUNT: INTEGER:=0;
BEGIN
IF RST='1' THEN
COUNT:=0;
CLK1 <='1';
COUNT:=COUNT+1;
ELSIF RISING_EDGE(CLK)THEN
IF(COUNT <N/2) THEN
CLK1 <='1';
COUNT:=COUNT+1;
ELSIF(COUNT <N)THEN
CLK1 <='0';
COUNT:=COUNT+1;
END IF;
END IF;
END PROCESS;
P2:PROCESS(CLK1,RST) --CLK2产生一分钟的时钟的块语句
CONSTANT M:INTEGER:=60;
VARIABLE CON: INTEGER:=0;
BEGIN
IF RST='1' THEN
CON:=0;
CLK2 <='1';
CON:=CON+1;
ELSIF RISING_EDGE(CLK1)THEN
IF(CON <M/2) THEN
CLK2 <='1';
CON:=CON+1;
ELSIF(CON <M)THEN
CLK2 <='0';
CON:=CON+1;
END IF;
END IF;
END PROCESS;
P3:PROCESS(RST,SETH,SETM,SETS) --复位和置数
BEGIN
IF RST='1' THEN
LSEC1 <="0000";
HSEC1 <="0000";
LMIN1 <="0000";
HMIN1 <="0000";
LHOUR1 <="0000";
HHOUR1 <="0000";
ELSIF SETH='0' AND SETM='0' AND SETS='0' THEN --置数
IF (SETH='0') THEN
LHOUR1 <=DBUS(3 DOWNTO 0);
HHOUR1 <=DBUS(7 DOWNTO 4);
ELSIF (SETM='0') THEN
LMIN1 <=DBUS(3 DOWNTO 0);
HMIN1 <=DBUS(7 DOWNTO 4);
ELSIF (SETS='0') THEN
LSEC1 <=DBUS(3 DOWNTO 0);
HSEC1 <=DBUS(7 DOWNTO 4);
END IF;
END IF;
END PROCESS;
P4:PROCESS(CLK1) --秒钟的个位
BEGIN
IF RISING_EDGE(CLK1) THEN
IF LSEC1 <9 THEN
LSEC1 <=LSEC1+1;
ELSE
LSEC1 <="0000";
END IF;
END IF;
END PROCESS;
P5:PROCESS(CLK1) --秒钟的十位
BEGIN
IF RISING_EDGE(CLK1) AND LSEC1=9 THEN
IF HSEC1 <5 THEN
HSEC <=HSEC1+1;
ELSE
HSEC1 <="0000";
END IF;
END IF;
END PROCESS;
P6:PROCESS(CLK2) --分钟的个位
BEGIN
IF RISING_EDGE(CLK2) THEN
IF LMIN1 <9 THEN
LMIN1 <=LMIN1+1;
ELSE
LMIN1 <="0000";
END IF;
END IF;
END PROCESS;
P7:PROCESS(CLK2) --分钟的十位
BEGIN
IF RISING_EDGE(CLK2) AND LMIN1=9 THEN
IF HMIN1 <5 THEN
HMIN1 <=HMIN1+1;
ELSE
HMIN1 <="0000";
END IF;
END IF;
END PROCESS;
P8:PROCESS(CLK2) --小时的个位
BEGIN
IF RISING_EDGE(CLK2) AND HMIN1=5 AND LMIN1=9 THEN
IF HHOUR1="0010" THEN
IF LHOUR1 <3 THEN
LHOUR1 <=LHOUR1+1;
ELSE
LHOUR1 <="0000";
END IF;
ELSIF HHOUR1 <2 THEN
IF LHOUR1 <9 THEN
LHOUR1 <=LHOUR1+1;
ELSE
LHOUR1 <="0000";
END IF;
END IF;
END IF;
END PROCESS;
P9:PROCESS(CLK2) --小时的十位
BEGIN
IF RISING_EDGE(CLK2) AND HMIN1=5 AND LMIN1=9 THEN
IF HHOUR1=2 AND LHOUR1=3 THEN
HHOUR1 <="0000";
ELSIF HHOUR1 <2 AND LHOUR1=9 THEN
HHOUR1 <=HHOUR1+1;
END IF;
END IF;
END PROCESS;
P10:PROCESS(CLK1)
begin --出错处理
IF RISING_EDGE(CLK2) THEN
IF HHOUR1> 2 AND HMIN1> 6 AND HSEC1> 6 AND LHOUR1> 9 AND LMIN1> 9 AND LSEC1> 9 THEN
LSEC1 <="0000";
HSEC1 <="0000";
LMIN1 <="0000";
HMIN1 <="0000";
LHOUR1 <="0000";
HHOUR1 <="0000";
END IF;
END IF;
END PROCESS;
END CLOCK;
发表时间:2006年6月15日18:59:24