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

下載本文檔

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

文檔簡介

1、. 課程設計報告設計題目:基于FPGA的數(shù)字鐘設計班級:電子信息工程1301*:20133638:王一丁指導教師:世平設計時間:2016年1月摘要 EDAElectronic Design Automation電子設計自動化,是以大規(guī)??删幊唐骷樵O計載體,以硬件描述語言為系統(tǒng)邏輯描述的主要表達方式,通過相關的軟件,自動完成軟件方式設計得電子系統(tǒng)到硬件系統(tǒng),最終形成集成電子系統(tǒng)或專用集成芯片。本次課程設計利用Quartus II 為設計軟件,VHDL為硬件描述語言,結合所學知識設計一個多功能時鐘,具有顯示年、月、日、時、分、秒顯示,計時,整點報時,設定時間等功能。利用硬件描述語言VHDL 對設

2、計系統(tǒng)的各個子模塊進展邏輯描述,采用模塊化的思想完成頂層模塊的設計,通過軟件編譯、邏輯化簡、邏輯綜合優(yōu)化、邏輯仿真、最終完本錢次課程設計的任務。關鍵詞:EDA VHDL語言數(shù)字鐘目錄摘要1 課程設計目的2 課程設計容及要求 2.1 設計任務2.2 設計要求3 VHDL程序設計3.1方案論證3.2 系統(tǒng)構造框圖3.3設計思路與方法 3.3.1 狀態(tài)控制模塊 3.3.2 時分秒模塊 3.3.3 年月日模塊 3.3.4 顯示模塊脈沖產生模塊 3.3.6 揚聲器與鬧鐘模塊3.4 RTL整體電路 4 系統(tǒng)仿真與分析 5 課程設計總結,包括.收獲、體會和建議 6 參考文獻1 課程設計目的(1)通過設計數(shù)字

3、鐘熟練掌握EDA軟件(QUARTUS II)的使用方法,熟練進展設計、編譯,為以后實際工程問題打下設計根底。 (2)熟悉VHDL 硬件描述語言,提升分析、尋找和排除電子設計中常見故障的能力。 (3)通過課程設計,鍛煉書寫有理論根據(jù)的、實事的、文理通順的課程設計報告。2 課程設計容及要求 2.1 設計任務 (1)6個數(shù)字顯示器顯示時分秒,setpin按鍵產生一個脈沖,顯示切換為年月日。 (2)第二個脈沖可預置年份,第三個脈沖可以預置月份,依次第四、五、六、七個脈沖到來時分別可以預置時期、時、分、秒,第八個脈沖到來后預置完畢正常從左顯示時分秒。 (3)up為高時,upclk有脈沖到達時,預置位加一

4、,否則減一。 2.2 設計要求 (1)在根本功能的根底上,鬧鐘在整點進展報時,產生一定時長的高電平。 (2)實現(xiàn)鬧鐘功能,可對鬧鐘時間進展預置,當?shù)竭_預置時間時進展報時。3 VHDL程序設計 3.1方案論證該數(shù)字鐘可以實現(xiàn):計時功能、整點報時、鬧鐘和預置時間功能,因此時鐘系統(tǒng)可分為5個模塊:功能選擇模塊、時分秒計數(shù)模塊、年月日計數(shù)模塊、顯示模塊、揚聲器模塊、脈沖產生模塊。功能選擇模塊是有狀態(tài)機構成的,功能為依次進展、設置時間、設置鬧鐘時間。調整工作狀態(tài):數(shù)字鐘的初始狀態(tài)顯示時分秒,在setpin按鍵產生一個脈沖,顯示切換為年月日。設置時間:第二個脈沖可預置年份,第三個脈沖可以預置月份,依次第四

5、、五、六、七個脈沖到來時分別可以預置時期、時、分、秒。第八個脈沖到來后,預置完畢恢復初始狀態(tài),正常顯示時分秒。設置鬧鐘時間:鬧鐘在setpin1按鍵產生第一個脈沖時設定鬧鐘的時,第二個脈沖設定分,第三個脈沖設定秒,第四個脈沖恢復顯示時分秒。(2)時分秒計數(shù)模塊包括正常計時、鬧鐘、整點報時三個功能。正常計時功能通過軟件編寫,60進制的秒計數(shù)器,60進制的分計數(shù)器,24進制的時計數(shù)器。時分秒的計數(shù)器具有清0、置數(shù)、進位和計數(shù)功能。其中reset為清0信號,當reset為0時,時分秒的計數(shù)器清0。當set產生第四個脈沖后,連續(xù)產生的set信號使分秒計數(shù)器依次進展置數(shù)。以upclk為時鐘,通過up對預

6、置位進展控制,當up為高時且upclk有脈沖到來時,預置位加一,否則減一。當set產生第八個脈沖時,數(shù)字鐘恢復時分秒的顯示。鬧鐘功能是在正常計數(shù)功能上拓展,分為鬧鐘時間預置和鬧鐘響應兩個局部。鬧鐘時間預置功能:當set1連續(xù)產生脈沖時,依次對鬧鐘的時分秒位進展預置。以upclk為時鐘,通過up對預置位進展控制,當up為高時且upclk有脈沖到來時,預置位加一,否則減一。當set1產生第四個脈沖時,數(shù)字鐘恢復時分秒的顯示。與此同時在程序中增添變量時計時功能可以持續(xù)運行。鬧鐘響應功能:通過預置后,儲存的變量與計時器模塊的時、分、秒進展比對,當時、分、秒一樣時,模塊產生一個一段時間的高電平,傳輸給鬧

7、鐘響應模塊。整點報時功能:當計數(shù)器中的分位等于59,秒位等于59時,模塊產生一段高電平,輸出給揚聲器模塊進展報時。年月日計數(shù)模塊分為年月日計數(shù)功能,年月日預置數(shù)功能。年月日計數(shù)功能:以時位的進位脈沖為計時脈沖,閏年二月份為29天,普通年二月份為28天。一月、三月、五月、七月、八月、十月、十二月為31天,四月、六月、九月、十一月為30天。年月日預置數(shù)功能:當set產生第一個脈沖后,依次進展年月日數(shù)器置數(shù)。以upclk為時鐘,通過up對預置位進展控制,當up為高時且upclk有脈沖到來時,預置位加一,否則減一。(4) 顯示模塊:以時分秒,年月日模塊的輸出、狀態(tài)標志為輸入信號,通過狀態(tài)控制模塊產生的

8、狀態(tài)標志對顯示模塊進展控制,顯示計時、預置時的不同狀態(tài)。(5)揚聲器模塊:輸入信號為分位、秒位和狀態(tài)信號,當計時時鐘到達整點是輸出高電平,其他時刻輸出低電平。(6)脈沖產生模塊:對輸入的信號進展1000分頻,產生周期為一秒的時鐘信號,用于數(shù)字鐘的時鐘輸入。3.2系統(tǒng)構造框圖3.3設計思路與方法 3.3.1 狀態(tài)控制模塊狀態(tài)控制模塊實現(xiàn)對各個功能模塊的整體設計,包括對時間與日期的顯示與調整,鬧鐘的顯示與調整等控制操作。狀態(tài)機的輸入為setpin,setpin1,upclk。狀態(tài)機的狀態(tài)有11種狀態(tài)。:鬧鐘設置時位;:鬧鐘設置分位;:鬧鐘設置秒位;:時鐘顯示時分秒;:時鐘顯示年月日;:鐘設置年;:

9、時鐘設置月;:時鐘設置日;:時鐘設置時;:時鐘設置分;:設置秒在產生如上狀態(tài)的同時產生Tlock,flag狀態(tài)標志,此標志用來進展時鐘設置、鬧鐘設置與顯示控制。 RTL 電路圖實現(xiàn)代碼如下:process(upclk)begin if (upclk=1 and upclkLAST_VALUE=0)then state=ne*t_state; - 實現(xiàn)狀態(tài)變換end if;end process;process(state,setpin,setpin1)begin ne*t_stateTlock=0000;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)

10、then ne*t_state=g0; end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=0001;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=0010;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(s

11、etpin=1 and setpinLAST_VALUE=0) then ne*t_state Tlock=0011; flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=0100;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0

12、) thenne*t_state Tlock=0101; flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0) thenne*t_stateTlock=0110;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=0111;flag

13、=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if;if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=1000;flag=0; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g1;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=1001;flag=0; if(setpin1=1 and setpin1LAST_

14、VALUE=0)then ne*t_state=g2;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=1010;flag=0; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=s0;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_state ne*t_state=s0; end case; end process; 3.3.2 時分秒模塊時分秒模塊的輸入為ce(使能端),clk0(系統(tǒng)輸入時鐘),

15、clk1(upclk時鐘),flag(標志位),lock(狀態(tài)位),up(預置位增減控制),ov(進位位),op(鬧鐘與揚聲器響應)。時分秒模塊的RTL電路圖時鐘選擇方式:在初始狀態(tài)和顯示年月日的狀態(tài)下,時分秒模塊的時鐘輸入為系統(tǒng)時鐘輸入(clk0),在其他狀態(tài)下,時分秒模塊的時鐘輸入為(upclk時鐘)用來進展置位。實現(xiàn)代碼入下: process(lock,clk0,clk1) begin if(lock=0000 or lock=0001)thenclk=clk0; -正常計數(shù)時選擇clk0else clk=clk1; -預置的時候clk1end if;end process;時鐘計時功能

16、,在顯示年月日,時分秒的狀態(tài)時,時鐘正常計數(shù)。當數(shù)字鐘處于置數(shù)狀態(tài)時,年、月、日、時、分、秒時鐘停頓計時,各個位顯示預置數(shù)。在鬧鐘的預置功能實現(xiàn)的同時,通過增添變量,在設置鬧鐘的同時保證時鐘的正常計數(shù),在鬧鐘預置完畢后,恢復到初始的時鐘顯示。 3.2.3 年月日模塊年月日模塊分為日期增加和日期減小兩個局部,日期增加:在顯示時分秒,顯示年月日和設置完秒位的狀態(tài)下,如果是二月,通過函數(shù)判斷是否為閏年,其他月份對大小月進展判斷,大月為31天,小月為30天,代碼如下: if(clkevent and clk=1)then if(ce=1)then if(lock=0000)or(lock=0001)o

17、r(lock=0100and up=1)then if(mon0=0010and mon1=0000) then Feb_add_day(Td0,Td1,tempy0,tempy1,date0,date1); elsif(mon0=0001and mon0=0000)or(mon0=0011)or(mon0=0101) or(mon0=0111)or(mon0=1000)or(mon0=0000and mon1=0001)or(mon0=0010and mon1=0001)then oddmonth_add_day(Td0,Td1,date0,date1);else evenmonth_add

18、_day(Td0,Td1,date0,date1);end if;end if;日期減少同理,代碼如下:if(lock=0100and up=0)then if(mon0=0010and mon1=0000)then Feb_add_day(Td0,Td1,tempy0,tempy1,date0,date1);elsif(mon0=0001and mon1=0000)or(mon0=0011)or(mon0=0101) or(mon0=0111)or(mon0=1000)or(mon0=0000and mon1=0001) or(mon0=0010and mon1=0001)then oddm

19、onth_sub_day(Td0,Td1,date0,date1);else evenmonth_sub_day(Td0,Td1,date0,date1);END IF;end if;end if;end if;當以日位的進位為輸入,當存在輸入脈沖時,通過函數(shù)對月份進展加減,代碼如下: beginif(clkevent and clk=1)then if(ce=1)then if(lock=0000)or (lock=0001)or (lock=0011and up=1)then add_month(Tm0,Tm1,mon0,mon1); end if;if(lock=0011and up=0

20、)then sub_month(Tm0,Tm1,mon0,mon1); end if; if (lock=0000)or (lock=0001) then if(mon0=0010and mon1=0001)then sub_year(Ty0,Ty1,year0,year1); end if; end if;if(lock=0010and up=1)then add_year(Ty0,Ty1,year0,year1); end if;if(lock=0010and up=0)then sub_year(Ty0,Ty1,year0,year1); end if; end if; end if;

21、3.2.4 顯示模塊顯示模塊的輸入為年、月、日、時、分、秒、lock(狀態(tài)標志),通過if語句,狀態(tài)機一共提供11鐘狀態(tài)。在不同狀態(tài)下,給顯示模塊的年月日時分秒不同的輸入,從而得到要求的顯示。顯示電路的RTL電路代碼如下:process(lock,sec0,sec1,min1,min0,hour1,hour0,date0,date1,mon0,mon1,year0,year1)beginif(lock=0000)thena0=sec0;a1=sec1;b0=min0;b1=min1;c0=hour0;c1=hour1;end if;if(lock=0001)thena0=date0;a1=da

22、te1;b0=mon0;b1=mon1;c0=year0;c1=year1;end if;if(lock=0101)or(lock=1000)thena0=1111;a1=1111;b0=1111;b1=1111;c0=hour0;c1=hour1;end if;if(lock=0110)or(lock=1001)thena0=1111;a1=1111;b0=min0;b1=min1;c0=1111;c1=1111;end if;if(lock=0111)or(lock=1010)thena0=sec0;a1=sec1;b0=1111;b1=1111;c0=1111;c1=1111;end i

23、f;if(lock=0010)thena0=1111;a1=1111;b0=1111;b1=1111;c0=year0;c1=year1;end if;if(lock=0011)thena0=1111;a1=1111;b0=mon0;b1=mon1;c0=1111;c1=1111;end if;if(lock=0100)thena0=date0;a1=date1;b0=1111;b1=1111;c0=1111;c1=1111;end if;end process;end led_disp_arc;脈沖發(fā)生模塊分頻電路脈沖發(fā)生電路將提供的1000hz頻率分頻成1hz(供系統(tǒng)時鐘)。f1000為1

24、000hz輸入,second_wave為分頻輸出。分頻器的RTL電路代碼如下:process(f1000,t) begin if(f1000event and f1000=1)then if(t=00000011)thent=000000000;second_wave=not second_wave;elset=t+1;end if;end if;end process;end second_wave_arc;3.2.6 揚聲器模塊模塊的輸入為clk(系統(tǒng)時鐘),op(響應信號),vcc(鬧鐘使能端),ala(高電平輸出)。當vcc為高時,且當op有響應信號輸入(高),鬧鐘產生一定時長的高電平

25、。鬧鐘的RTL電路代碼如下:signal temp1:std_logic_vector(3 downto 0);beginprocess(op,vcc,clk) begin if clkevent and clk=1 then if(vcc=1)then if(temp1=1111)then ala=not ala;elsetemp1=temp1+1;ala=1;end if;end if;end if;end process; end alarm_arc;3.3整體RTL電路4 系統(tǒng)仿真與分析 4.1對根本要求的仿真初態(tài)設置:setpin1=0;up=0;setpin置連續(xù)8個脈沖,f100

26、0為頻率為1000hz的方波。分析:在setpin第一次脈沖到來時,顯示年月日,因為數(shù)字鐘是初始狀態(tài)所以年月日均為0。Setpin。第二次脈沖到來時對時進展預置數(shù),因為up=0,所以設置時位,時位在不斷地減小,在后面各位預置的過程中,每一位的預置過程都是減小。第三次脈沖來到是對分位進展預置,第四次脈沖到來時對秒位進展預置。第四次脈沖到來時對年進展預置,第五次脈沖到來時對月進展預置,第六次脈沖到來時對日進展預置。第七次脈沖到來時,數(shù)字鐘顯示時分秒,從仿真結果可以看出來,此時時鐘是從預置的時間開場計時的,第八次脈沖到來時,此時時鐘顯示的是年月日,此時顯示的年月日為預置的年月日。從上述分析可以看出,經過仿真的程序根本到達數(shù)字鐘的根本要求,系統(tǒng)可靠。 4.2對鬧鐘狀態(tài)轉換的仿真初始設置:初態(tài)設置:setpin1設計一個脈沖;up=0;setpin置連續(xù)2個脈沖,f1000為頻率為1000hz的方波。當?shù)谝粋€setpin脈沖到來時,顯示年月日,第二個setpin脈沖降臨時時鐘對年進展預置,此后setpin1的第一個脈沖到來,時鐘的狀態(tài)轉為對鬧鐘時間的設置,到達實驗要求。4.3對鬧鐘功能的仿真初始設置:初態(tài)設置:setpin1設計三個脈沖;up=0;f1000為頻率為100

溫馨提示

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

評論

0/150

提交評論