數(shù)字時鐘設(shè)計_第1頁
數(shù)字時鐘設(shè)計_第2頁
數(shù)字時鐘設(shè)計_第3頁
數(shù)字時鐘設(shè)計_第4頁
數(shù)字時鐘設(shè)計_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)字時鐘設(shè)計第1頁,共54頁,2023年,2月20日,星期六

本章給出了PLD器件在復(fù)雜數(shù)字系統(tǒng)的典型應(yīng)用實例-數(shù)字時鐘的設(shè)計。數(shù)字時鐘的設(shè)計也是PLD在復(fù)雜數(shù)字系統(tǒng)的經(jīng)典應(yīng)用。該章首先介紹了數(shù)字時鐘的功能要求和整體結(jié)構(gòu);隨后具體介紹了數(shù)字時鐘的模塊設(shè)計,其中包括數(shù)字時鐘控制信號和控制模塊的具體結(jié)構(gòu)。本章最后詳細描述了設(shè)計的具體實現(xiàn)過程,具體包括數(shù)字時鐘的計數(shù)模塊設(shè)計、計數(shù)時鐘及掃描時鐘設(shè)計和顯示控制模塊設(shè)計。數(shù)字時鐘設(shè)計-本章概要第11章第十一章第2頁,共54頁,2023年,2月20日,星期六

數(shù)字鐘時常見的一種計數(shù)裝置,數(shù)字鐘以1Hz的頻率工作。該設(shè)計完成數(shù)字鐘的運行和顯示。其主要功能有:數(shù)字鐘以1Hz的頻率工作,其輸入頻率為1MHz。數(shù)字鐘顯示時、分、秒信息。這些顯示信息在6個7段數(shù)碼管上完成。通過按鍵設(shè)置時、分信息。并且具有對數(shù)字鐘的復(fù)位功能。復(fù)位鍵將時、分、秒清零,并做好重新計數(shù)的準備。按鍵具有預(yù)置時、分的功能。分別對當前的時和分信息做遞增設(shè)置和遞減設(shè)置。第十一章數(shù)字時鐘設(shè)計-數(shù)字時鐘的功能要求●第3頁,共54頁,2023年,2月20日,星期六第十一章數(shù)字時鐘設(shè)計-數(shù)字時鐘的結(jié)構(gòu)●第4頁,共54頁,2023年,2月20日,星期六第十一章數(shù)字時鐘設(shè)計-數(shù)字時鐘的結(jié)構(gòu)

圖11.1給出了該數(shù)字鐘的結(jié)構(gòu)圖。從圖中可以看到,數(shù)字鐘由:復(fù)位按鍵(reset);小時遞增按鍵(hour_inc);小時遞減按鍵(hour_dec);分鐘遞增按鍵(min_inc);分鐘遞減按鍵(min_dec);時鐘輸入;

7段LED顯示LED管選擇信號線sel;

LED碼控制信號線(segment)●第5頁,共54頁,2023年,2月20日,星期六

該數(shù)字鐘的控制部分由PLD芯片完成。該芯片的輸入和輸出接口由下面信號組成:輸入信號:復(fù)位信號(reset)時鐘輸入信號(clk)小時遞增信號(hour_inc)小時遞減信號(hour_dec)分鐘遞增信號(min_inc)分鐘遞減信號(min_dec)數(shù)字時鐘設(shè)計-數(shù)字時鐘的信號第十一章●第6頁,共54頁,2023年,2月20日,星期六輸出信號:LED選擇信號(sel)LED碼顯示控制信號(segment)數(shù)字時鐘設(shè)計-數(shù)字時鐘的信號第十一章●第7頁,共54頁,2023年,2月20日,星期六

該設(shè)計分成下面四個模塊:定時時鐘模塊、掃描時鐘模塊、按鍵處理模塊、定時計數(shù)模塊和顯示控制模塊。圖11.2給出了這幾個模塊之間的信號連接關(guān)系。第十一章數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)●第8頁,共54頁,2023年,2月20日,星期六

1、按鍵處理模塊由于VHDL語言的規(guī)則,將按鍵的處理和定時模塊設(shè)計在一起。為了描述清楚,將對按鍵的處理進行說明。在該設(shè)計中,采用異步復(fù)位電路方式。當復(fù)位信號低有效時,計數(shù)器停止計數(shù),時、分、秒清零。對于小時的遞增、遞減按鍵操作,通過一個1Hz的計數(shù)時鐘采樣。圖11.3給出了遞增、遞減的操作時序。第十一章數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)●第9頁,共54頁,2023年,2月20日,星期六第十一章數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)●第10頁,共54頁,2023年,2月20日,星期六

當1Hz的div_clk信號的上升沿到來時,檢測hour_inc和hour_dec按鍵,圖中的虛線表示在時鐘的上升沿對按鍵信號進行采樣。當hour_inc或hour_dec按鍵低有效時,對小時進行遞加或遞減操作。對于分鐘的遞加、遞減按鍵操作,也是通過一個1Hz的計數(shù)時鐘采樣。原理同圖11.4。數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)第十一章●第11頁,共54頁,2023年,2月20日,星期六

2、定時時鐘模塊

定時時鐘模塊其作用就是將外部提供的1MHz的時鐘,通過分頻器后向模塊內(nèi)的定時計數(shù)模塊提供1Hz的定時計數(shù)時鐘。在設(shè)計定時時鐘模塊時,采用同步計數(shù)電路。數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)第十一章●第12頁,共54頁,2023年,2月20日,星期六

3、掃描時鐘模塊掃描時鐘模塊的作用就是通過對1MHz的分頻處理后,向顯示控制模塊提供合適的顯示掃描時鐘,該時鐘必須經(jīng)過合理的設(shè)計,才能保證7段數(shù)碼顯示的穩(wěn)定。在設(shè)計掃描時鐘模塊時,采用同步計數(shù)電路。數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)第十一章●第13頁,共54頁,2023年,2月20日,星期六

4、定時計數(shù)模塊

定時計數(shù)模塊是該設(shè)計中最重要的一部分,在設(shè)計該模塊時,為了便于后續(xù)顯示控制模塊的設(shè)計,將時、分、秒進行分離,即小時分成了小時的十位和個位分別處理,分鐘分成了分鐘的十位和個位分別處理。秒分成了秒的十位和個位分別處理。在該設(shè)計中,采用24小時計數(shù)模式。例如:13:28:57。13為小時的表示,1為小時的十位,3為小時的個位;28為分鐘的表示,2為分鐘的十位,8為分鐘的個位;57為秒的表示,5為秒的十位,7為秒的個位。數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)第十一章●第14頁,共54頁,2023年,2月20日,星期六

秒的個位計數(shù)從0-9,即十進制計數(shù)。當秒的個位計數(shù)到9后,準備向秒的十位進位。秒的十位計數(shù)從0-5,即六進制計數(shù)。當秒的十位計數(shù)到5后,準備向分的個位進位。分鐘的個位計數(shù)從0-9,即十進制計數(shù)。當分鐘的個位計數(shù)到9后,準備向分鐘的十位進位。分鐘的十位計數(shù)從0-5,即六進制計數(shù)。當分鐘的十位計數(shù)到5后,準備向小時的個位進位。對于小時的處理比較復(fù)雜,小時的十位和個位之間存在下面的關(guān)系:當小時的十位為0或1時,小時的個位可以計數(shù)范圍為0-9,即十進制計數(shù);當小時的十位為2時,小時的各位可以計數(shù)的范圍為0-3,即四進制計數(shù);數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)第十一章●第15頁,共54頁,2023年,2月20日,星期六數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)第十一章●第16頁,共54頁,2023年,2月20日,星期六

5、顯示控制模塊

顯示控制模塊主要作用是在7段數(shù)碼管上正確的顯示0-9的數(shù)字。sel三位LED選擇線和3-8譯碼器相連數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)第十一章●第17頁,共54頁,2023年,2月20日,星期六整個工程窗口:含設(shè)計時鐘源文件、仿真測試文件、用戶約束文件第十一章數(shù)字時鐘設(shè)計-控制模塊結(jié)構(gòu)●第18頁,共54頁,2023年,2月20日,星期六數(shù)字時鐘設(shè)計-行為仿真結(jié)果第十一章●第19頁,共54頁,2023年,2月20日,星期六數(shù)字時鐘設(shè)計-布局布線仿真結(jié)果第十一章●第20頁,共54頁,2023年,2月20日,星期六

選擇“project->newsource”;設(shè)置實現(xiàn)約束文件類型ImplementationConstraintsFile,文件名clock;單擊“下一步”,選中與“clock”關(guān)聯(lián);單擊“下一步”,單擊“完成”;選中“clcok.ucf”文件,在Processview窗口雙擊“Assignpackagepins”,出現(xiàn)XinlinxPACE窗口界面;數(shù)字時鐘設(shè)計-用戶約束文件設(shè)置第十一章●第21頁,共54頁,2023年,2月20日,星期六數(shù)字時鐘設(shè)計-XinlinxPACE窗口界面第十一章●第22頁,共54頁,2023年,2月20日,星期六6.單擊DesignObjectList-IOPins窗口中每一信號后的Loc,可以輸入對應(yīng)的FPGA引腳,形式如P78。設(shè)置完成,保存文件,退出XilinxPACE窗口,完成引腳分配。數(shù)字時鐘設(shè)計-用戶約束文件設(shè)置第十一章●第23頁,共54頁,2023年,2月20日,星期六數(shù)字時鐘設(shè)計-引腳分配文件第十一章●第24頁,共54頁,2023年,2月20日,星期六1.首先選中“GenerateProgrammingFile”,右鍵單擊,單擊“Properties”;

2.選中“ProcessProperties”窗口下的“Startupoptions”標簽,設(shè)置“FPGAstart-upclock”為JTAG,單擊“確定”;數(shù)字時鐘設(shè)計-編程下載驗證第十一章●第25頁,共54頁,2023年,2月20日,星期六數(shù)字時鐘設(shè)計-編程下載驗證第十一章●第26頁,共54頁,2023年,2月20日,星期六

3.在如下圖所示的“Processforsource:clock-behavioral”中,雙擊ConfigureDevice(iMPACT).數(shù)字時鐘設(shè)計-編程下載驗證第十一章●第27頁,共54頁,2023年,2月20日,星期六

4.系統(tǒng)自動進行綜合、實現(xiàn)過程,若沒有錯誤,將出現(xiàn)如下窗口,單擊“下一步”,單擊“完成”;數(shù)字時鐘設(shè)計-編程下載驗證第十一章●第28頁,共54頁,2023年,2月20日,星期六

5.出現(xiàn)一個確認窗口,告知檢測到一個器件,單擊“確定”按鈕;

6.選擇剛剛生成的bit文件,單擊“打開”;

7.可能會出現(xiàn)警告,單擊“確定”;

8.此時界面中JTAG鏈上只有一個器件,型號為XC3S400,單擊鼠標右鍵,單擊“Program…”,完成對器件編程,進行實際驗證。數(shù)字時鐘設(shè)計-編程下載驗證第十一章●第29頁,共54頁,2023年,2月20日,星期六libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;--實體定義部分entityclockisport( clk:instd_logic; rst:instd_logic; inc_min:instd_logic; sub_min:instd_logic; inc_hour:instd_logic; sub_hour:instd_logic; sel:outstd_logic_vector(2downto0); q:outstd_logic_vector(7downto0));endclock;數(shù)字時鐘設(shè)計-主程序第十一章●第30頁,共54頁,2023年,2月20日,星期六--信號定義:

architectureBehavioralofclockissignalsec_counter1:std_logic_vector(3downto0);signalsec_counter2:std_logic_vector(3downto0);signalmin_counter1:std_logic_vector(3downto0);signalmin_counter2:std_logic_vector(3downto0);signalhour_counter1:std_logic_vector(3downto0);signalhour_counter2:std_logic_vector(3downto0);signaldivcounter:std_logic_vector(3downto0);signaldiv_clk:std_logic;signalscancounter:std_logic_vector(1downto0);signalscan_clk:std_logic;signalscan_out:std_logic_vector(2downto0);signalsecseg1,secseg2,minseg1,minseg2,hourseg1,hourseg2:std_logic_vector(7downto0);begin數(shù)字時鐘設(shè)計-主程序第十一章●第31頁,共54頁,2023年,2月20日,星期六--計數(shù)時鐘,對外部輸入時鐘分頻,此處只適用于仿真,實際進行時間計數(shù)時,分頻后時鐘應(yīng)該滿足1HZ。process(rst,clk)beginif(rst='0')then divcounter<="0000"; div_clk<='0'; elsif(rising_edge(clk)) then if(divcounter="1111")then divcounter<="0000"; div_clk<=notdiv_clk;else divcounter<=divcounter+'1';endif; endif;endprocess;數(shù)字時鐘設(shè)計-主程序第十一章●第32頁,共54頁,2023年,2月20日,星期六--仿真時數(shù)碼管掃描時鐘,實際中需根據(jù)具體情況進行調(diào)解時鐘頻率process(rst,clk)begin if(rst='0')then scancounter<="00"; scan_clk<='0';elsif(rising_edge(clk)) then if(scancounter="11")then scancounter<="00"; scan_clk<=notscan_clk;else scancounter<=scancounter+'1';endif;endif; endprocess;數(shù)字時鐘設(shè)計-主程序第十一章●第33頁,共54頁,2023年,2月20日,星期六--時鐘計數(shù)部分主進程

--時鐘復(fù)位clock:process(div_clk,rst)beginif(rst='0')then sec_counter1<=X"0"; sec_counter2<=X"0"; min_counter1<=X"0"; min_counter2<=X"0"; hour_counter1<=X"0"; hour_counter2<=X"0";

數(shù)字時鐘設(shè)計-主程序第十一章●第34頁,共54頁,2023年,2月20日,星期六

--手動調(diào)分,遞增elsif(rising_edge(div_clk))thenif(inc_min='0')then if(min_counter1=X"9")then min_counter1<=X"0"; if(min_counter2>=X"5")then min_counter2<=X"0";elsemin_counter2<=min_counter2+1;endif;else min_counter1<=min_counter1+1;endif;數(shù)字時鐘設(shè)計-主程序第十一章●第35頁,共54頁,2023年,2月20日,星期六--手動調(diào)分,遞減elsif(sub_min='0')then if(min_counter1=X"0")then min_counter1<=X"9";if(min_counter2=X"0")then min_counter2<=X"5";else min_counter2<=min_counter2-1;endif;else min_counter1<=min_counter1-1;

endif;數(shù)字時鐘設(shè)計-主程序第十一章●第36頁,共54頁,2023年,2月20日,星期六--手動調(diào)時,增時elsif(inc_hour='0')then if(hour_counter2=X"2")then if(hour_counter1=X"3")then hour_counter1<=X"0"; hour_counter2<=X"0"; else hour_counter1<=hour_counter1+1; endif;elseif(hour_counter1=X"9")then hour_counter1<=X"0"; hour_counter2<=hour_counter2+1;else hour_counter1<=hour_counter1+1;endif;endif;數(shù)字時鐘設(shè)計-主程序第十一章●第37頁,共54頁,2023年,2月20日,星期六--手動調(diào)時,減時elsif(sub_hour='0')thenif(hour_counter1=X"0")then if(hour_counter2=X"0")thenhour_counter1<=X"3"; hour_counter2<=X"2"; else hour_counter2<=hour_counter2-1; hour_counter1<=X"9";endif;else hour_counter1<=hour_counter1-1;endif;數(shù)字時鐘設(shè)計-主程序第十一章●第38頁,共54頁,2023年,2月20日,星期六--時分秒正常計數(shù)elseif(sec_counter1>=X"9")then sec_counter1<=X"0"; if(sec_counter2>=X"5")then sec_counter2<=X"0"; if(min_counter1>=X"9")then min_counter1<=X"0"; if(min_counter2>=X"5")thenmin_counter2<=X"0"; if(hour_counter2=X"2")then if(hour_counter1=X"3")thenhour_counter1<=X"0"; hour_counter2<=X"0";數(shù)字時鐘設(shè)計-主程序第十一章●第39頁,共54頁,2023年,2月20日,星期六else hour_counter1<=hour_counter1+1;endif;elseif(hour_counter1=X"9")then hour_counter1<=X"0"; hour_counter2<=hour_counter2+1;elsehour_counter1<=hour_counter1+1;endif;endif;elsemin_counter2<=min_counter2+1;endif;數(shù)字時鐘設(shè)計-主程序第十一章●第40頁,共54頁,2023年,2月20日,星期六

elsemin_counter1<=min_counter1+1;endif;elsesec_counter2<=sec_counter2+1;endif;elsesec_counter1<=sec_counter1+1;endif;endif;endif;

endprocessclock;數(shù)字時鐘設(shè)計-主程序第十一章●第41頁,共54頁,2023年,2月20日,星期六--生成掃描時鐘process(rst,scan_clk) begin if(rst='0')then scan_out<="000"; elsif(rising_edge(scan_clk))then if(scan_out="101")then scan_out<="000";else scan_out<=scan_out+1; endif; endif;endprocess;數(shù)字時鐘設(shè)計-主程序第十一章●第42頁,共54頁,2023年,2月20日,星期六--掃描輸出進程process(scan_out)begincasescan_outiswhen"000"=>q<=secseg1;sel<="000"; when"001"=>q<=secseg2;sel<="001";when"010"=>q<=minseg1;sel<="010";when"011"=>q<=minseg2;sel<="011";when"100"=>q<=hourseg1; sel<="100"; when"101" =>q<=hourseg2;sel<="101";whenothers=>q<="11111111";sel<="111";endcase;endprocess;數(shù)字時鐘設(shè)計-主程序第十一章●第43頁,共54頁,2023年,2月20日,星期六--秒低位顯示second_counter1:process(sec_counter1) begin casesec_counter1is when"0000"=>secseg1<="10111111"; when"0001"=>secseg1<="10000110"; when"0010"=>secseg1<="11011011"; when"0011"=>secseg1<="11001111"; when"0100"=>secseg1<="11100110"; when"0101"=>secseg1<="11101101"; when"0110"=>secseg1<="11111101"; when"0111"=>secseg1<="10000111"; when"1000"=>secseg1<="11111111"; when"1001"=>secseg1<="11101111"; whenothers=>secseg1<="11111111";endcase;endprocesssecond_counter1;數(shù)字時鐘設(shè)計-主程序第十一章●第44頁,共54頁,2023年,2月20日,星期六--秒高位顯示second_counter2:process(sec_counter2) begin casesec_counter2is when"0000"=>secseg2<="00111111"; when"0001"=>secseg2<="00000110"; when"0010"=>secseg2<="01011011"; when"0011"=>secseg2<="01001111"; when"0100"=>secseg2<="01100110"; when"0101"=>secseg2<="01101101"; whenothers=>secseg2<="01111111";endcase;endprocesssecond_counter2;數(shù)字時鐘設(shè)計-主程序第十一章●第45頁,共54頁,2023年,2月20日,星期六--分低位顯示minute_counter1:process(min_counter1) begin casemin_counter1is when"0000"=>minseg1<="10111111"; when"0001"=>minseg1<="10000110"; when"0010"=>minseg1<="11011011"; when"0011"=>minseg1<="11001111"; when"0100"=>minseg1<="11100110"; when"0101"=>minseg1<="11101101"; when"0110"=>minseg1<="11111101"; when"0111"=>minseg1<="10000111"; when"1000"=>minseg1<="11111111"; when"1001"=>minseg1<="11101111"; whenothers=>minseg1<="11111111";endcase;endprocessminute_counter1;數(shù)字時鐘設(shè)計-主程序第十一章●第46頁,共54頁,2023年,2月20日,星期六--分高位顯示minute_counter2:process(min_counter2) begin casemin_counter2is when"0000"=>minseg2<="00111111"; when"0001"=>minseg2<="00000110"; when"0010"=>minseg2<="01011011"; when"0011"=>minseg2<="01001111"; when"0100"=>minseg2<="01100110"; when"0101"=>minseg2<="01101101"; whenothers=>minseg2<="01111111";endcase;endprocessminute_counter2;數(shù)字時鐘設(shè)計-主程序第十一章●第47頁,共54頁,2023年,2月20日,星期六--小時低位顯示hor_counter1:process(hour_counter1) begin casehour_counter1is when"0000"=>hourseg1<="10111111"; when"0001"=>hourseg1<="10000110"; when"0010"=>hourseg1<="11011011"; when"0011"=>hourseg1<="11001111"; when"0100"=>hourseg1<="11100110"; when"0101"=>hourseg1<="11101101"; when"0110"=>hourseg1<="11111101"; when"0111"=>hourseg1<="10000111"; when"1000"=>hourseg1<="11111111"; when"1001"=>hourseg1<="11101111"; whenothers=>hourseg1<="11111111";endcase;endprocess;數(shù)字時鐘設(shè)計-主程序第十一章●第48頁,共54頁,2023年,2月20日,星期六--小時高位顯示

hor_counter2:process(hour_counter2) begin casehour_counter2is when"0000"=>hourseg2<="00111111"; when"0001"=>hourseg2<="00000110"; when"0010"=>hourseg2<="01011011"; whenothers=>hourseg2<="01111111";endcase;endprocess;endBehavioral;數(shù)字時鐘設(shè)計-主程序第十一章●第49頁,共54頁,2023年,2月20日,星期六LIBRARYieee;USEieee.std_logic_1164.ALL;USEieee.std_logic_unsigned.all;USEieee.numeric_std.ALL;ENTITYtest_clock_vhdISENDtest_clock_vhd;ARCHITECTUREbehaviorOFtest_clock_vhdIS --ComponentDeclarationfortheUnitUnderTest(UUT) COMPONENTclock PORT( clk:INstd_logic; rst:INstd_logic; inc_min:INstd_logic; sub_min:INstd_logic; inc_hour:INstd_logic; sub_hour:INstd_logic; sel:OUTstd_logic_vector(2downto0); q:OUTstd_logic_vector(7downto0) ); ENDCOMPONENT;數(shù)字時鐘設(shè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論