EDA課程設計報告數(shù)字電子時鐘_第1頁
EDA課程設計報告數(shù)字電子時鐘_第2頁
EDA課程設計報告數(shù)字電子時鐘_第3頁
EDA課程設計報告數(shù)字電子時鐘_第4頁
EDA課程設計報告數(shù)字電子時鐘_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

年4月19日EDA課程設計報告數(shù)字電子時鐘文檔僅供參考EDA課程設計報告設計題目:數(shù)字時鐘的設計班級:電氣工程及其自動化姓名:學號:日期:6月15日

目錄摘要一、課程設計任務及要求 31.1實驗目的 31.2功能設計 4二、整體設計思想 42.1性能指標及功能設計 42.2總體方框圖 4三、詳細設計 53.1數(shù)字時鐘的結構: 53.2控制模塊的結構 53.3.1按鍵處理模塊 63.3.2定時時鐘模塊 63.3.3掃描時鐘模塊 63.3.4定時計數(shù)模塊 63.3.5顯示控制模塊 7四、主程序……………. 7 五、實驗步驟……………145.1工程建立及存盤145.2時序仿真145.3引腳鎖定145.4硬件測試155.5實驗結果15結束語15參考文獻16

EDA技術實現(xiàn)的數(shù)字電子時鐘設計作者:指導老師:摘要EDA技術在硬件實現(xiàn)方面融合了大規(guī)模集成電路制造技術,IC版圖設計技術、ASIC測試與封裝技術、FPGA/CPLD編程下載技術、自動檢測技術等;EDA技術為現(xiàn)代電子理論和設計的表示與實現(xiàn)提供了可能性。在現(xiàn)代技術的所有領域中,縱觀許多得以飛速發(fā)展的科學技術,多為計算機輔助設計,而非自動化設計。顯然,最早進入設計自動化的技術領域之一是電子技術,這就是為什么電子技術始終處于所有科學技術發(fā)展最前列的原因之一。不難理解,EDA技術已不是某一學科的分支,或某種新的技能技術,應該是一門綜合性學科。它融合多學科于一體,打破了軟件和硬件間的壁壘,是計算機的軟件技術與硬件實現(xiàn)、設計效率和產(chǎn)品性能合二為一,它代表了電子設計技術合應用激活速的發(fā)展方向。電子時鐘以成為人們常生活中數(shù)字電子鐘一般由振蕩器,分頻器,譯碼器,顯示器等部分組成。電子時鐘的應用非常廣泛,應用于人家庭或車站、劇場、辦公室等公共場所,給人們的生活,學習,工作,娛樂帶來極大的便利,盡管當前市場上以有現(xiàn)成電子時鐘集成電路芯片,價格便宜這些都是數(shù)字電路中最基本的,應用最廣的電路。數(shù)字電子鐘的基本邏輯功能框圖如下:它是一個將“時”,“分”,“秒”顯示于人的視覺器官的計時裝置。她的計時裝置的周期為24小時,顯示滿刻度為23時59分59秒,另外應有校時功能。關鍵字:EDA;VHDL語言;電子時鐘課程設計任務及要求1.1實驗內(nèi)容選用合適的可編程邏輯器件及外圍電子元器件。設計一個數(shù)字電子鐘,利用EDA軟件(QUARTUSⅡ)進行編譯及仿真,設計輸入可采取VHDL硬件描述語言輸入法和原理圖輸入法,并下載到EDA實驗開發(fā)系統(tǒng),連接外圍電路,完成實際測試。1.2設計要求1)用六個數(shù)碼管顯示時、分、秒信息2)設置復位功能,可經(jīng)過復位鍵將時、分、秒清零3)具有時、分預置功能,可分別對時和分做遞增設置和遞減設置二、整體設計思想2.1性能指標及功能設計數(shù)字鐘時常見的一種計數(shù)裝置,數(shù)字鐘以1Hz的頻率工作。該設計完成數(shù)字鐘的運行和顯示。其主要功能有:(1)數(shù)字鐘以1Hz的頻率工作,其輸入頻率為1MHz。(2)數(shù)字鐘顯示時、分、秒信息。這些顯示信息在6個7段數(shù)碼管上完成。(3)經(jīng)過按鍵設置時、分信息。而且具有對數(shù)字鐘的復位功能。復位鍵將時、分、秒清零,并做好重新計數(shù)的準備。按鍵具有預置時、分的功能。分別對當前的時和分信息做遞增設置和遞減設置。2.2總體方框圖三、詳細設計3.1數(shù)字時鐘的結構該數(shù)字鐘的控制部分由PLD芯片完成。該芯片的輸入和輸出接口由下面信號組成:輸入信號:復位信號(reset)時鐘輸入信號(clk)小時遞增信號(inc_hour)小時遞減信號(sub_hour)分鐘遞增信號(inc_min)分鐘遞減信號(sub_min)輸出信號:7段數(shù)碼管選信號(sel)7段數(shù)碼管段選信號(q)3.2控制模塊結構該設計分成下面五個模塊:定時時鐘模塊、掃描時鐘模塊、按鍵處理模塊、定時計數(shù)模塊和顯示控制模塊。圖11.2給出了這幾個模塊之間的信號連接關系。3.2.1、按鍵處理模塊由于VHDL語言的規(guī)則,將按鍵的處理和定時模塊設計在一起。為了描述清楚,將對按鍵的處理進行說明。在該設計中,采用異步復位電路方式。當復位信號低有效時,計數(shù)器停止計數(shù),時、分、秒清零。對于小時的遞增、遞減按鍵操作,經(jīng)過一個1Hz的計數(shù)時鐘采樣。圖11.3給出了遞增、遞減的操作時序。當1Hz的div_clk信號的上升沿到來時,檢測hour_inc和hour_dec按鍵,圖中的虛線表示在時鐘的上升沿對按鍵信號進行采樣。當hour_inc或hour_dec按鍵低有效時,對小時進行遞加或遞減操作。對于分鐘的遞加、遞減按鍵操作,也是經(jīng)過一個1Hz的計數(shù)時鐘采樣。原理同圖11.3。3.2.2、定時時鐘模塊定時時鐘模塊其作用就是將外部提供的1MHz的時鐘,經(jīng)過分頻器后向模塊內(nèi)的定時計數(shù)模塊提供1Hz的定時計數(shù)時鐘。在設計定時時鐘模塊時,采用同步計數(shù)電路。3.2.3、掃描時鐘模塊掃描時鐘模塊的作用就是經(jīng)過對1MHz的分頻處理后,向顯示控制模塊提供合適的顯示掃描時鐘,該時鐘必須經(jīng)過合理的設計,才能保證7段數(shù)碼顯示的穩(wěn)定。在設計掃描時鐘模塊時,采用同步計數(shù)電路。3.2.4、定時計數(shù)模塊定時計數(shù)模塊是該設計中最重要的一部分,在設計該模塊時,為了便于后續(xù)顯示控制模塊的設計,將時、分、秒進行分離,即小時分成了小時的十位和個位分別處理,分鐘分成了分鐘的十位和個位分別處理。秒分成了秒的十位和個位分別處理。在該設計中,采用24小時計數(shù)模式。例如:13:28:57。13為小時的表示,1為小時的十位,3為小時的個位;28為分鐘的表示,2為分鐘的十位,8為分鐘的個位;57為秒的表示,5為秒的十位,7為秒的個位。秒的個位計數(shù)從0-9,即十進制計數(shù)。當秒的個位計數(shù)到9后,準備向秒的十位進位。秒的十位計數(shù)從0-5,即六進制計數(shù)。當秒的十位計數(shù)到5后,準備向分的個位進位。分鐘的個位計數(shù)從0-9,即十進制計數(shù)。當分鐘的個位計數(shù)到9后,準備向分鐘的十位進位。分鐘的十位計數(shù)從0-5,即六進制計數(shù)。當分鐘的十位計數(shù)到5后,準備向小時的個位進位。對于小時的處理比較復雜,小時的十位和個位之間存在下面的關系:(1)當小時的十位為0或1時,小時的個位能夠計數(shù)范圍為0-9,即十進制計數(shù);(2)當小時的十位為2時,小時的各位能夠計數(shù)的范圍為0-3,即四進制計數(shù);3.2.5、顯示控制模塊顯示控制模塊主要作用是在7段數(shù)碼管上正確的顯示0-9的數(shù)字。sel三位選擇線和3-8譯碼器相連四、主程序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(5downto0); q:outstd_logic_vector(7downto0));endclock;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(8downto0);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);beginprocess(rst,clk)beginif(rst='1')then divcounter<=""; div_clk<='0'; elsif(rising_edge(clk)) then if(divcounter="")then divcounter<=""; div_clk<=notdiv_clk;else divcounter<=divcounter+1;endif; endif;endprocess;process(rst,clk)begin if(rst='1')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;clock:process(div_clk,rst)beginif(rst='1')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";elsif(rising_edge(div_clk))thenif(inc_min='1')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;elsif(sub_min='1')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;elsif(inc_hour='1')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;elsif(sub_hour='1')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;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";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;elsemin_counter1<=min_counter1+1;endif;elsesec_counter2<=sec_counter2+1;endif;elsesec_counter1<=sec_counter1+1;endif;endif;endif;endprocessclock;process(rst,scan_clk) begin if(rst='1')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;process(scan_out)begincasescan_outiswhen"000"=>q<=secseg1;sel<="000001"; when"001"=>q<=secseg2;sel<="000010";when"010"=>q<=minseg1;sel<="000100";when"011"=>q<=minseg2;sel<="001000";when"100"=>q<=hourseg1;sel<="010000"; when"101"=>q<=hourseg2;sel<="100000";whenothers=>q<="11111111";sel<="000000";endcase;endprocess;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;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;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;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;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;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;五、實驗步驟5.1工程建立及存盤打開QuartusⅡ,單擊“File”菜單,選擇File→NewProjectWizard,對話框如下:分別輸入項目的工作路徑、項目名和實體名,單擊Finish。2.單擊“File”菜單,選擇New,彈出小對話框,雙擊“VHDLFile",即選中了文本編輯方式。在出現(xiàn)的“Vhdl1.vhd”文本編輯窗中鍵入VHDL程序,輸入完畢后,選擇File→SaveAs,即出現(xiàn)“SaveAs”對話框。選擇自己建立好的存放本文件的目錄,然后在文件名框中鍵入文件名,按“Save”按鈕。3.建立工程項目,在保存VHDL文件時會彈出是否建立項目的小窗口,點擊“Yes”確定。即出現(xiàn)建立工程項目的導航窗口,點擊“Next”,最后在出現(xiàn)的屏幕中分別鍵入新項目的工作路徑、項目名和實體名。注意,原理圖輸入設計方法中,存盤的原理圖文件名能夠是任意的,但VHDL程序文本存盤的文件名必須與文件的實體名一致,輸入后,單擊“Finish”按鈕。4.然后對程序進行編譯5.2時序仿真建立波形文件:選擇File→New,在New窗中選中“OtherFile”標簽。在出現(xiàn)的屏幕中選擇“VectorWaveformFile”項出現(xiàn)一新的屏幕。在出現(xiàn)的新屏幕中,雙擊“Name”下方的空白處,彈出“InsertNodorBus”對話框,單擊該對話框的“NodeFinder……”。在屏幕中的Filter中選擇Pins,單擊“List”。而后,單擊“>>”,所有輸入/輸出都被拷貝到右邊的一側(cè),這些正是我們希望的各個引腳,也能夠只選其中的的一部分,根據(jù)實際情況決定。然后單擊屏幕右上腳的“OK”。在出現(xiàn)的小屏幕上單擊“OK”。設定仿真時間寬度。選擇Edit→Endtime…選項,在Endtime選擇窗中選擇適當?shù)姆抡鏁r間域,以便有足夠長的觀察時間。波形文件存盤。選擇File→Saveas選項,直接存盤即可。運行仿真器。在菜單中選擇項,直到出現(xiàn),仿真結束。5.3引腳鎖定將設計編程下載進選定的目標器件中操作如下:1.選擇Assignments→AssignmentsEditor,即進入AssignmentsEditor編輯器。在Category欄選擇Pin,或直接單擊右上側(cè)的Pin按鈕。2.雙擊TO欄的《new》,在出現(xiàn)的的下拉欄中選擇對應的端口信號名(如D[0]);然后雙

溫馨提示

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

評論

0/150

提交評論