會員 | Altera9.23版出現一個unknow problem,求救......【求助】 在上面的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; |
回覆 |
XML | RSS 2.0 | RSS |
本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。