VerilogHDL數(shù)字設(shè)計(jì)實(shí)訓(xùn)教程第3章數(shù)字系統(tǒng)應(yīng)用類實(shí)訓(xùn)項(xiàng)目_第1頁
VerilogHDL數(shù)字設(shè)計(jì)實(shí)訓(xùn)教程第3章數(shù)字系統(tǒng)應(yīng)用類實(shí)訓(xùn)項(xiàng)目_第2頁
VerilogHDL數(shù)字設(shè)計(jì)實(shí)訓(xùn)教程第3章數(shù)字系統(tǒng)應(yīng)用類實(shí)訓(xùn)項(xiàng)目_第3頁
VerilogHDL數(shù)字設(shè)計(jì)實(shí)訓(xùn)教程第3章數(shù)字系統(tǒng)應(yīng)用類實(shí)訓(xùn)項(xiàng)目_第4頁
VerilogHDL數(shù)字設(shè)計(jì)實(shí)訓(xùn)教程第3章數(shù)字系統(tǒng)應(yīng)用類實(shí)訓(xùn)項(xiàng)目_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

VerilogHDL數(shù)字設(shè)計(jì)實(shí)訓(xùn)教程

西安電子科技大學(xué)出版社第1章VerilogHDL數(shù)字設(shè)計(jì)實(shí)訓(xùn)根底第2章接口類實(shí)訓(xùn)工程第3章數(shù)字系統(tǒng)應(yīng)用類實(shí)訓(xùn)工程第4章NiosII處理器實(shí)訓(xùn)工程第3章數(shù)字系統(tǒng)應(yīng)用類實(shí)訓(xùn)工程3.1序列檢測(cè)器設(shè)計(jì)

3.2多功能計(jì)算器設(shè)計(jì)

3.3求最大公因數(shù)設(shè)計(jì)

3.4多功能數(shù)字鐘設(shè)計(jì)

3.5音樂播放器設(shè)計(jì)

3.6小結(jié)3.1序列檢測(cè)器設(shè)計(jì)

1.設(shè)計(jì)要求

試設(shè)計(jì)一個(gè)“1101〞序列檢測(cè)器,每當(dāng)1101連續(xù)出現(xiàn)時(shí),檢測(cè)輸出1,控制LED點(diǎn)亮。例如:序列“經(jīng)FPGA處理后,那么先后亮4次LED燈。要求:〔1〕使用按鍵2來輸入1和0;〔2〕使用按鍵3作為序列的時(shí)鐘信號(hào),每按一次,那么將按鍵2確定的二進(jìn)制碼串入序列中?!?〕檢測(cè)出“1101〞序列后,第4個(gè)led燈點(diǎn)亮,否那么該led燈滅。3.1序列檢測(cè)器設(shè)計(jì)

2.設(shè)計(jì)說明圖3-1“1101〞序列檢測(cè)器狀態(tài)圖3.1序列檢測(cè)器設(shè)計(jì)

3.設(shè)計(jì)模塊圖3-2序列檢測(cè)器模塊端口框圖

3.1序列檢測(cè)器設(shè)計(jì)

3.設(shè)計(jì)模塊2個(gè)模塊的功能:模塊U1用于產(chǎn)生二進(jìn)制碼和序列移入時(shí)鐘,同時(shí)將產(chǎn)生的二進(jìn)制碼送數(shù)碼管顯示;模塊U2進(jìn)行序列檢測(cè),假設(shè)檢測(cè)到事先設(shè)定的二進(jìn)制碼,就會(huì)控制led點(diǎn)亮。3.1序列檢測(cè)器設(shè)計(jì)

4.代碼說明

〔1〕頂層模塊sequence_top調(diào)用了兩個(gè)模塊。模塊key_sequence用于產(chǎn)生二進(jìn)制碼和序列移入時(shí)鐘,同時(shí)將產(chǎn)生的二進(jìn)制碼送數(shù)碼管顯示;模塊serial_detected用于進(jìn)行序列檢測(cè),假設(shè)檢測(cè)到事先設(shè)定的二進(jìn)制碼,就會(huì)控制led點(diǎn)亮?!?〕serial_detected在進(jìn)行序列檢測(cè)時(shí),使用了包含4個(gè)狀態(tài)的狀態(tài)機(jī)予以實(shí)現(xiàn),該狀態(tài)機(jī)代碼就是由圖3-1所示的狀態(tài)圖轉(zhuǎn)化而成。3.1序列檢測(cè)器設(shè)計(jì)

5.仿真分析圖3-3序列檢測(cè)模塊仿真波形圖

3.1序列檢測(cè)器設(shè)計(jì)

6.硬件驗(yàn)證

圖3-4引腳鎖定3.1序列檢測(cè)器設(shè)計(jì)

7.擴(kuò)展局部請(qǐng)讀者思考并實(shí)現(xiàn)以下擴(kuò)展功能:〔1〕在檢測(cè)出序列的根底上,對(duì)檢測(cè)出現(xiàn)的次數(shù)進(jìn)行累加計(jì)數(shù),并將計(jì)數(shù)結(jié)果顯示在數(shù)碼管上?!?〕使用2只數(shù)碼管顯示最近兩次輸入的數(shù)據(jù),這樣可使序列移入效果更直觀。3.2多功能計(jì)算器設(shè)計(jì)

1.設(shè)計(jì)要求

實(shí)現(xiàn)多功能計(jì)算器,具體要求如下:該計(jì)算器可以實(shí)現(xiàn)加法、減法、乘法3種功能:3種功能由按鍵2進(jìn)行選擇;2個(gè)運(yùn)算數(shù)由鍵1和鍵3產(chǎn)生,每按一次鍵那么使相應(yīng)的運(yùn)算數(shù)加1;加、減、乘均產(chǎn)生一個(gè)結(jié)果,當(dāng)按下鍵4時(shí),產(chǎn)生運(yùn)算結(jié)果并將結(jié)果顯示液晶上,顯示格式分別為“3+2=5〞、“8-14=-7〞、“3x5=15〞;要求參與運(yùn)算的2個(gè)數(shù)為9以內(nèi)的整數(shù)。3.2多功能計(jì)算器設(shè)計(jì)

2.設(shè)計(jì)說明由于開發(fā)板資源有限,僅有4個(gè)按鍵,計(jì)算器的功能全部通過4個(gè)按鍵來完成,所以為了操作方便,限定參與運(yùn)算的兩個(gè)數(shù)均為9以內(nèi)的整數(shù),同時(shí)限定該計(jì)算器僅完成加、減、乘運(yùn)算。理論上,如果我們按一次鍵,就對(duì)操作數(shù)加1,那么操作數(shù)可以是任意的正整數(shù);同理,如果按一次鍵,就改變成一種新的運(yùn)算,那么計(jì)算器可以完成很多種運(yùn)算。但是,通過按鍵加1來改變操作數(shù)或改變運(yùn)算種類,比較麻煩,所以我們對(duì)操作數(shù)以及運(yùn)算種類均作了限定,操作數(shù)限定為9以內(nèi)的整數(shù),運(yùn)算僅限于加、減、乘。3.2多功能計(jì)算器設(shè)計(jì)

3.設(shè)計(jì)模塊

圖3-5

計(jì)算器模塊端口框圖3.2多功能計(jì)算器設(shè)計(jì)

3.設(shè)計(jì)模塊

4個(gè)模塊的功能:模塊U1為分頻器,得到200Hz的頻率,該頻率用于U2、U4等模塊;模塊U2使用按鍵來設(shè)置計(jì)算器的功能以及設(shè)置參與計(jì)算的2個(gè)數(shù)據(jù);模塊U3根據(jù)計(jì)算器的功能以及參與計(jì)算的數(shù)據(jù),完成運(yùn)算,并將結(jié)果轉(zhuǎn)換成適宜在LCD上顯示的數(shù)據(jù);模塊U4實(shí)現(xiàn)將結(jié)果顯示在液晶屏上。3.2多功能計(jì)算器設(shè)計(jì)

4.代碼說明

〔1〕在calculator_top模塊中,可以看到調(diào)用了4個(gè)模塊。模塊divf_cal為分頻器,得到200Hz的頻率,該頻率用于key_cal、lcd_1602_cal等模塊;模塊key_cal使用按鍵來設(shè)置計(jì)算器的功能以及設(shè)置參與計(jì)算的2個(gè)數(shù)據(jù);模塊calculator根據(jù)計(jì)算器的功能以及參與計(jì)算的數(shù)據(jù),進(jìn)行運(yùn)算,并將結(jié)果轉(zhuǎn)換成適宜在LCD上顯示的數(shù)據(jù);模塊lcd_1602_cal用于將結(jié)果顯示在液晶屏上.〔2〕4個(gè)按鍵的功能:3種功能由按鍵2進(jìn)行選擇,每按一次鍵2就改變一種功能,3種功能依次循環(huán)選擇;2個(gè)運(yùn)算數(shù)由鍵1和鍵3產(chǎn)生,每按一次鍵那么使相應(yīng)的運(yùn)算數(shù)加1;鍵4那么啟動(dòng)計(jì)算并得到計(jì)算結(jié)果。請(qǐng)讀者參照key_cal模塊認(rèn)真體會(huì)?!?〕動(dòng)態(tài)數(shù)據(jù)在液晶上顯示的方法,由狀態(tài)機(jī)來完成,請(qǐng)讀者參照lcd_1602_cal模塊的代碼及其注釋認(rèn)真體會(huì)。3.2多功能計(jì)算器設(shè)計(jì)

5.仿真分析圖3-6calculator模塊仿真波形圖3.2多功能計(jì)算器設(shè)計(jì)

6.硬件驗(yàn)證

圖3-7引腳鎖定3.2多功能計(jì)算器設(shè)計(jì)

7.擴(kuò)展局部請(qǐng)讀者思考并實(shí)現(xiàn)以下擴(kuò)展功能:〔1〕本小節(jié)設(shè)計(jì)的多功能計(jì)算器,僅包含加、減、乘法,請(qǐng)讀者在此根底上完成除法運(yùn)算功能。要求:〔i〕除法中除數(shù)為0,那么需要報(bào)錯(cuò),并將錯(cuò)誤信息“E〞顯示在液晶上;〔ii〕除法產(chǎn)生商和余數(shù)2個(gè)結(jié)果,除法在液晶上顯示的格式為“13/5=2…3〞,即要求商和余數(shù)之間使用“…〞隔開;要求參與運(yùn)算的2個(gè)數(shù)為9以內(nèi)的整數(shù)?!?〕本小節(jié)設(shè)計(jì)的多功能計(jì)算器,對(duì)參與計(jì)算的操作數(shù)限定為9以內(nèi)的整數(shù),事實(shí)上對(duì)于更大的數(shù),其實(shí)現(xiàn)原理是一樣的。將讀者將參與計(jì)算的操作數(shù)擴(kuò)展到1000以內(nèi),并將結(jié)果顯示在液晶上。3.3求最大公因數(shù)設(shè)計(jì)

1.設(shè)計(jì)要求實(shí)現(xiàn)求最大公因數(shù),具體要求如下:對(duì)任意輸入的兩個(gè)正整數(shù),能夠得到它們的最大公因數(shù),2個(gè)數(shù)由鍵1和鍵2產(chǎn)生,鍵4那么啟動(dòng)求最大公因數(shù)并將結(jié)果顯示液晶上,顯示格式分別為“8G4=4〞,要求輸入的2個(gè)數(shù)均為9以內(nèi)的整數(shù)。圖3-8GCD系統(tǒng)框圖2.設(shè)計(jì)說明3.3求最大公因數(shù)設(shè)計(jì)

2.設(shè)計(jì)說明圖3-9狀態(tài)圖轉(zhuǎn)換模板3.3求最大公因數(shù)設(shè)計(jì)

2.設(shè)計(jì)說明

圖3-10求最大公約數(shù)的狀態(tài)圖〔左〕及化簡(jiǎn)后的狀態(tài)圖〔右〕3.3求最大公因數(shù)設(shè)計(jì)

3.設(shè)計(jì)模塊

圖3-11GCD模塊端口框圖

3.3求最大公因數(shù)設(shè)計(jì)

3.設(shè)計(jì)模塊

使用4個(gè)模塊實(shí)現(xiàn):模塊U1為分頻器,得到200Hz的頻率,該頻率用于U2、U3、U4等模塊;模塊U2使用按鍵來設(shè)置參與運(yùn)算的2個(gè)數(shù)據(jù);模塊U3根據(jù)求最大公因數(shù)的算法,完成運(yùn)算,并將結(jié)果轉(zhuǎn)換成適宜在LCD上顯示的數(shù)據(jù);模塊U4實(shí)現(xiàn)將結(jié)果顯示在液晶屏上。3.3求最大公因數(shù)設(shè)計(jì)

4.代碼說明〔1〕在gcd_top模塊中,可以看到調(diào)用了4個(gè)模塊。模塊divf_gcd為分頻器,得到200Hz的頻率,該頻率用于key_gcd、gcd、lcd_gcd等模塊;模塊key_gcd實(shí)現(xiàn)求最大公因數(shù)的算法,完成運(yùn)算,并將結(jié)果轉(zhuǎn)換成適宜在LCD上顯示的數(shù)據(jù);模塊lcd_gcd實(shí)現(xiàn)將結(jié)果顯示在液晶屏上?!?〕4個(gè)按鍵,僅用到了3個(gè)按鍵:2個(gè)運(yùn)算數(shù)由鍵1和鍵2產(chǎn)生,每按一次鍵那么使相應(yīng)的運(yùn)算數(shù)加1;鍵4那么啟動(dòng)計(jì)算并得到計(jì)算結(jié)果。按鍵的處理以及使用,請(qǐng)參考key_gcd模塊?!?〕動(dòng)態(tài)數(shù)據(jù)在液晶上顯示的方法,與多功能計(jì)算器中的方法類似,也由狀態(tài)機(jī)來完成,請(qǐng)讀者參照lcd_gcd模塊的代碼及其注釋認(rèn)真體會(huì)。3.3求最大公因數(shù)設(shè)計(jì)

5.仿真分析圖3-12gcd模塊仿真波形圖

3.3求最大公因數(shù)設(shè)計(jì)

6.硬件驗(yàn)證

圖3-13引腳鎖定3.3求最大公因數(shù)設(shè)計(jì)

6.擴(kuò)展局部請(qǐng)讀者思考并實(shí)現(xiàn)以下擴(kuò)展功能:〔1〕輸入為0是一種異常情況,請(qǐng)讀者在程序中添加“輸入為0〞的異常處理代碼?!?〕嘗試將輸入的2個(gè)數(shù)擴(kuò)展為99以內(nèi)的整數(shù),2個(gè)數(shù)仍由鍵1和鍵2產(chǎn)生,在液晶上的顯示格式為“36G24=12〞。3.4多功能數(shù)字鐘設(shè)計(jì)

1.設(shè)計(jì)要求實(shí)現(xiàn)一個(gè)多功能數(shù)字鐘〔含跑表功能〕,如圖3-14所示,具體要求如下:〔1〕計(jì)時(shí)功能:包括時(shí)、分、秒、百分秒的計(jì)時(shí),可以實(shí)現(xiàn)一天以內(nèi)精確至百分之一秒的計(jì)時(shí),并將結(jié)果顯示在液晶上。〔2〕定時(shí)功能:可設(shè)定鬧鐘定時(shí)的小時(shí)和分鐘值。〔3〕校時(shí)功能:根據(jù)當(dāng)前準(zhǔn)確時(shí)間對(duì)小時(shí)、分鐘能手動(dòng)調(diào)整以校準(zhǔn)時(shí)間。通過按鍵來修改小時(shí)、分鐘值,完成對(duì)小時(shí)、分鐘的校準(zhǔn)?!?〕復(fù)位和暫停功能:這一功能是針對(duì)數(shù)字跑表的,數(shù)字鐘不需要這個(gè)功能。圖3-14多功能數(shù)字鐘3.4多功能數(shù)字鐘設(shè)計(jì)

2.設(shè)計(jì)說明設(shè)計(jì)將兩個(gè)工程放在了一起,一個(gè)工程是數(shù)字鐘,另一個(gè)工程是數(shù)字跑表,這兩個(gè)工程針對(duì)不同的應(yīng)用,因此設(shè)計(jì)要求也有所不同。對(duì)于數(shù)字鐘來說,需要計(jì)時(shí)、校時(shí)、鬧鐘等功能,針對(duì)計(jì)時(shí)功能,那么要求實(shí)現(xiàn)括時(shí)、分、秒的計(jì)時(shí),并且可以實(shí)現(xiàn)一天以內(nèi)精確至1秒的計(jì)時(shí)。對(duì)于跑表來說,需要復(fù)位清零、暫停等功能,針對(duì)計(jì)時(shí)功能,那么要求實(shí)現(xiàn)分、秒、百分秒的計(jì)時(shí),可以實(shí)現(xiàn)一小時(shí)以內(nèi)精確至百分之一秒的計(jì)時(shí)。本節(jié)僅完成設(shè)計(jì)要求中的前面3個(gè)。3.4多功能數(shù)字鐘設(shè)計(jì)

3.設(shè)計(jì)模塊圖3-15

數(shù)字鐘模塊端口框圖3.4多功能數(shù)字鐘設(shè)計(jì)

3.設(shè)計(jì)模塊4個(gè)模塊的功能:模塊U1用于分頻,得到100Hz和1kHz兩個(gè)頻率,分別為按鍵和液晶提供適宜的工作頻率;模塊U2產(chǎn)生工作模式以及得到時(shí)間信息、鬧鐘定時(shí)信息以及校時(shí)信息;模塊U3產(chǎn)生顯示用的時(shí)、分、秒及百分秒信息;模塊U4用于實(shí)現(xiàn)液晶的顯示控制。3.4多功能數(shù)字鐘設(shè)計(jì)

4.代碼說明

〔1〕在digitalclock_top模塊中調(diào)用了4個(gè)模塊實(shí)現(xiàn)。模塊divf_digitalclk用于分頻,得到100Hz和1kHz兩個(gè)頻率,分別為按鍵和液晶提供適宜的工作頻率;模塊key_digitalclk通過按鍵產(chǎn)生工作模式、設(shè)定鬧鐘定時(shí)、設(shè)定校準(zhǔn)時(shí)間等,并得到時(shí)間信息、鬧鐘定時(shí)信息以及校時(shí)信息;模塊digitalclock產(chǎn)生顯示用的時(shí)、分、秒及百分秒信息;模塊lcd_digitalclk用于實(shí)現(xiàn)液晶的顯示控制?!?〕在key_digitalclk模塊中,使用按鍵產(chǎn)生工作模式、設(shè)定鬧鐘定時(shí)、設(shè)定校準(zhǔn)時(shí)間等,工作模式由變量mode來存儲(chǔ):mode=0,為計(jì)時(shí)模式;mode=1,為鬧鐘模式;mode=2,為校時(shí)模式。在校時(shí)模式下,設(shè)定校準(zhǔn)時(shí)間后,需要將校準(zhǔn)的小時(shí)和分鐘信息傳給計(jì)時(shí)用的小時(shí)和分鐘,以同步更新,如“if(mode==2)hour_n<=hour_adj;〞“if(mode==2)min_n<=min_adj;〞這兩條語句所示?!?〕在數(shù)字鐘設(shè)計(jì)中,小時(shí)、分、秒異步更新,更新時(shí)采用了不同時(shí)鐘,同時(shí)對(duì)小時(shí)、分、秒的十位和個(gè)位采取了分別處理的方法,這是一個(gè)很實(shí)用的技巧,請(qǐng)讀者參照代碼認(rèn)真體會(huì)。3.4多功能數(shù)字鐘設(shè)計(jì)

5.硬件驗(yàn)證圖3-16引腳鎖定3.4多功能數(shù)字鐘設(shè)計(jì)

6.擴(kuò)展局部請(qǐng)讀者思考并實(shí)現(xiàn)以下擴(kuò)展功能:〔1〕對(duì)于數(shù)字鐘功能,計(jì)時(shí)信息可僅顯示時(shí)、分、秒,讀者可以將百分秒信息去掉,這一功能很容易實(shí)現(xiàn),由讀者自行完成?!?〕整點(diǎn)報(bào)時(shí)功能和鬧鈴功能:每逢整點(diǎn),產(chǎn)生間隔1s的"嘀嘀嘀嘀——嘟",四短一長(zhǎng)的報(bào)時(shí)音。在鬧鐘定時(shí)到的時(shí)刻,啟動(dòng)鬧鈴響,鬧鈴音為急促的"嘀嘀嘀"音,響聲延續(xù)30秒。需要增加一個(gè)輸出到揚(yáng)聲器的信號(hào),該信號(hào)可直接從FPGA管腳引出到揚(yáng)聲器,用于產(chǎn)生鬧鈴音和報(bào)時(shí)音?!?〕使用按鍵來開啟或關(guān)閉鬧鐘功能,并用1個(gè)LED燈指示是否設(shè)置了鬧鐘功能,亮表示已設(shè)置,不亮表示未設(shè)置;在校時(shí)或鬧鐘模式下,增加2個(gè)LED燈來指示調(diào)整的是小時(shí)還是分鐘?!?〕使用按鍵來開啟或關(guān)閉數(shù)字跑表功能,對(duì)于跑表功能,計(jì)時(shí)信息僅顯示分、秒、百分秒信息?!?〕針對(duì)跑表功能,要求增加pause暫停和reset復(fù)位功能按鍵:按動(dòng)復(fù)位后,數(shù)字跑表從00:00:00:00開始計(jì)數(shù);按動(dòng)暫停后,數(shù)字跑表停止計(jì)數(shù),在液晶上穩(wěn)定顯示最后的計(jì)數(shù)值。3.5音樂播放器設(shè)計(jì)1.設(shè)計(jì)要求

設(shè)計(jì)硬件樂曲演奏電路,具體要求如下:〔1〕了解樂譜的一些根本知識(shí),可以將樂譜轉(zhuǎn)換為相應(yīng)的QuartusII文件?!?〕識(shí)譜并演奏?沂蒙山小調(diào)?和?兩只老虎?,通過按鍵4來選擇其中的一首樂曲播放,兩首樂曲的簡(jiǎn)譜如圖3-17和圖3-18所示?!?〕掌握本設(shè)計(jì)各模塊的功能,能夠填入并演奏一些新的曲子圖3-17沂蒙山小調(diào)的簡(jiǎn)譜圖3-18兩只老虎的簡(jiǎn)譜3.5音樂播放器設(shè)計(jì)

2.設(shè)計(jì)說明

圖3-19簡(jiǎn)譜中音名與音頻的對(duì)應(yīng)關(guān)系

3.5音樂播放器設(shè)計(jì)

2.設(shè)計(jì)說明

圖3-20

簡(jiǎn)譜中音頻與分頻預(yù)置數(shù)的對(duì)應(yīng)關(guān)系表3-1常用音符及其長(zhǎng)度標(biāo)記3.5音樂播放器設(shè)計(jì)

3.設(shè)計(jì)模塊

圖3-21硬件樂曲演奏電路模塊端口框圖

3.5音樂播放器設(shè)計(jì)

3.設(shè)計(jì)模塊

6個(gè)模塊的功能:U1是分頻模塊,得到的clk_100Hz和clk_8Hz分別用于按鍵處理,以及作為作為基準(zhǔn)音長(zhǎng);U2是選曲模塊,得到曲目號(hào)碼;U3模塊輸出所選曲目的音符,并通過數(shù)碼管和LED燈顯示音符;U4模塊得到數(shù)碼管顯示的段碼;U5模塊根據(jù)音符選取分頻預(yù)置數(shù);U6模塊根據(jù)分頻預(yù)置數(shù)得到音符的頻率并輸出揚(yáng)聲器,輸出美妙的音樂。在圖3-21中,模塊U3類似于彈琴的人的手指;U5類似于琴鍵;U6類似于琴弦或音調(diào)發(fā)聲器。3.5音樂播放器設(shè)計(jì)

4.代碼說明〔1〕songer_top模塊中調(diào)用了6個(gè)模塊。divf_speaker是分頻模塊,得到的clk_100Hz和clk_8Hz分別用于按鍵處理,以及作為作為基準(zhǔn)音長(zhǎng);song_sel是選曲模塊,得到曲目號(hào)碼;NoteTabs模塊輸出所選曲目的音符,并通過數(shù)碼管和LED燈顯示音符;Decode_8S模塊得到數(shù)碼管顯示的段碼;ToneTaba模塊根據(jù)音符選取分頻預(yù)置數(shù);Speakera模塊根據(jù)分頻預(yù)置數(shù)得到音符的頻率并輸出揚(yáng)聲器,輸出美妙的音樂?!?〕分頻預(yù)置數(shù)存放在ToneTaba模塊的參數(shù)pre_divf中。ToneTaba模塊根據(jù)輸入的音符,選擇輸出相應(yīng)的分頻預(yù)置數(shù)。該分頻預(yù)置數(shù)是在輸入為1MHz的頻率下得到的,而開發(fā)板的時(shí)鐘源為50MHz,所以要使用這些分頻預(yù)置數(shù),需要先對(duì)50MHz分頻得到1MHz頻率,分頻這一步是在Speakera模塊中完成?!?〕兩首樂曲分別存放在在NoteTabs模塊的參數(shù)music1和music2中。如果需要播放其它樂曲,可以在NoteTabs模塊中增加參數(shù),如music3、music4等,將樂曲保存在這些參數(shù)中。3.5音樂播放器設(shè)計(jì)

4.代碼說明〔4〕NoteTabs模塊輸入的是8Hz的頻率,即每個(gè)音調(diào)的基準(zhǔn)停留時(shí)間為0.125秒,恰為當(dāng)全音符設(shè)為1秒時(shí),四四拍的八分音符的持續(xù)時(shí)間。在NoteTabs中設(shè)置了一個(gè)10位二進(jìn)制計(jì)數(shù)器〔計(jì)數(shù)最大值為1024〕,作為音符數(shù)據(jù)的選取信號(hào)。隨著NoteTabs中的計(jì)數(shù)器按8Hz的時(shí)鐘速率作加法計(jì)數(shù)時(shí),music中的音符不斷被選擇輸出,樂曲就開始連續(xù)自然地演奏起來了?!?〕音符的頻率可以由Speakera模塊獲得。Speakera模塊的clk端輸入50MHz的頻率信號(hào),通過Speakera模塊分頻后得到2MHz的PreCLK輸出,由于直接從數(shù)控分頻器中出來的輸出信號(hào)是脈寬極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)揚(yáng)聲器,需另加一個(gè)D觸發(fā)器以均衡其占空比,但這時(shí)的頻率將是原來的1/2。Speakera模塊對(duì)clk輸入信號(hào)的分頻比由11位預(yù)置數(shù)Tone[10..0]決定。speaker的輸出頻率將決定每一音符的音調(diào),這樣,分頻預(yù)置值Tone[10..0]與speaker的輸出頻率,就有了對(duì)應(yīng)關(guān)系。例如在ToneTaba模塊中假設(shè)取Tone[10..0]=1036,將發(fā)音符為“3〞音的信號(hào)頻率。3.5音樂播放器設(shè)計(jì)

4.代碼說明〔6〕音符的持續(xù)時(shí)間須根據(jù)樂曲的速度及每個(gè)音符的節(jié)拍數(shù)來確定,圖3-21中模塊ToneTaba的功能首先是為Speakera模塊提供決定所發(fā)音符的分頻預(yù)置數(shù),而此數(shù)在sp

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論