基于VHDL的數(shù)字鐘設(shè)計.doc
《基于VHDL的數(shù)字鐘設(shè)計.doc》由會員分享,可在線閱讀,更多相關(guān)《基于VHDL的數(shù)字鐘設(shè)計.doc(18頁珍藏版)》請在裝配圖網(wǎng)上搜索。
安徽工業(yè)經(jīng)濟職業(yè)技術(shù)學(xué)院 畢業(yè)論文(設(shè)計) 題 目: 基于VHDL的數(shù)字鐘設(shè)計 系 別: 電子信息技術(shù)系 專 業(yè): 電子信息工程技術(shù) 學(xué) 號: 201254427 學(xué)生姓名: 王翀 指導(dǎo)教師: 王俊 職 稱: 二〇一四年 五月 月 十三 日 【摘要】 20世紀(jì)90年代,國際上電子和計算機技術(shù)較為先進的國家,一直在積極探索新的電子電路設(shè)計方法,并在設(shè)計方法、工具等方面進行了徹底的變革,取得了巨大成功。在電子技術(shù)設(shè)計領(lǐng)域,可編程邏輯器件(如CPLD、FPGA)的應(yīng)用,已得到廣泛的普及,這些器件為數(shù)字系統(tǒng)的設(shè)計帶來了極大的靈活性。 EDA技術(shù)在電子系統(tǒng)設(shè)計領(lǐng)域越來越普及,本設(shè)計主要利用VHDL語言在EDA平臺上設(shè)計一個電子數(shù)字鐘, 【關(guān)鍵詞】 數(shù)字鐘 EDA VHDL語言 目錄 摘要:......................................................................................................................... 1 關(guān)鍵詞:………………........................................................................................... 1 緒論………………………………………………………………………………....3 1.設(shè)計目的 .............................................................................................................. 4 2.設(shè)計內(nèi)容 ...............................................................................................................4 3.設(shè)計原理 ...............................................................................................................4 3.1數(shù)字鐘的基本工作原理…………………………………………….….………4 3.2數(shù)字鐘設(shè)計的電路原理圖……………………………..………………………6. 4.單元模塊的設(shè)計………………………………………………………………….6 4.1秒計數(shù)器的模塊………………………………………………………….……..6 4.2分計數(shù)器的模塊…………………………..…………………………….............8 4.3時計數(shù)器的模塊……………………………………..……………………...…10 4.4整點報時器模塊…………………………………………………………….....12 4.5調(diào)時調(diào)分模塊………………………..………………………………….……..13 4.6 LED顯示譯碼器模塊…………………………………………..………..…..15 5.仿真結(jié)果………………………………………………………………………..17. 結(jié)語......................................................................................................................... 17 參考文獻 ............................................................................................................... 18 緒論 EDA是電子設(shè)計自動化(Elcctronic Design Automation)的縮寫,是90年代初從CAD(計算機輔助設(shè)備),CAM(計算機輔助制造),CAT(計算機輔助測試)和CAE(計算機輔助工程)的概念發(fā)展而來的。EDA技術(shù)是以計算機為工具,根據(jù)硬件描述語言HDL完成的設(shè)計文件,自動的完成邏輯編譯,化簡,分割,綜合及優(yōu)化,布局布線,仿真以及對特定目標(biāo)芯片的適配編譯和編程下載等工作,這種將設(shè)計實體內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計的基本點。應(yīng)用VHDL進行工程設(shè)計的優(yōu)點是多方面的。其優(yōu)點是:與其它硬件描述語言相比,VHDL具有更強的行為描述能力,從而解決了他成為系統(tǒng)設(shè)計領(lǐng)域最佳的硬件描述語言,強大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計大規(guī)模電子系統(tǒng)的重要保證;VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計早期就能查驗設(shè)計系統(tǒng)的功能和可行性,及時可對設(shè)計進行。 它的計時周期為24小時,顯示滿刻度為24時59分59秒,另外還具有校時功能和鬧鐘功能??偟某绦蛴蓭讉€各具不同功能的單元模塊程序拼接而成, 其中包括分頻程序模塊、時分秒計數(shù)和設(shè)置程序模塊、比較器程序模塊、三輸入數(shù)據(jù)選擇器程序模塊、譯碼顯示程序模塊和拼接程序模塊。 并且使用QUARTUS II軟件進行電路波形仿真,下載到EDA實驗箱進行驗證。 1.設(shè)計目的 1)熟練地運用數(shù)字系統(tǒng)的設(shè)計方法進行數(shù)字系統(tǒng)設(shè)計; 2)能進行較復(fù)雜的數(shù)字系統(tǒng)設(shè)計; 3)按要求設(shè)計一個數(shù)字鐘。 2.設(shè)計內(nèi)容 1)要求顯示秒、分、時,顯示格式如下: 圖顯示格式 2)可清零、可調(diào)時,具有整點報時功能。 3.設(shè)計原理 3.1數(shù)字鐘的基本工作原理: 數(shù)字鐘以其顯示時間的直觀性、走時準(zhǔn)確性作為一種計時工具,數(shù)字鐘的基本組成部分離不開計數(shù)器, 在控制邏輯電路的控制下完成預(yù)定的各項功能。數(shù)字鐘的基本原理方框圖: 數(shù)字鐘實現(xiàn)原理框圖 1)時鐘計數(shù):完成時、分、秒的正確計時并且顯示所計的數(shù)字;對秒、分 ——60進制計數(shù),即從0到59循環(huán)計數(shù),時鐘——24進制計數(shù),即從0到23循環(huán)計數(shù),并且在數(shù)碼管上顯示數(shù)值。 2)時間設(shè)置:手動調(diào)節(jié)分鐘、小時,可以對所設(shè)計的時鐘任意調(diào)時間,這樣使數(shù)字鐘真正具有使用功能。我們可以通過實驗板上的鍵7和鍵4進行任意的調(diào)整,因為我們用的時鐘信號均是1HZ的,所以每LED燈變化一次就來一個脈沖,即計數(shù)一次。 3)清零功能:reset為復(fù)位鍵,低電平時實現(xiàn)清零功能,高電平時正常計數(shù)??梢愿鶕?jù)我們自己任意時間的復(fù)位。 4)蜂鳴器在整點時有報時信號產(chǎn)生,蜂鳴器報警。產(chǎn)生“滴答.滴答”的報警聲音。 5)LED燈在時鐘顯示時有花樣顯示信號產(chǎn)生。即根據(jù)進位情況,LED不停的閃爍,從而產(chǎn)生“花樣”信號。 根據(jù)總體方框圖及各部分分配的功能可知,本系統(tǒng)可以由秒計數(shù)器、分鐘計數(shù)器、小時計數(shù)器、整點報時、分的調(diào)整以及小時的調(diào)整和一個頂層文件構(gòu)成。采用自頂向下的設(shè)計方法,子模塊利用VHDL語言設(shè)計,頂層文件用原理圖的設(shè)計方法。顯示:小時采用 數(shù)字時鐘 控制單元 時調(diào)整 分調(diào)整 使能端信號 CLK信號 時顯示 分顯示 秒顯示 24進制 60進制 60進制 LED顯示 整點報時 花樣顯示 24進制,而分鐘均是采用6進制和10進制的組合。 3.2數(shù)字鐘設(shè)計的電路原理圖 24進制數(shù)字鐘的電路圖 4.單元模塊的設(shè)計 4.1.秒計數(shù)器模塊 LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY second IS PORT( clk,reset,setmin:IN STD_LOGIC; enmin:OUT STD_LOGIC; daout:out std_logic_vector(6 downto 0)); END entity second; ARCHITECTURE fun OF second IS SIGNAL count:STD_LOGIC_VECTOR(6 downto 0); SIGNAL enmin_1,enmin_2:STD_LOGIC; ----enmin_1為59秒時的進位信號 BEGIN daout<=count; ----enmin_2由clk調(diào)制后的手動調(diào)分脈沖信號串 enmin_2<=(setmin and clk); -----setmin為手動調(diào)分控制信號,高電平有效 enmin<=(enmin_1 or enmin_2); ----enmin為向分進位信號 process(clk,reset,setmin) begin if(reset=0) then count<="0000000"; ----若reset為0,則異步清零 elsif(clkevent and clk=1)then ----否則,若clk上升沿到 if(count(3 downto 0)="1001")then ----若個位計時恰好到“1001”即9 if(count<16#60#)then ----又若count小于16#60#,即60H if(count="1011001")then ----又若已到59D enmin_1<=1;count<="0000000"; ----則置進位為1及count復(fù)0 else count<=count+7; ----未到59D,則加7,而+7=+1+6,則作“加6校正” end if; else ----若count不小于16#60#(即count等于或大于16#60#) count<="0000000"; ----count復(fù)0 end if; ----end if(count<16#60#) elsif(count<16#60#)then ----若個位計數(shù)未到“1001”則轉(zhuǎn)此句再判 count<=count+1; ----若count<16#60#則count加1 enmin_1<=0 after 100 ns; ----則沒有發(fā)生進位 else end if; end if; end process; end fun 編譯過程: 仿真圖如下: 4.2.分計數(shù)器模塊 LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY minute IS PORT( clk,clk1,reset,sethour:IN STD_LOGIC; enhour:OUT STD_LOGIC; daout:out std_logic_vector(6 downto 0)); END entity minute; ARCHITECTURE fun OF minute IS SIGNAL count:STD_LOGIC_VECTOR(6 downto 0); SIGNAL enhour_1,enhour_2:STD_LOGIC; BEGIN daout<=count; enhour_2<=(sethour and clk1); enhour<=(enhour_1 or enhour_2); process(clk,reset,sethour) begin if(reset=0)then count<="0000000"; ----若reset=0,則異步清零 elsif(clkevent and clk=1)then ----否則,若clk上升沿到 if(count(3 downto 0)="1001")then ----若個位計時恰好到“1001”即9 if(count<16#60#)then ----又若count小于16#60#,即60 if(count="1011001")then ----又若已到59D enhour_1<=1; ----則置進位為1 count<="0000000"; ----count復(fù)0 ELSE count<=count+7; ----若count未到59D,則加7,即作“加6校正” end if; ----使前面的16#60#的個位轉(zhuǎn)變?yōu)?421BCD的容量 else count<="0000000"; ----count復(fù)0(有此句,則對無效狀態(tài)電路可自啟動) end if; elsif(count<16#60#)then count<=count+1; ----若count<16#60#則count加1 enhour_1<=0after 100 ns; ----沒有發(fā)生進位 else count<="0000000"; ----否則,若count不小于16#60#count復(fù)0 end if; end if; end process; END fun; 編譯過程: 仿真圖如下: 4.3.時計數(shù)器模塊 LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY hour IS PORT( clk,reset:IN STD_LOGIC; daout:out std_logic_vector(5 downto 0)); END entity hour; ARCHITECTURE fun OF hour IS SIGNAL count:STD_LOGIC_VECTOR(5 downto 0); BEGIN daout<=count; process(clk,reset) begin if(reset=0)then count<="000000"; ----若reset=0,則異步清零 elsif(clkevent and clk=1)then ----否則,若clk上升沿到 if (count(3 downto 0)="1001")then ----若個位計時恰好到‘’1001‘’即9 if(count<=16#23#)then ----23進制 count<=count+7; ----若到23D則 else count<="000000"; ----復(fù)0 end if; elsif(count<16#23#)then ----若未到23D,則count進1 count<=count+1; else ----否則清零 count<="000000"; end if; end if; end process; END fun; 編譯過程: 仿真圖如下: 4.4.整點報時器模塊 LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY alert IS PORT( clk:IN STD_LOGIC; dain:IN STD_LOGIC_VECTOR (6 DOWNTO 0); speak:OUT STD_LOGIC; lamp:OUT STD_LOGIC_VECTOR (2 DOWNTO 0)); END alert; ARCHITECTURE fun OF alert IS signal coun:std_logic_vector (1 downto 0); signal count1:std_logic_vector (1 downto 0); BEGIN speaker:process(clk) begin speak<=count1(1); if(clkevent and clk=1)then if(dain="0000000")then if(count1>="10")then count1<="00"; ----count1為三進制加法計數(shù)器 else count1<=count1+1; end if; end if; end if; end process speaker; lamper:process(clk) begin if(rising_edge(clk))then if(coun<="10")then if(coun="00")then lamp<="001"; ----循環(huán)點亮三只燈 elsif(coun="01")then lamp<="010"; elsif(coun="10")then lamp<="100"; end if; coun<=coun+1; else coun<="00"; end if; end if; end process lamper; END fun; 編譯過程: 仿真圖如下: 4.5.調(diào)時調(diào)分模塊 LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; ENTITY seltime IS PORT( clk1,reset:IN STD_LOGIC; sec,min:IN STD_LOGIC_VECTOR(6 downto 0); hour:in std_logic_vector(5 downto 0); daout:OUT STD_LOGIC_vector(3 downto 0); dp:OUT std_LOGIC; sel:out std_logic_vector(2 downto 0)); END seltime; ARCHITECTURE fun OF seltime IS SIGNAL count:STD_LOGIC_vector(2 downto 0); BEGIN sel<=count; process(clk1,reset) begin if(reset=0)then count<="000"; elsif(clk1event and clk1=1)then if(count>="101")then count<="000"; else count<=count+1; end if; end if; case count is when"000"=>daout<=sec(3 downto 0);dp<=0; when"001"=>daout(3)<=0;daout(2 downto 0)<=sec(6 downto 4);dp<=0; when"010"=>daout<=min(3 downto 0);dp<=1; when"011"=>daout(3)<=0;daout(2 downto 0)<=min(6 downto 4);dp<=0; when"100"=>daout<=hour(3 downto 0);dp<=1; when others=>daout(3 downto 2)<="00"; daout(1 downto 0)<=hour(5 downto 4);dp<=0; end case; end process; end fun; 編譯過程: 仿真圖如下: 4.6.LED顯示譯碼器模塊 LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY deled IS PORT(num:IN std_logic_vector(3 downto 0); led:OUT std_logic_vector(6 downto 0)); end deled; ARCHITECTURE fun OF deled IS BEGIN led<="1111110"when num="0000"else "0110000"when num="0001"else "1101101"when num="0010"else "1111001"when num="0011"else "0110011"when num="0100"else "1011011"when num="0101"else "1011111"when num="0110"else "1110000"when num="0111"else "1111111"when num="1000"else "1111011"when num="1001"else "1110111"when num="1010"else "0011111"when num="1011"else "1001110"when num="1100"else "0111101"when num="1101"else "1001111"when num="1110"else "1000111"when num="1111"; END fun; 編譯過程: 仿真圖如下: 5.仿真結(jié)果 下圖是最后仿真的結(jié)果,但是總是無法選中芯片,都是000,得不到正確的結(jié)果??赡艿脑蚴荈PGA的時鐘輸出為20MHZ,經(jīng)過分頻器得到1KHZ和1HZ的頻率需要多次的計數(shù),由于計數(shù)值太大無法得到正確的仿真結(jié)果。 數(shù)字鐘仿真波形 6.結(jié)語 本次試驗的數(shù)字時鐘能只夠顯示時間,其它功能如鬧鈴、調(diào)時、分、秒都能在此基礎(chǔ)上進一步的實現(xiàn),由于時間有限只能調(diào)試到這里。 經(jīng)過努力,簡易電子時鐘的設(shè)計基本上算是完成了,在整個設(shè)計中,我最大的體會就是:難!我們在本次的課程設(shè)計中,發(fā)現(xiàn)了很多問題,同時做起來也很難不順手,看著簡單的電路,要動手把它設(shè)計出來實非易事,主要原因是我們沒有經(jīng)常動手設(shè)計電路,這就要求我們在以后的學(xué)習(xí)中,應(yīng)該注意到這一點,更重要的是我們要學(xué)會把從書本上學(xué)到的知識和實際電路聯(lián)系起來,這不論對我們以后的學(xué)習(xí)還是就業(yè),都會起到很大的促進和幫助,我相信,通過這次的課程設(shè)計,在下一階段的學(xué)習(xí)中我們會更加努力,力爭把這門課學(xué)好學(xué)精。 同時通過本次課程設(shè)計,鞏固了我們以前學(xué)過的專業(yè)知識,通過這次的程序設(shè)計,使我們對數(shù)字系統(tǒng)結(jié)構(gòu)也有了更進一步的了解與認(rèn)識,同時對數(shù)據(jù)庫軟件EDA技術(shù),VHDL語言等系列知識都有了一定的了解與認(rèn)識。使用EDA技術(shù)開發(fā)頁面的能力也有了提高,也使我們把理論與實踐從正真意義上結(jié)合了起來,考驗了我們的動手能力,查閱相關(guān)資料的能力,還有組織材料的能力。通過此次實踐,我們從中可以找出自己知識的不足與欠缺,以便我們在日后的學(xué)習(xí)中得以改進與提高。 經(jīng)過本次設(shè)計使我們對所學(xué)習(xí)到的知識得以進一步實踐,這將對我們走出校園走向社會走向工作崗位奠定堅實的基礎(chǔ)。 最后感謝老師對我們的指導(dǎo),以及同學(xué)們對我的幫助,使得實驗?zāi)軌蝽樌瓿桑? 參考文獻 [1]潘松,黃繼業(yè).VHDL設(shè)計初步 [J].EDA技術(shù)實用教材,2009,5-29:70-82. [2]華成英,童詩白.集成運算放大電路[J].模擬電子基礎(chǔ),2006,5-4:185-187. [3]閻石.時序邏輯電路 [M].北京:高等教育出版社,2008. [4]李建東,郭梯云,鄔國揚.移動通信.第四版.[M].西安:西安電子科技大學(xué)出版社,2006. [5]沈明山編著,EDA技術(shù)及可編程器件應(yīng)用實訓(xùn) 北京:科學(xué)出版社 [6]崔建明主編,電工電子EDA仿真技術(shù) 北京:高等教育出版社,2004- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 基于 VHDL 數(shù)字 設(shè)計
鏈接地址:http://zhongcaozhi.com.cn/p-6704885.html