Altera9.23版出現一個unknow problem,求救......【求助】



贊助商連結


zealgirl
2002-05-25, 08:27 PM
在上面的Messenges-complier的視窗中出現的問題,請高手解釋的下是哪裡出了問題?
我把我的原始碼貼上來好了。
這是一個時鐘的程式碼,有鬧鈴功能。
我在我們學校的Altera10.1版也試過了,也出現一樣的錯誤訊息!

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CLK_ALRM2 IS
PORT(
ALRM,HR,MN10,MN,CLK,ALMON:IN STD_LOGIC;
BUZZER :OUT STD_LOGIC;
SCAN :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
DISP7 :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
SEC_LED :OUT STD_LOGIC
);
END CLK_ALRM2;
-----------------------------------
ARCHITECTURE A OF CLK_ALRM2 IS
SIGNAL SAMPLE,SAMPLE2,FLICK,S1C :STD_LOGIC;
SIGNAL HR_FT,MN10_FT,MN_FT :STD_LOGIC;
SIGNAL MN1C,MN10C,HR1C :STD_LOGIC;
SIGNAL MN_D,MN10_D,HR_D,HR10_D :STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL MN_ALM,MN10_ALM,HR_ALM,HR10_ALM:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL HR10_C,HR_C,MN10_C,MN_C :STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL DISP_D :STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
------------------------------------
FRQDIV:BLOCK
SIGNAL F:STD_LOGIC_VECTOR(23 DOWNTO 0);
SIGNAL DLY,DLY2:STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
DLY<=F(16);
DLY2<=F(14);
IF F="011110100001001000000000" THEN
F<="000000000000000000000000";
S1C<='1';
ELSE
F<=F+1;
S1C<='0';
END IF;
END IF;
END PROCESS;
FLICK<=F(22);
SAMPLE<=F(16) AND NOT DLY;
SAMPLE2<=F(14) AND NOT DLY2;
END BLOCK FRQDIV;
---------------------------------
FRQSEC:BLOCK
SIGNAL FSEC:STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
PROCESS(S1C)
BEGIN
IF S1C'EVENT AND S1C='1' THEN
IF FSEC=59 THEN
FSEC<="000000";
MN1C<='1';
ELSE
FSEC<=FSEC+1;
MN1C<='0';
END IF;
END IF;
END PROCESS;
PROCESS(FSEC(0))
BEGIN
CASE FSEC(0) IS
WHEN '1'=>SEC_LED<='1';
WHEN OTHERS=>SEC_LED<='0';
END CASE;
END PROCESS;
END BLOCK FRQSEC;
--------------------------------
DEBOUNCING:BLOCK
SIGNAL HR_0,HR_1,MN10_0,MN10_1,MN_0,MN_1:STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF SAMPLE='1' THEN
HR_1<=HR_0;HR_0<=NOT HR;
HR_FT<=((HR_0 AND HR_1) OR HR_FT) AND (HR_0 OR HR_1);
MN10_1<=MN10_0;MN10_0<=NOT MN10;
MN10_FT<=((MN10_0 AND MN10_1) OR MN10_FT) AND (MN10_0 OR MN10_1);
MN_1<=MN_0;MN_0<=NOT MN;
MN_FT<=((MN_0 AND MN_1) OR MN_FT) AND (MN_0 OR MN_1);
END IF;
END IF;
END PROCESS;
END BLOCK DEBOUNCING;
-----------------------------
FRQMN:BLOCK
SIGNAL FMN:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL MN1:STD_LOGIC;
BEGIN
MN1<=(MN_FT AND ALRM) OR MN1C;
PROCESS(MN1)
BEGIN
IF MN1'EVENT AND MN1='1' THEN
IF FMN="1001" THEN
FMN<="0000";
MN10C<='1';
ELSE
FMN<=FMN+1;
MN10C<='0';
END IF;
END IF;
END PROCESS;
MN_D<=FMN;
END BLOCK FRQMN;
---------------------------------
FRQMN10:BLOCK
SIGNAL FMN10:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL MN10:STD_LOGIC;
BEGIN
MN10<=(MN10_FT AND ALRM) OR MN10C;
PROCESS(MN10)
BEGIN
IF MN10'EVENT AND MN10='1' THEN
IF FMN10="0101" THEN
FMN10<="0000";
HR1C<='1';
ELSE
FMN10<=fmn10+1;
HR1C<='0';
END IF;
END IF;
END PROCESS;
MN10_D<=FMN10;
END BLOCK FRQMN10;
---------------------------
FRQHR:BLOCK
SIGNAL FHR10,FHR:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL HR1:STD_LOGIC;
BEGIN
HR1<=(HR_FT AND ALRM) OR HR1C;
PROCESS(HR1)
BEGIN
IF HR1'EVENT AND HR1='1' THEN
IF (FHR10="0010" AND FHR="0011") THEN
FHR10<="0000";
FHR<="0000";
ELSE IF FHR="1001" THEN
FHR10<=FHR10+1;
FHR<="0000";
ELSE
FHR<=FHR+1;
END IF;
END IF;
END IF;
END PROCESS;
HR_D<=FHR;
HR10_D<=FHR10;
END BLOCK FRQHR;
-------------------
MN_ALRM:BLOCK
SIGNAL MN_A:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL MNA:STD_LOGIC;
BEGIN
MNA<=MN_FT AND (NOT ALRM);
PROCESS(MNA)
BEGIN
IF MNA'EVENT AND MNA='1' THEN
IF MN_A="1001" THEN
MN_A<="0000";
ELSE
MN_A<=MN_A+1;
END IF;
END IF;
END PROCESS;
MN_ALM<=MN_A;
END BLOCK MN_ALRM;
------------------------------
MN10_ALRM:BLOCK
SIGNAL MN10_A:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL MN10A:STD_LOGIC;
BEGIN
MN10A<=MN10_FT AND (NOT ALRM);
PROCESS(MN10A)
BEGIN
IF MN10A'EVENT AND MN10A='1' THEN
IF MN10_A="0101" THEN
MN10_A<="0000";
ELSE
MN10_A<=MN10_A+1;
END IF;
END IF;
END PROCESS;
MN10_ALM<=MN10_A;
END BLOCK MN10_ALRM;
----------------------------------
HR_ALRM:BLOCK
SIGNAL HR10_A,HR_A:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL HR1A:STD_LOGIC;
BEGIN
HR1A<=HR_FT AND (NOT ALRM);
PROCESS(HR1A)
BEGIN
IF HR1A'EVENT AND HR1A='1' THEN
IF HR10_A="0010" AND HR_A="0011" then
HR10_A<="0000";
HR_A<="0000";
ELSE IF HR_A="1001" THEN
HR10_A<=HR10_A+1;
HR_A<="0000";
ELSE
HR_A<=HR_A+1;
END IF;
END IF;
END IF;
END PROCESS;
HR10_ALM<=HR10_A;
HR_ALM<=HR_A;
END BLOCK HR_ALRM;
-----------------------------------
STATE:BLOCK
BEGIN
PROCESS(ALRM)
BEGIN
IF ALRM='1' THEN
HR10_C<=HR10_D;
HR_C<=HR_D;
MN10_C<=MN10_D;
MN_C<=MN_D;
ELSE
HR10_C<=HR10_ALM;
HR_C <=HR_ALM;
MN10_C<=MN10_ALM;
MN_C <=MN_ALM;
END IF;
END PROCESS;
PROCESS(ALMON)
BEGIN
IF (ALMON='0' AND HR10_ALM=HR10_D AND HR_ALM=HR_D AND MN10_ALM=MN10_D AND MN_ALM=MN_D) THEN
BUZZER<=FLICK;
END IF;
END PROCESS;
END BLOCK STATE;
---------------------------------------
SCANNER:BLOCK
SIGNAL SCAN_CNT:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
PROCESS(SAMPLE2)
BEGIN
IF SAMPLE2'EVENT AND SAMPLE2='1' THEN
SCAN_CNT<=SCAN_CNT+1;
END IF;
CASE SCAN_CNT IS
WHEN "00"=>
SCAN<="1000";
DISP_D<=HR10_C;
WHEN "01"=>
SCAN<="0100";
DISP_D<=HR_C;
WHEN "10"=>
SCAN<="0010";
DISP_D<=MN10_C;
WHEN OTHERS=>
SCAN<="0001";
DISP_D<=MN_C;
END CASE;
END PROCESS;
END BLOCK SCANNER;
--------------------------------
SEVEN_SEG :BLOCK
BEGIN
DISP7 <= "00000011" WHEN DISP_D=0 ELSE
"10011111" WHEN DISP_D=1 ELSE
"00100101" WHEN DISP_D=2 ELSE
"00001101" WHEN DISP_D=3 ELSE
"10011001" WHEN DISP_D=4 ELSE
"01001001" WHEN DISP_D=5 ELSE
"01000001" WHEN DISP_D=6 ELSE
"00011011" WHEN DISP_D=7 ELSE
"00000001" WHEN DISP_D=8 ELSE
"00001001" ;
END BLOCK SEVEN_SEG;
-------------------------------------------
END A;
http://home.pchome.com.tw/smile/zealgirl/pictures/clock.bmp