EDA課程設計報告-基于FPGA的數(shù)字頻率計的設計_第1頁
EDA課程設計報告-基于FPGA的數(shù)字頻率計的設計_第2頁
EDA課程設計報告-基于FPGA的數(shù)字頻率計的設計_第3頁
EDA課程設計報告-基于FPGA的數(shù)字頻率計的設計_第4頁
EDA課程設計報告-基于FPGA的數(shù)字頻率計的設計_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGEPAGE9EDA課程設計報告題目:基于FPGA的數(shù)字頻率計的設計基于FPGA數(shù)字頻率計的設計任務書1.設計任務與要求設計一個基于FPGA數(shù)字頻率計,要認真并準確地理解有關要求,完成系統(tǒng)設計。設計要求:(1)頻率測量:頻率10Hz~9999Hz方波信號;(2)周期測量:頻率10Hz~9999Hz方波信號;(3)四位數(shù)碼管顯示頻率、周期;(4)能產生頻率1KHz的方波信號,進行頻率計自校;(5)對兩種不同的測量用兩種發(fā)光LED指示;2.設計內容(1)設計VHDL代碼源文件;(2)編譯綜合;(3)下載程序,片上測試;3.編寫設計報告寫出設計的全過程,附上有關資料和程序,有心得體會。題目:基于FPGA數(shù)字頻率計一、設計目的完成一個基于FPGA數(shù)字頻率計,要完成以下任務。(1)頻率測量:頻率10Hz~9999Hz方波信號;(2)周期測量:頻率10Hz~9999Hz方波信號;(3)四位數(shù)碼管顯示頻率、周期;(4)能產生頻率1KHz的方波信號,進行頻率計自校;(5)對兩種不同的測量用兩種發(fā)光LED指示;二、設計方案1.總體設計方案系統(tǒng)功能描述:(數(shù)字頻率基本功能是基于FPGA測試一10-9999HZ的方波信號,并在四位八段數(shù)碼管上顯示,包括分頻模塊、周期測量模塊、頻率測量模塊、顯示模塊)2.分頻模塊設計將一個50MHZ的標準信號每個周期進行一次計數(shù),計到50000再從0計數(shù),然后在計數(shù)器的前25000時間內將1KHz的信號置高電平,25000-50000內的1KHZ信號置低電平,從而產生一個1KHZ的內部信號。將產生的1KHZ信號每個周期進行一次計數(shù),計到1000再從0開始計數(shù),然后在計數(shù)器的前500時間內將1HZ信號置高電平,500-1000時間內內江1HZ信號置低電平,從而產生一個1HZ頻率的閘門信號。3.顯示模塊設計定義一個integer類型信號BIS,范圍為0-3,用這個信號來進行位選,在1KHZ的信號中,每經過一次周期變換就將BIS加1,超過3則回0,用來做四位數(shù)碼管的動態(tài)掃描。檢測輸入按鍵(輸入端口),當為低電平時則表示顯示頻率,將對應的LED燈端口置高電平,表示周期的LED置低電平。將位選信號BIS放入CASE語句,當其為0時表示第一位顯示,將位選端口置為”0111”,并將頻率的千位傳入顯示數(shù)據(jù);為1時表示第二位顯示,將位選端口置為”1011”,并將頻率的百位傳入顯示數(shù)據(jù);為2時表示第三位顯示,將位選端口置為”1101”,并將頻率的十位傳入顯示數(shù)據(jù);為3時表示第四位顯示,將位選端口置為”1110”,并將頻率的個位傳入顯示數(shù)據(jù)。位選端口為STD_LOGIC_VECTOR(3DOWNTO0))類型。如果檢測到輸入按鍵為低電平時,表示顯示周期,將對應的LED燈端口置高電平,表示頻率的LED置低電平。將位選信號BIS放入CASE語句,當其為0時表示第一位顯示,將位選端口置為”0111”,并將周期的千位傳入顯示數(shù)據(jù);為1時表示第二位顯示,將位選端口置為”1011”,并將周期的百位傳入顯示數(shù)據(jù);為2時表示第三位顯示,將位選端口置為”1101”,并將周期的十位傳入顯示數(shù)據(jù);為3時表示第四位顯示,將位選端口置為”1110”,并將周期的個位傳入顯示數(shù)據(jù)。另起一個進程,將上面位選時傳入的數(shù)據(jù)放入case語句,將其對應數(shù)據(jù)的段碼放入段選端口,我們所用的電路板數(shù)碼管為共陽極點亮,故點亮的段應用低電平。求整數(shù)(data)的個、十、百、千位的方法:個位=datamod10;十位=data/10mod10;百位=data/100mod10;千位=data/1000;4.頻率測量模塊設計將分頻模塊中生成的1HZ信號作為閘門信號,當閘門信號為高電平時,測量待測信號在高電平期間跳的數(shù)量,當閘門信號為低電平時將測量數(shù)據(jù)傳入輸出模塊,并將計數(shù)器清零,該傳出的數(shù)據(jù)為半秒內跳沿次數(shù),一個周期有一個上升沿和一個下降沿,固該值即為待測信號的頻率值。4.周期測量模塊設計將標準輸入的50MHZ信號進行500被分頻,設計一個100KHZ的信號,將待測信號作為閘門,測量在其高電平期間的100KHZ信號跳沿次數(shù),當待測信號為低電平時,將該數(shù)據(jù)傳出,并將計數(shù)器清零,該測量值即為輸入信號的周期值,單位為100KHZ信號的周期,為10us。三、驗證方案仿真結果:四、結論及討論完成所有模塊代碼編寫后我進行了整合編譯,交由負責管腳分配的同學進行分配管腳仿真后下載到開發(fā)板,連接到自己設置的1KHZ校準信號和一個3KHZ的自定義信號上,分別撥動顯示選擇控制開關,顯示正確、清晰,符合開始時的要求。將開發(fā)板的輸入管腳,接到波形發(fā)生器上,開發(fā)板能正確顯示發(fā)生器的給定頻率及其周期,但當頻率小于20HZ是開始出現(xiàn)數(shù)據(jù)顯示不穩(wěn)定情況,原因是未分高低頻測量,而是籠統(tǒng)的一個一秒閘門測量,低頻數(shù)據(jù)不穩(wěn)定。當頻率超過10000HZ時會出現(xiàn)顯示不確定的值,原因在于代碼里未處理頻率超界的情況,故在代碼中加上了一個蜂鳴器端口,當頻率超過10000HZ的測量限度時蜂鳴器置高電平報警,提示使用者該值非正確值。11HZ信號頻率測量500HZ信號頻率測量1000HZ自校信號頻率測量

五、課程設計的心得與體會通過對數(shù)字頻率計的設計實現(xiàn),我深入的學習了QuartusII軟件的使用,VHDL語言的編寫規(guī)范,語法結構等。在本次試驗中我回顧了在《數(shù)字電路》以及《數(shù)字電路EDA設計與使用》課程中學過的關于數(shù)字電路的設計的內容,加深了對硬件與軟件聯(lián)系的映像,對其他的軟件編程甚至單片機的原理與應用也有很大的提升。這個課程設計也讓我懂得,理論知識真的很重要,而實踐能夠加深對理論知識的理解,將理論和實踐結合起來,才能設計出優(yōu)秀的作品。在這個課程設計過程中,我不只是完成一個設計,更重要的是在這一過程中所體會和學到的一些非知識技能層面的東西——細心、堅持、不斷學習,我相信這會是一次難得的經歷。參考文獻[1]聶小燕.數(shù)字電路EDA設計與應用.北京:人民郵電出版社,2010

附錄VHDL源代碼LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCYMOMETERIS PORT( CLK_CA :INSTD_LOGIC;--50MHZ信號 CLK_CO :INSTD_LOGIC;--待測信號 CLK_UT:OUTSTD_LOGIC;--自定義信號 KEY :INSTD_LOGIC;--周期/頻率轉換 CLK_CAL:OUTSTD_LOGIC;--校準信號 LEDH :OUTSTD_LOGIC;--頻率顯示LED指示 LEDT :OUTSTD_LOGIC;--周期顯示LED指示 WARG :OUTSTD_LOGIC;--頻率超過測量范圍警鈴示警-- RST :INSTD_LOGIC; DATAOUT :OUTSTD_LOGIC_VECTOR(7DOWNTO0);--數(shù)碼段選信號 EN :OUTSTD_LOGIC_VECTOR(3DOWNTO0));--數(shù)碼管位選信號ENDCYMOMETER;ARCHITECTUREBEHAVOFCYMOMETERISSIGNAL DATAOUT_XHDL:STD_LOGIC_VECTOR(7DOWNTO0);--數(shù)碼管段選內部信號SIGNAL EN_XHDL:STD_LOGIC_VECTOR(3DOWNTO0);--數(shù)碼管位選內部信號SIGNAL CLK_KH,CLK_H:STD_LOGIC;--1KHZ和1HZ內部信號SIGNAL CK_SIM,WARB:STD_LOGIC;--自定義內部信號,警鈴內部信號SIGNAL BIS:INTEGERRANGE0TO4:=0;--數(shù)碼管位選標識SIGNAL CO_COUNT,T_COUNT,HZ_COUNT:INTEGERRANGE0TO20000:=0;--頻率計數(shù),周期計數(shù)SIGNAL CO_BUF:INTEGERRANGE0TO20000:=0;--頻率計數(shù)緩沖區(qū)SIGNAL CA_COUNT,A:INTEGERRANGE0TO50000:=0;--50MHZ內部計數(shù),自定義信號產生計數(shù)器SIGNAL data:INTEGERRANGE0TO9;--顯示數(shù)據(jù)傳輸SIGNAL LED1,LED2:STD_LOGIC;--LED標識內部信號SIGNAL C100K_COUNT:INTEGERRANGE0TO500;--100KHZ信號計數(shù)器BEGIN DATAOUT<=DATAOUT_XHDL;--將內部LED段選信號關聯(lián)到輸出信號 EN <=EN_XHDL;--將內部LED位選信號關聯(lián)到輸出位選 LEDT<=LED1;--將內部LED指示信號關聯(lián)到輸出LED指示 LEDH<=LED2; CLK_UT<=CK_SIM;--將內部自定義信號關聯(lián)到輸出 CLK_CAL<=CLK_KH;--將內部1KHZ信號關聯(lián)到輸出校準 WARG<=WARB;--將內部警鈴信號關聯(lián)到外部 P1:PROCESS(CLK_CA)--進程P1,將50MHZ信號進行計數(shù) BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(CA_COUNT<50000)THEN CA_COUNT<=CA_COUNT+1; ELSE CA_COUNT<=0; ENDIF; ENDIF; ENDPROCESSP1; P2:PROCESS(CLK_CA)--進程P2,將50MHZ信號進行計數(shù),用于產生自定義信號 BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(A<50000)THEN A<=A+1; ELSE A<=0; ENDIF; ENDIF; ENDPROCESSP2; P3:PROCESS(CLK_CA)--P3通過計數(shù)器A,產生自定義信號,此處為3KHZ BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(A<10000)THEN CK_SIM<='1'; ELSIF((A>10000)AND(A<20000))THEN CK_SIM<='0'; ELSIF((A>20000)AND(A<30000))THEN CK_SIM<='1'; ELSIF((A>30000)AND(A<40000))THEN CK_SIM<='0'; ELSIF((A>40000)AND(A<45000))THEN CK_SIM<='1'; ELSE CK_SIM<='0'; ENDIF; ENDIF; ENDPROCESSP3; P4:PROCESS(CA_COUNT)--進程P4,通過計數(shù)器CA_COUNT,產生1KHZ信號CLK_KH BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(CA_COUNT<24999)THEN CLK_KH<='1'; ELSE CLK_KH<='0'; ENDIF; ENDIF; ENDPROCESSP4; P5:PROCESS(CLK_KH)--進程P5,對1KHZ信號進行計數(shù) BEGIN IF(CLK_KH'EVENTANDCLK_KH='1')THEN IF(HZ_COUNT<1000)THEN HZ_COUNT<=HZ_COUNT+1; ELSE HZ_COUNT<=0; ENDIF; ENDIF; ENDPROCESSP5; P6:PROCESS(CLK_KH)--進程P6,通過計數(shù)器HZ_COUNT,產生1HZ信號 BEGIN IF(CLK_KH'EVENTANDCLK_KH='1')THEN IF(HZ_COUNT<500)THEN CLK_H<='1'; ELSE CLK_H<='0'; ENDIF; ENDIF; ENDPROCESSP6; P7:PROCESS(CLK_H,CLK_CO)--進程P7,在1HZ信號CLK_H半個周期內統(tǒng)計輸入信號變化次數(shù),P6,P7可以合并 BEGIN IF(CLK_CO'EVENTANDCLK_CO='1')THEN IF(CLK_H='1')THEN CO_BUF<=CO_BUF+1; ELSE--將統(tǒng)計結果乘以二傳到CO_COUNT,為輸入信號頻率 IF(CO_BUF>0)THEN CO_COUNT<=2*CO_BUF; CO_BUF<=0;--適時清零緩沖器 ENDIF; CO_BUF<=0; ENDIF; ENDIF; ENDPROCESSP7;P11:PROCESS(CLK_CA) BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(C100K_COUNT<500)THEN C100K_COUNT<=C100K_COUNT+1; ELSE C100K_COUNT<=0; ENDIF; ENDIF; ENDPROCESSP11; P12:PROCESS(CLK_CA) BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(C100K_COUNT<250)THEN CLK_10KH<='1'; ELSE CLK_10KH<='0'; ENDIF; ENDIF; ENDPROCESSP12; P13:PROCESS(CLK_CO,CLK_10KH) BEGIN IF(CLK_10KH'EVENTANDCLK_10KH='1')THEN IF(CLK_CO='1')THEN T_BUF<=T_BUF+1; ELSE IF(HZ_COUNT<10)THEN IF(T_BUF>0)THEN T_COUNT<=T_BUF*2; T_BUF<=0; ENDIF; T_BUF<=0; ENDIF; ENDIF; ENDIF; ENDPROCESSP13; P8:PROCESS(CLK_KH)--進程P8,通過1KHZ信號變化改變數(shù)碼管位選標識 BEGIN IF(CLK_KH'EVENTANDCLK_KH='1')THEN IF(BIS<3)THEN BIS<=BIS+1; ELSE BIS<=0; ENDIF; ENDIF; ENDPROCESSP8; P9:PROCESS(CLK_KH,BIS,KEY)--進程P9,數(shù)碼管位選,并傳入顯示數(shù)據(jù) BEGIN IF(CO_COUNT>9999)THEN WARB<='1'; ELSE WARB<='0'; ENDIF; IF(CLK_KH'EVENTANDCLK_KH='1')THEN IF(KEY='0')THEN LED1<='0'; LED2<='1'; CASEBISIS WHEN0=>EN_XHDL<="1110"; data<=(10000/CO_COUNTMOD10); WHEN1=>EN_XHDL<="1101"; data<=((10000/CO_COUNT/10)MOD10); WHEN2=>EN_XHDL<="1011"; data<=((10000/CO_COUNT/100)MOD10); WHEN3=>EN_XHDL<="0111"; data<=(10000/CO_COUNT/1000); WHENOTHERS=>EN_XHDL<="1111";data<=0; ENDCASE; ELSE LED2<='0'; LED1<='1'; CASEBISIS WHEN0=>EN_XHDL<="1110"; data<=(CO_COUNTMOD10);

溫馨提示

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

評論

0/150

提交評論