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

下載本文檔

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

文檔簡介

1、基于FPGA的數(shù)字時鐘的設計課 題: 基于FPGA的數(shù)字時鐘的設計 學 院: 電氣信息工程學院 專 業(yè) : 測量控制與儀器 班 級 : 08測控(2)班 姓 名 : 潘 志 東 學 號 : 08314239 合作者姓名: 顏志林 2010 年 12 月 12 日綜述近年來隨著數(shù)字技術(shù)的迅速發(fā)展,各種中、大規(guī)模集成電路在數(shù)字系統(tǒng)、控制系統(tǒng)、信號處理等方面都得到了廣泛的應用。這就迫切要求理工科大學生熟悉和掌握常用中、大規(guī)模集成電路功能及其在實際中的應用方法,除通過實驗教學培養(yǎng)數(shù)字電路的基本實驗方法、分析問題和故障檢查方法以及雙蹤示波器等常用儀器使用方法等基本電路的基本實驗技能外,還必須培養(yǎng)大學生工

2、程設計和組織實驗能力。本次課程設計的目的在于培養(yǎng)學生對基本電路的應用和掌握,使學生在實驗原理的指導下,初步具備基本電路的分析和設計能力,并掌握其應用方法;自行擬定實驗步驟,檢查和排除故障 、分析和處理實驗結(jié)果及撰寫實驗報告的能力。綜合實驗的設計目的是培養(yǎng)學生初步掌握小型數(shù)字系統(tǒng)的設計能力,包括選擇設計方案,進行電路設計、安裝、調(diào)試等環(huán)節(jié),運用所學知識進行工程設計、提高實驗技能的實踐。數(shù)字電子鐘是一種計時裝置,它具有時、分、秒計時功能和顯示時間功能;具有整點報時功能。本次設計我查閱了大量的文獻資料,學到了很多關(guān)于數(shù)字電路方面的知識,并且更加鞏固和掌握了課堂上所學的課本知識,使自己對數(shù)字電子技術(shù)有

3、了更進一步的認識和了解。1、 課題要求1.1課程設計的性質(zhì)與任務本課程是電子與信息類專業(yè)的專業(yè)的專業(yè)基礎必修課“數(shù)字電路”的配套實驗課程。目的在于培養(yǎng)學生的理論聯(lián)系實際,分析和解決問題的能力。通過本課程設計,使學生在理論設計、計算機仿真、指標調(diào)測、故障排除等方面得到進一步的訓練,加強學生的實踐能力。學生通過設計、仿真、調(diào)試、撰寫設計報告等過程,培養(yǎng)學生的動手能力和嚴謹?shù)墓ぷ髯黠L。1.2課程設計的基本技術(shù)要求1)根據(jù)課題要求,復習鞏固數(shù)字電路有關(guān)專業(yè)基礎知識;2)掌握數(shù)字電路的設計方法,特別是熟悉模塊化的設計思想;3) 掌握QUARTUS-2軟件的使用方法;4) 熟練掌握EDA工具的使用,特別是

4、原理圖輸入,波形仿真,能對仿真波形進行分析;5) 具備EDA技術(shù)基礎,能夠熟練使用VHDL語言進行編程,掌握層次化設計方法;6) 掌握多功能數(shù)字鐘的工作原理,學會不同進制計數(shù)器及時鐘控制電路的設計方法;7) 能根據(jù)設計要求對設計電路進行仿真和測試;8) 掌握將所設計軟件下載到FPGA芯片的下載步驟等等。9) 將硬件與軟件連接起來,調(diào)試電路的功能。1.3課程設計的功能要求基本功能:能進行正常的時、分、秒計時功能,分別由6個數(shù)碼管顯示24小時,60分鐘,60秒鐘的計數(shù)器顯示。附加功能:1)能利用硬件部分按鍵實現(xiàn)“校時”“校分”“清零”功能; 2)能利用蜂鳴器做整點報時:當計時到達5959時開始報時

5、,鳴叫時間1秒鐘; 3)定時鬧鈴:本設計中設置的是在七點時進行鬧鐘功能,鳴叫過程中,能夠進行中斷鬧鈴工作。本人工作:負責軟件的編程與波形的仿真分析。2、 方案設計與分析1.1設計方案 1、時鐘功能,具有顯示時、分、秒的功能; 2、具有整點報時功能,在整點時使用蜂鳴器進行報時,具有鬧鐘功能,鳴叫過程中,具有中斷鬧鈴功能。1.2設計要點數(shù)字鐘一般是由振蕩器、分頻器、計數(shù)器、譯碼器、顯示器等幾部分組成。這些都是數(shù)字電路中應用最廣泛的基本電路,本設計分模塊設計實現(xiàn)各部分功能,采用軟件編程控制FPGA芯片內(nèi)部產(chǎn)生振動周期為1s的脈沖。并將信號送入計數(shù)器進行計算,并把累加的結(jié)果以“時”、“分”、“秒”的數(shù)

6、字顯示出來?!懊搿钡娘@示由兩級計數(shù)器和譯碼器組成的六十進制計數(shù)電路實現(xiàn);“分”的顯示電路“秒”相同,“時”的顯示由兩級計數(shù)器和譯碼器組成的二十四進制電路來實現(xiàn)。所有計時結(jié)果由六位數(shù)碼管顯示。1.3工作原理數(shù)字電子鐘由振蕩器、分頻器 計數(shù)器、譯碼顯示、報時等電路組成。振蕩器產(chǎn)生穩(wěn)定的高頻脈沖信號,作為數(shù)字鐘的時間基準,然后經(jīng)過分頻器輸出標準秒脈沖。秒計數(shù)器滿60后向分計數(shù)器進位,分計數(shù)器滿60后向小時計數(shù)器進位,小時計數(shù)器按照“24翻1”規(guī)律計數(shù)。計滿后各計數(shù)器清零,重新計數(shù)。計數(shù)器的輸出分別經(jīng)譯碼器送數(shù)碼管顯示,計時出現(xiàn)誤差時,可以用校時電路“校時”“校分”“清零”。秒脈沖可以通過分頻電路得到

7、。通過報時設計模塊可以實現(xiàn)整點報時及定時鬧鈴,譯碼顯示由七段譯碼器完成,顯示由數(shù)碼管構(gòu)成,采用的是動態(tài)顯示方式。數(shù)碼管動態(tài)顯示:動態(tài)掃描電路將計數(shù)器輸出的8421BGD碼轉(zhuǎn)換為數(shù)碼管需要的邏輯狀態(tài),并且輸出數(shù)碼管的片選信號和為選信號。所謂動態(tài)掃描顯示方式是在顯示某一位LED顯示塊的數(shù)據(jù)的時候,讓其它位不顯示,然后再顯示下一位的數(shù)據(jù)。只要保證每一位顯示的時間間隔不要太大,利用人眼的視覺暫留的現(xiàn)象,就可以造成各位數(shù)據(jù)同時顯示的假象。一般每一位的顯示時間為110ms。3、 單元電路的設計,仿真與分析(1)分頻模塊(fenpin)1)程序:library ieee;use ieee.std_logic

8、_1164.all;entity fenpin is port(clk6:in std_logic; q1000,q5,q1:out std_logic);end fenpin;architecture ccc_arc of fenpin issignal x:std_logic;begin process(clk6) variable cnt:integer range 0 to 24999; begin if clk6event and clk6=1 then if cnt24999 then cnt:=cnt+1; else cnt:=0; x=not x; end if; end if

9、;end process;q1000=x;process(x)variable cnt2:integer range 0 to 999;variable y:std_logic;begin if xevent and x=1 then if cnt2999 then cnt2:=cnt2+1; q1=0; else cnt2:=0; q1=1; end if; end if;if xevent and x=1 theny:=not y;end if;q5=y;end process;end ccc_arc;2)仿真波形:3) 仿真結(jié)果分析:產(chǎn)生用于計時,掃描輸入,掃描顯示,以及蜂鳴器所需的各個

10、頻率的信號。(2)秒模塊(second)1)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second is port (clk1,en1:in std_logic; qa:out std_logic_vector(3 downto 0); co1:out std_logic; qb:out std_logic_vector(3 downto 0);end second;architecture cc of second issignal cout2,cout1:std_lo

11、gic_vector(3 downto 0);signal mm: std_logic;beginprocess(clk1,en1)beginif en1=1 thencout2=0000;cout1=0000;elsif (clk1event and clk1=1)thenif (cout2=1 and cout1=8) then cout2=cout2;cout1=cout1+1;mm=1;elsif (cout2=1 and cout1=9) then cout2=0000;cout1=0000;mm=0;else if (cout1=9) then cout2=cout2+1;cout

12、1=0000;mm=0; else cout2=cout2;cout1=cout1+1;mm=0; end if;end if; end if;end process;co1=mm;qa=cout2;qb=cout1;end cc;2)仿真波形:3) 仿真結(jié)果分析:該模塊實際是一個六十進制計數(shù)器,而六十秒為一分鐘,故用此模塊可以作為秒部分設計,通過觀察可知,仿真波形是正確可行的。(3)分模塊(minute)1)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute is

13、port (clk2,en2:in std_logic; qc:out std_logic_vector(3 downto 0); co2:out std_logic; qd:out std_logic_vector(3 downto 0);end minute;architecture bb of minute issignal cout2,cout1:std_logic_vector(3 downto 0);signal cc:std_logic;beginprocess(clk2,en2)beginif en2=1 thenif (clk2event and clk2=1)thenif

14、(cout2=1 and cout1=8) then cout2=cout2;cout1=cout1+1;cc=1;elsif (cout2=1 and cout1=9) then cout2=0000;cout1=0000;cc=0;else if (cout1=9) then cout2=cout2+1;cout1=0000;cc=0; else cout2=cout2;cout1=cout1+1;cc=0; end if;end if;end if; end if;end process;co2=cc;qc=cout2;qd=cout1;end bb2)仿真波形:3) 仿真結(jié)果分析:此模

15、塊實際也是一個六十進制的計數(shù)器模塊,六十分鐘即為一個小時,用此模塊就成功解決了分設計模塊這個難題。從仿真波形可知,該設計時正確的。(4)時模塊(hour)1)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour is port (clk3,en3:in std_logic; qe:out std_logic_vector(3 downto 0); qf:out std_logic_vector(3 downto 0);end hour;architecture aa of

16、hour issignal cout2,cout1:std_logic_vector(3 downto 0);beginprocess(clk3,en3)beginif en3=1 thenif (clk3event and clk3=1)thenif (cout2=4 and cout1=0) then cout2=0000;cout1=0000;else if (cout1=9) then cout2=cout2+1;cout1=0000; else cout2=cout2;cout1=cout1+1; end if;end if;end if; end if;end process;qe

17、=cout2;qf=cout1;end aa;2)仿真波形:3) 仿真結(jié)果分析:這是一個24計數(shù)器,用來表示24小時,通過波形可知,程序設計正確,正常計時是每次清零后從00:00:00開始計時的,若要從預置時間開始,可以通過“校時”“校分”“清零”三個按鍵調(diào)整時間。(5)數(shù)碼顯示驅(qū)動模塊1)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hhh isport(n1,n2,n3,n4,n5,n6:in std_logic_vector(3 downto 0); a:in std_

18、logic_vector(2 downto 0); qqq:out std_logic_vector(3 downto 0);end hhh;architecture dd of hhh is begin with a selectqqq=n1 when 000, n2 when 001, n3 when 010, n4 when 011, n5 when 100, n6 when 101, 0000 when others;end dd;2)仿真波形:3) 仿真結(jié)果分析:其實這是一個選擇器,從波形圖可以很容易看出來。它是用來選擇需要顯示的數(shù)字,比如秒的十位,就會選擇n1到譯碼顯示器顯示出來,

19、具備驅(qū)動數(shù)碼管的作用!(6)片選模塊(sell)1)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ggg isport(m:in std_logic_vector(2 downto 0); b:out std_logic_vector(5 downto 0); end ggg;architecture ee of ggg is begin with m selectb=100000 when 000, 010000 when 001, 001000 when 010, 000

20、100 when 011, 000010 when 100, 000001 when 101, 000000 when others;end ee;2)仿真波形:3) 仿真結(jié)果分析:設置時間時將所需的數(shù)據(jù)傳給顯示模塊,當設置鬧鈴時將數(shù)據(jù)傳給鬧鐘和顯示模塊。 (7)譯碼顯示模塊(display)1)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder isport(x:in std_logic_vector(3 downto 0); y:out std_logic_ve

21、ctor(6 downto 0); end decoder;architecture one of decoder is begin with x selecty=1111110 when 0000, 0110000 when 0001, 1101101 when 0010, 1111001 when 0011, 0110011 when 0100, 1011011 when 0101, 1011111 when 0110, 1110000 when 0111, 1111111 when 1000, 1111011 when 1001, 0000000 when others;end one;

22、2)仿真波形:3) 仿真結(jié)果分析:此模塊是用來顯示時間的,采用動態(tài)顯示方式。(8)報時模塊(alart)1) 程序:library ieee;use ieee.std_logic_1164.all;entity sst isport(h1,h0,m1,m0,s1,s0:in std_logic_vector(3 downto 0);clk4:in std_logic;q500:out std_logic);end sst;architecture sss of sst isbegin process(clk4,m1,m0,s1,s0)beginif (clk4event and clk4=1)

23、 then if (h1=0000 and h0=0111 and m1=0000 and m0=0000) or (m1=0101 and m0=1001 and s1=0101 and s0=1001)then q500=1; else q500=0;end if;end if;end process;end sss;2) 仿真波形:3) 仿真結(jié)果分析:通過觀察波形可知,當時鐘時間與整點或鬧鈴預設時間相同時,給出一個脈沖信號,使蜂鳴器鳴叫,實現(xiàn)整點報時和定時鬧鈴功能。(9)六進制計數(shù)器模塊(cnt6)1)程序:library ieee;use ieee.std_logic_1164.all

24、;use ieee.std_logic_unsigned.all;entity cnt6 is port (clk5:in std_logic; n:out std_logic_vector(2 downto 0);end cnt6;architecture behav of cnt6 issignal q1:std_logic_vector(2 downto 0);beginprocess(clk5)beginif clk5event and clk5=1 then if q15 then q1=q1+1; else q10);end if;end if; end process;n=q1;

25、end behav;2)仿真波形:3) 仿真結(jié)果分析:很明顯可以看出這是一個簡單的六進制計數(shù)器。它與3-6譯碼器配合作用產(chǎn)生片選信號。(10)兩輸入與模塊(and2a)1)程序:library ieee;use ieee.std_logic_1164.all;entity anda isport (a1,b1:in std_logic; y:out std_logic);end anda;architecture an of anda isbeginy=a1 and b1;end an;2)仿真波形:3) 仿真結(jié)果分析:經(jīng)觀察波形,程序正確。該與門的兩個輸入端分別為秒模塊和分模塊的進位輸出信號

26、,當它們均為高電平時,時模塊使能端即為高電平,時模塊工作。(11)兩輸入或模塊(or2a)1)程序:library ieee;use ieee.std_logic_1164.all;entity or_1 isport (a1,b1:in std_logic; y:out std_logic);end or_1;architecture oo of or_1 isbeginyclk,q1=h,q1000=z);u2:second port map(clk1=h,en1=sc,qa=k,qb=l,co1=I);u0:or_1 port map(a1=i,b1=sb,y=a);u3:minute

27、port map(clk2=h,en2=a,qc=e,qd=f,co2=j);u30:anda port map(a1=i,b1=j,y=b);u31:or_1 port map(a1=b,b1=sa,y=c);u4:hour port map(clk3=h,en3=c,qe=u,qf=v);u5:sst port map(h1=u,h0=v,m1=e,m0=f,s1=k,s0=l,clk4=h,q500=q1);u6:hhh port map(n1=k,n2=l,n3=e,n4=f,n5=u,n6=v,qqq=t,a=s);u7:ggg port map(b=r,m=s);u8:cnt6 p

28、ort map(n=s,clk5=z);u9:decoder port map(x=t,y=q0);end architecture main;2) 仿真波形:3)仿真結(jié)果分析:本次試驗給出的頻率是50MHZ,用QUARTUS-2軟件把數(shù)字鐘的全部工作過程記錄下來不容易,故這幅圖只是其工作的一小部分。將程序下載到FPGA芯片中,并與硬件部分對應連接好,可以驗證到我們所預期的所有功能,故可知該頂層文件是正確的,每一個模塊的功能也都是正確的,模塊之間的連接也都是正確的。在軟件調(diào)試仿真過程中,我們以參考資料上的程序為模板,依據(jù)個人的需要添加修改各個功能模塊,盡管有模板作為參考,仿真過程中還是出了很多

29、的問題,例如在做數(shù)碼管動態(tài)顯示中,我們采用了NPN型9013晶體三極管作為數(shù)碼管的接地驅(qū)動,這里的片選信號應該是高電平有效,我們原程序是低電平,經(jīng)過多次的和其他組的學習交流中,找到了這個錯誤。解決分頻問題中,我們也在分頻模塊中做了修改,得到我們所需要的頻率。5、 硬件電路設計與安裝電路(1) 按照電路功能設計好硬件部分安裝圖(電路安裝圖詳見末頁圖b);(2) 焊接前應先排好線,再焊接電路,注意不能飛線,可正反穿線焊接;(3) 焊接過程中注意各引腳的功能,不能接錯;(4) 焊接完后需要仔細檢查后方能通電,電源電壓為5V。所需元器件清單元器件規(guī)格數(shù)量元器件規(guī)格數(shù)量電阻1K11開關(guān)單刀雙置4電阻20

30、018杜邦線若干三極管90136插針50數(shù)碼管共陰6導線若干萬能板1蜂鳴器16、 硬件電路安裝與調(diào)試1)借助杜邦線將芯片與所焊接硬件電路根據(jù)之前鎖定好的引腳一 一連接好,在本設計中,各引腳鎖定情況是:clk:17,q00q06 分別對應芯片引腳:65,63,59,57,53,51,47 ;r0r5分別對應芯片引腳:42,40,31,28,26,24,;sa,sb,sc分別對應芯片引腳: 80,86,92; q1對應芯片引腳: 44,q00 q06對應數(shù)碼管的a,b,c,d,e,f,g;r指片選信號的六個輸出;sa、sb、sc對應校時電路的“校時”“校分”“清零”三個按鍵;q1指報時電路輸出,當其為高電平時,蜂鳴器鳴叫;增加一個插針用來與蜂鳴器相連,用來實現(xiàn)中斷鬧鈴的功能。2)硬件與軟件兩部分正確連接之后,接上5伏的電源,仔細觀看數(shù)碼管的顯示情況,在驗證功能的過程中,并不是一帆風順的,經(jīng)過很多次的修改和改進,最后才獲得滿意的成果。7、 調(diào)試結(jié)果調(diào)試結(jié)果:芯片與硬件電路連接好通電后,六個數(shù)碼管可以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論