FPGA設計實踐課程設計報告自動打鈴系統(tǒng)設計_第1頁
FPGA設計實踐課程設計報告自動打鈴系統(tǒng)設計_第2頁
FPGA設計實踐課程設計報告自動打鈴系統(tǒng)設計_第3頁
FPGA設計實踐課程設計報告自動打鈴系統(tǒng)設計_第4頁
FPGA設計實踐課程設計報告自動打鈴系統(tǒng)設計_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 課程設計報告課程設計名稱: fpga設計實踐課程 設計課題名稱: 自動打鈴系統(tǒng)設計 班級: 指導老師: 姓名: 學號: 20072668 成績: 設計時間: 7,5-7,9 設計地點: 計算機信息與工程學院自動打鈴系統(tǒng)設計報告一、 設計目的:1 進一步熟悉fpga開發(fā)系統(tǒng)環(huán)境、c語言、調(diào)試方式。2 了解fpga中如何使用總線頻率制作時鐘。3 會使用各個模塊的拼接與聯(lián)系。二、 實驗器材和工具軟件: 1,alter de2實驗板。 2,quartus ii 實驗用程序。三、 設計內(nèi)容:1. 基本計時和現(xiàn)實功能(用12小時制顯示):包括上下午標志,時、分的數(shù)字顯示,秒信號顯示。2. 可以自由設置當

2、前時間(包含上、下午,時、分)。3. 可以實現(xiàn)基本的打鈴功能,規(guī)定: 上午06:00起床鈴,打鈴5s,停2s,再打鈴5s; 下午10:30熄燈鈴,打鈴5s,停2s,再打鈴5s。 鈴聲可以用led燈光顯示,如果實驗裝置沒有l(wèi)ed發(fā)光管,那么可以用七段顯示管的小數(shù)點顯示,也可以用顯示小時的十位數(shù)碼管的多余段顯示。凡是用到鈴聲功能的均可以如此處理。 4. 增加整點報時功能,整點時響鈴5s。要求有控制啟動和關閉功能。5. 增加調(diào)整起床鈴、熄燈鈴時間的功能。 6. 增加調(diào)整打鈴時間長短和間隙時間長短的功能。 7. 增設上午4節(jié)課的上、下課打鈴功能,規(guī)定: 7:30上課,8:20下課 8:30上課,9:2

3、0下課 9:40上課,10:30下課 10:40上課,11:30下課。 每次鈴響5s。四、 設計具體步驟:1,首先需要對整個系統(tǒng)做一個詳細的認識,fpga中是沒有定時器的所以我們需要通過計數(shù)器來達到計時的效果。為此,我們先從總線頻率那分頻得到50m分頻的頻率那么我們需要分頻器“clk_1_gen”。程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;entity clk_1_gen isport(clkin :in std_logic; clkout:out std_logic);end

4、 clk_1_gen;architecture behave_clk_div8 of clk_1_gen isconstant n: integer:=24999999;signal counter:integer range 0 to n; signal clk: std_logic;begin process(clkin) begin if rising_edge(clkin) then if counter=n then counter=0; clk=not clk; else counter= counter+1; end if; end if; end process; clkout

5、= clk; end behave_clk_div8; 2,在題目中我們看到這個程序的目的不光光是現(xiàn)實時間,同時也可以修改時間,同時具備鬧鈴、修改鬧鈴等功能。那么為了切換這些功能我們需要一個狀態(tài)機,為了輸出當前處于什么狀態(tài),同時有些什么操作。這個就是statemachine所要完成的任務。這里涉及兩大重要參數(shù),一個是“command”一個是“adjbotton和flash”前者是當前的狀態(tài)一共有五個,每一位象征著一個狀態(tài),而后者則是修改時間用的變化與位選。我們的目的是按一個按鍵那么狀態(tài)就改變,那么我們就可以把輸入變量的變化與輸出地變化相一致即可。module statemachine (clo

6、ck, changemode, adjposition, adjval, command, adjbotton, flash);input clock;input changemode;input adjposition;input adjval;output 4:0 command;reg4:0 command;output2:0 adjbotton;reg2:0 adjbotton; output2:0 flash;reg2:0 flash;parameter2:0 timer = 0;parameter2:0 adj_timer = 1;parameter2:0 adj_morningt

7、ime = 2;parameter2:0 adj_eveningtime= 3;parameter2:0 adj_ringlength = 4;parameter2:0 adj_12or24 = 5;reg2:0 state;reg1:0 pos;always (posedge clock) /mo kuai 1 gong neng shi tong guo changemode de an xia lai gai bian zhuang taibegincase (state) /case state timer : /timer 0 shi beginif (changemode = 1b

8、0) /beginstate = adj_timer ;endendadj_timer :beginif (changemode = 1b0)beginstate = adj_morningtime ;endendadj_morningtime :beginif (changemode = 1b0)beginstate = adj_eveningtime ;endendadj_eveningtime :beginif (changemode = 1b0)beginstate = adj_ringlength ;endendadj_ringlength :beginif (changemode

9、= 1b0)beginstate = adj_12or24 ;endendadj_12or24 :beginif (changemode = 1b0)beginstate = timer ;endenddefault :beginstate = timer ;endendcaseendalways (posedge clock) /mo kuai 2begincase (state)timer : /zheng chang ji shi shibegin / command = 5b00000 ; /shu chu command wei 00000pos = 0 ; /pos wei 0en

10、dadj_timer : /tiao zheng shi jian shibeginif (command = 5b00000) /ru guo dang qian wei zheng chang ji shi zhuang taibegin/command=5b00001;pos = 1 ; / pos wei 1endelsebegin /ru guo bu shi zheng chang ji shi zhuang taiif (adjposition = 1b0) /erqie ci shi adiposition wei 1beginif (pos = 3) /erqie pos w

11、ei 3beginpos = 1 ; /pos wei 1endelsebegin /pos bu wei3 de hua pos =pos +1pos = pos + 1 ;endendendcommand = 5b00001 ; /zuo wan shang mian zhi hou command wei 00001endadj_morningtime : /tiao zheng qi chuang shi jian zhuang taibeginif (command = 5b00001) /ruguo dang qian wei tiao zheng shi jian zhuang

12、taibeginpos = 1 ; /pos wei 1endelsebeginif (adjposition = 1b0) /fou zhe ru guo adjposition wei 1 beginif (pos = 1) /erqie pos wei 1beginpos = 2 ; /pos wei 2endelsebeginpos = 1 ; /fou ze pos bu wei 1 shi pos wei 1endendendcommand = 5b00010 ;/ zuo wan zhi hou command shu chu wei 00010 tiao zheng xi de

13、ng zhuang taiendadj_eveningtime :beginif (command = 5b00010) / tiao wan shang shi jian de zhuang tai dang command wei 00010 shibeginpos = 1 ; /pos wei 1endelsebeginif (adjposition = 1b0) /command bu wei 00010 shi adjposition wei 1 shibeginif (pos = 1) /ru guo pos wei 1beginpos = 2 ; /pos wei2endelse

14、beginpos = 1 ; /fou ze wei 1endendendcommand = 5b00100 ; /zhi hou command shu chu wei 00100endadj_ringlength : /tiao zheng xiang liang zhuang tai beginif (command = 5b00100) /ru guo command wei 00100beginpos = 1 ; /pos wei1endelsebeginif (adjposition = 1b0) /fou ze ru guo command bu shi 00100 qie ad

15、jposition wei 1beginif (pos = 1) /qie pos wei 1beginpos = 3 ; /pos wei 3endelsebeginpos = 1 ; /fou ze pos wei 1endendendcommand = 5b01000 ; /zui hou shu chu wei 01000endadj_12or24 : /ru guo dang qian zhuang tai weibeginpos = 2 ; /pos wei 2command = 5b10000 ; /command shu chu wei 10000enddefault :beg

16、inpos = 0 ; /fou ze zui hou pos wei 0command = 5b00000 ; /comman wei 00000endendcasecase (pos) /pos de case 0 :begin /pos wei 0 shiflash = 3b000 ; /flash wei 000adjbotton = 3b000 ; /adjbotton wei 000end1 : /pos wei 1beginflash = 3b100 ; /flash wei 100if (adjval = 1b0) /ru guo adjval wei 1beginadjbot

17、ton = 3b100 ; /adjbotton wei 100endelsebeginadjbotton = 3b000 ; /fou ze wei 000endend2 : /ru guo pos wei 2beginflash = 3b010 ; /flash wei 010if (adjval = 1b0) /ru guo adjval wei 1beginadjbotton = 3b010 ; /adjbotton wei 010endelsebeginadjbotton = 3b000 ; /fou ze wei 000endend3 :beginflash = 3b001 ; /

18、pos wei 3 shi flash wei 001if (adjval = 1b0) /ru guo adjvalbeginadjbotton = 3b001 ; /adjbotton wei 001endelsebeginadjbotton = 3b000 ; /fou ze wei 000endenddefault :beginflash = 3b000 ; /fou ze zui hou flash wei 000adjbotton = 3b000 ; /adjbotton wei 000endendcaseendendmodule3,接下來我們要做的是整個時間的一個程序“clock

19、”。這里對于時間的輸出我們可以把之前的分頻器的輸出作為輸入,同時計數(shù)器通過頻率來進行加一,那么通過到60進位的方法我們就可以做到秒到分的行為,以此類推,那么整個時鐘就完成了。這里要提到時鐘的修改,這里有三個輸入,分別是時分秒,相對于之前的adjbotton里的三個位,為了能在原理圖中連線,那么我們需要一個分線的程序“fenxian”,這里不僅包括了adjbotton這組線的分線,同時還有command這一祖線的分線,因為我們要區(qū)分哪些功能是現(xiàn)在需要的,那么我們就要取其中的高電平為當前模塊所需的使能,其余則被關閉。module clock (clock, en, adjusth, adjustm

20、, adjusts, adjustpm, second, minute, hour);input clock;input en;input adjusth;input adjustm;input adjusts;input adjustpm;output4:0 hour;reg4:0 hour;output5:0 minute;reg5:0 minute;output5:0 second;reg5:0 second;always (posedge clock)beginif (en = 1b1) begin if (adjustpm = 1b0) begin if (hour 12) begi

21、n hour = hour + 12 ; end else begin hour = hour - 12 ; end end else if (adjusth = 1b1) begin if (hour = 23) begin hour = 0 ; end else begin hour = hour + 1 ; end end else if (adjustm = 1b1) begin if (minute = 59) begin minute = 0 ; end else begin minute = minute + 1 ; end end else if (adjusts = 1b1)

22、 begin second = 0 ; end endelse begin if (second = 59) begin second = 0 ; if (minute = 59) begin minute = 0 ; if (hour = 23) begin hour = 0 ; end else begin hour = hour + 1 ; end end else begin minute =minute + 1 ; end end else begin second = second + 1 ; end endendendmodule4,接下來就是這個程序的鬧鈴修改單元setring

23、time。這里我們的目的是修改早上起床與晚上睡覺的鈴聲。這里就如之前的時間模塊中的修改時間一樣,通過adjbotton的輸出來改變時間,同時通過command的輸出來判別是否要運行此模塊即使能開啟與否。module setringtime (clock, en1, en2, adjusth, adjustm, getuphour, getupminute, sleephour, sleepminute);input clock;input en1;input en2;input adjusth;input adjustm;output3:0 getuphour;reg3:0 getuphour

24、;output5:0 getupminute;reg5:0 getupminute;output3:0 sleephour;reg3:0 sleephour;output5:0 sleepminute;reg5:0 sleepminute;always (posedge clock)begin : xhdl_1reg0:0 firsttime;if (firsttime = 0)begingetuphour = 6 ;getupminute = 0 ;sleephour = 22 ;sleepminute = 30 ;firsttime = 1;endelsebeginif (en1 = 1b

25、1)beginif (adjusth = 1b1)beginif (getuphour = 11)begingetuphour = 0 ;endelsebegingetuphour = getuphour + 1;endendelse if (adjustm = 1b1)beginif (getupminute = 59)begingetupminute = 0 ;endelsebegingetupminute 11)beginsleephour = 0 ;endelsebeginsleephour = sleephour + 1 ;endendelse if (adjustm = 1b1)b

26、eginif (sleepminute = 59)beginsleepminute = 0 ;endelsebeginsleepminute = sleepminute +1 ;endendendendendendmodule5,再接下來就是我們的鬧鈴持續(xù)時間的修改setringlength。主要原理和之前的時間修改的方法是一樣的,只是不同的在后者要把變好的變量輸入控制器,而前者則是對當前的時間修改好后,直接發(fā)送。6,最后這些上述的變量要如何顯示就要看最后的控制方面的程序了,這里通過對狀態(tài)變量的收取來控制當前的7段譯碼管該輸出是什么。當然這里要提到把六位的數(shù)據(jù)分成兩個4位的bcd碼,因為這樣我們的bcd譯碼器才會識別輸入從而輸出。而這里我們就要用到一個分位的程序。五、 設計收獲以及存在的問題:這次實驗可以說是以前一個關于時鐘的實驗的一個拓展,當時我們只被要求做出一個可以顯示時間的程序,那么當時電路圖中我們細化到了計數(shù)器這類器件上,而這次實驗可以說時鐘的顯示在這里只是一個必須的存在換而言之是基礎時

溫馨提示

  • 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

提交評論