已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于SOPC的SD卡WAV音頻播放器 設(shè)計(jì)報(bào)告 組員:賈 登 儀器10802班 張子龍 信工10803班 郭建林 信工10803班 日期:2011年5月29日基于sopc的sd卡wav音頻播放器設(shè)計(jì) 摘要:本設(shè)計(jì)使用SOPC Builder在FPGA芯片上定制一個(gè)高速CPU實(shí)現(xiàn)FPGA與SD卡的SPI模式通信,并根據(jù)SD卡的FAT32文件系統(tǒng)讀取SD卡內(nèi)的WAV文件,讀到的的音頻文件數(shù)據(jù)送到FIFO模塊,以將數(shù)據(jù)根據(jù)其采樣率均勻輸出到DA播放電路,實(shí)現(xiàn)了SD卡根目錄下WAV文件的順序播放、暫停、上一曲、下一曲功能。與SD卡的通信在NIOS 軟件中用C語言編寫,F(xiàn)IFO模塊用Verilog HDL語言編寫,音頻數(shù)據(jù)的播放由DAC0832、uA741運(yùn)放、音箱完成。關(guān)鍵詞:FPGA 、SOPC、SD卡、SPI、FAT32、DA0832一、設(shè)計(jì)指標(biāo):系統(tǒng)上電后,自動(dòng)順序播放sd卡根目錄中所有wav音頻文件。Wav音頻文件的頻率可以是8k、16k、24k、32k、44.1k之中的任何一種,硬件電路自動(dòng)根據(jù)實(shí)際的歌曲頻率切換輸出音樂數(shù)據(jù)的頻率。按鍵實(shí)現(xiàn)播放下一曲、上一曲、暫停功能。擴(kuò)展功能:通過遙控器紅外線控制播放下一曲、上一曲、暫停二、硬件平臺:Cyclone EP2C5T144C8 FPGA 開發(fā)板(自帶sd卡模塊)DAC0832+UA741構(gòu)成的DA轉(zhuǎn)換模塊其他資源:杜邦線、電源、測試用音箱、(單片機(jī))等。三、軟件平臺:Quartus 8.1 & NIOS 8.1 IDE四、設(shè)計(jì)方案:4.1綜合分析:A、選單片機(jī)還是FPGA? 雖然我們跟熟悉的是單片機(jī),但是這個(gè)課題對時(shí)間要求或者說cpu的處理速度要求較高,單片機(jī)接24M晶振也達(dá)不到速度上的要求,因此選擇fpga是比較合適的。Fpga配上50M的晶振實(shí)現(xiàn)高速訪問sd卡并實(shí)時(shí)播放音樂文件是可以實(shí)現(xiàn)的。B、用verilog開發(fā)還是C語言開發(fā)?接下來又有兩個(gè)選擇,是采用verilog語言開發(fā)還是采用SOPC定制軟核再在NIOS IDE中用C語言進(jìn)行編程實(shí)現(xiàn)。若采用verilog進(jìn)行開發(fā),軟件編程上難度較大,時(shí)序不容易把握再加上實(shí)時(shí)調(diào)試也比較困難。采用C語言編程,在時(shí)序控制上比較容易,借助于NIOS IDE的強(qiáng)大在線調(diào)試功能,可以很方便的發(fā)現(xiàn)程序的錯(cuò)誤并改正。綜上幾點(diǎn)原因我們選擇了用定制cpu的方式進(jìn)行此課題的設(shè)計(jì)。C、采用哪種方式訪問sd卡,4位SD模式還是spi模式?4位sd模式對處理器要求較spi模式要高(crc校驗(yàn)不能忽略),還有cmd命令線是雙向端口(發(fā)送命令和接受命令都經(jīng)過cmd線),較spi全部單向傳輸要麻煩。在實(shí)際測試下,spi模式在速度上可以達(dá)到本課題設(shè)計(jì)要求,所以選擇了spi模式對sd卡進(jìn)行通信。4.2怎樣從SD卡讀取wav音頻文件的數(shù)據(jù)?Cpu跟SD卡在底層進(jìn)行spi通信,在軟件上層利用FAT32文件系統(tǒng)獲取文件的具體相關(guān)信息及文件數(shù)據(jù)。具體流程如下:獲取SD卡第0扇區(qū)的5112字節(jié)數(shù)據(jù)計(jì)算得到根目錄所在扇區(qū)獲取根目錄所在扇區(qū)的5112字節(jié)數(shù)據(jù)計(jì)算音頻文件所在扇區(qū)或開始簇號根據(jù)FAT表分析文件所占有簇的分布情況從而讀取整個(gè)音頻文件4.3如何保證讀到的音頻文件按其采樣頻率輸出?由于sd卡讀取數(shù)據(jù)的速度的不可控性,另外WAV音頻文件比較大,一首歌多達(dá)十到幾十M,只能采用邊讀邊放才能保證音樂實(shí)時(shí)不間斷地放出來。播放的速度只取決于歌曲的采樣頻率,播放速度在播放過程中不能變化。解決方法:cpu只負(fù)責(zé)讀取音樂數(shù)據(jù),F(xiàn)IFO模塊將數(shù)據(jù)按歌曲采樣頻率送到DAC。FIFO模塊產(chǎn)生wren(允許寫入信號)通知cpu對FIFO指定數(shù)據(jù)塊內(nèi)容進(jìn)行寫入新數(shù)據(jù),這樣播放的速度就始終保持不變,也能保證完整而不重復(fù)地播放音樂文件。五、系統(tǒng)各模塊設(shè)計(jì)5.1、SD卡spi通信電路簡化示意圖:在SOPC系統(tǒng)中為cpu添加四條寬度為1位的pio端口如下:SD_CS(output only)(片選信號)SD_CLK(output only)( SPI 時(shí)鐘信號)SD_DI (output only)(數(shù)據(jù)/命令輸入到SD信號)SD_DO(input only)(sd卡反饋數(shù)據(jù)/命令信號)5.2、SD卡操作時(shí)序圖:在CS為低電平期間向SD卡發(fā)送第0號命令,讓SD卡進(jìn)入SPi模式初始化命令成功后,才可以進(jìn)行SD卡的讀取扇區(qū)操作讀取指定扇區(qū),本課題設(shè)計(jì)中的核心命令5.3、CPU及外設(shè)設(shè)計(jì)FPGA開發(fā)板上50M有源晶振為整個(gè)系統(tǒng)提供時(shí)鐘脈沖信號,為了充分地利用FPGA的高速性能,借助Quartus 中PLL模塊對時(shí)鐘進(jìn)行3倍頻,就可以讓cpu的外部時(shí)鐘頻率達(dá)到150M。綜合考慮速度及FPGA開發(fā)板資源情況,選擇cpu類型為標(biāo)準(zhǔn)型,執(zhí)行速度可達(dá)到75DMIPS。系統(tǒng)簡圖:cpu以SDRAM作為內(nèi)存(程序存儲空間及數(shù)據(jù)存儲空間),保證了大程序也可以很好地運(yùn)行jtag_uart:便于調(diào)試(可選,即使沒有此模塊也可以通過nios 單步調(diào)試測試程序運(yùn)行情況)epcs:FPGA配置芯片,在FPGA上電后重新加載程序FIFO:數(shù)據(jù)寫入緩沖模塊,起到音頻數(shù)據(jù)的均勻播放(嚴(yán)格以歌曲的采樣頻率將數(shù)據(jù)送到DA)按鍵交互:三個(gè)按鍵中斷,可實(shí)現(xiàn)以下功能播放/暫停:按下后繼續(xù)播放或暫停當(dāng)前歌曲下一曲:按下后播放下一首歌曲上一曲:按下后播放上一首歌曲5.4、FIFO模塊設(shè)計(jì):FIFO模塊是重點(diǎn)設(shè)計(jì)模塊,它直接關(guān)系到最后音樂輸出的效果(放快了還是放慢了,音樂有無明顯失真)設(shè)計(jì)思想:當(dāng)cpu播放某一首歌曲前,會先得到歌曲的采樣頻率(采樣頻率存儲在wav文件中)然后cpu根據(jù)不同的采樣頻率向FIFO輸出不同的mode2.0并使rst(輸出使能控制)無效(正常輸出)。在FIFO內(nèi)部有一個(gè)深度為1024,寬度為8位的寄存器數(shù)組,dataout7.0按采樣頻率循環(huán)輸出第0到第1023寄存器中數(shù)據(jù)。這1024個(gè)寄存器被均分為兩塊,上下各512。在輸出第0個(gè)數(shù)據(jù)和第512個(gè)數(shù)據(jù)時(shí)讓wren為高電平,其余時(shí)刻均為低電平。當(dāng)cpu從SD卡中讀取到新數(shù)據(jù)后,要等到wren為高電平后,才通過數(shù)據(jù)線data7.0及wrclk(上升沿寫入數(shù)據(jù))向FIFO寫入512個(gè)數(shù)據(jù)。寫入數(shù)據(jù)時(shí),F(xiàn)IFO內(nèi)部自動(dòng)根據(jù)當(dāng)前播放的是哪一個(gè)塊(上面的512還是下面的512)把數(shù)據(jù)寫入另一個(gè)塊中,就實(shí)現(xiàn)了數(shù)據(jù)不會丟失(在一個(gè)塊沒有播放完時(shí),這個(gè)塊不會被新數(shù)據(jù)覆蓋)。cpu在150M時(shí)鐘頻率下,足夠在FIFO播放的同時(shí)準(zhǔn)備好下一個(gè)512字節(jié)的數(shù)據(jù)。/數(shù)據(jù)寫入endendendassign wren=(rdptr=512)|(rdptr=0);endmodulealways ( posedge wrclk)beginif(flag) begindatawrptr=datain;wrptr=wrptr+1b1;if(wrptr=512)beginwrptr=0;endelse begindatawrptr+512=datain;wrptr=wrptr+1b1;if(wrptr=512)beginwrptr=0;endendendassign wren=(rdptr=512)|(rdptr=0);endmodulealways (rdptr)/數(shù)據(jù)輸出及產(chǎn)生上下塊標(biāo)志(flag)begindataout=datardptr;if(rdptr=0)flag=0;if(rdptr=512)flag=1;endalways(posedge clk or negedge rst)/產(chǎn)生輸出時(shí)鐘beginif(rst)elsebegincase (mode)3d0:begincnt=cnt+1b1;if(cnt=f8K)beginrdclk=rdclk;cnt=0;endend3d1:begincnt=cnt+1b1;if(cnt=f16K)beginrdclk=rdclk;cnt=0;end end3d2:begincnt=cnt+1b1;if(cnt=f24K)beginrdclk=rdclk;cnt=0;endend3d3:begincnt=cnt+1b1;if(cnt=f32K)beginrdclk=rdclk;cnt=0;endend3d4:begincnt=cnt+1b1;if(cnt=f44K)beginrdclk=rdclk;cnt=0;endenddefault:begincnt=cnt+1b1;if(cnt=f8K)beginrdclk=rdclk;cnt=0;end endendcaseendend附FIFO verilog代碼:module fifo(clk,rst,mode,wrclk,datain,wren,dataout);parameter f8K=3125; parameter f16K=1563;parameter f24K=1042;parameter f32K=783;parameter f44K=567;input clk;input rst;input wrclk;input 2:0 mode;input 7:0 datain;output 7:0 dataout;reg 7:0 dataout;reg rdclk;reg 7:0 data 0:1023 ;reg 10:0 rdptr =0;reg 10:0 wrptr=0;reg 11:0 cnt=0;reg flag;output wren;always(posedge rdclk ) /讀指針計(jì)數(shù)器beginrdptr=rdptr+1b1;if(rdptr=1024)beginrdptr=0;endend5.5、Quartus 電路原理全圖:送往DA 音樂頻率值輸出 音頻數(shù)據(jù)輸出 暫停FIFO輸出 寫FIFO時(shí)鐘 FIFO PLL模塊 50*3=150M 暫停引腳上一曲引腳下一曲 引腳寫FIFO使能 SD卡引腳 SDRAM引腳 5.6、Nios 軟件設(shè)計(jì)第一步:完成cpu與sd卡的spi通信可以讀出指定扇區(qū)的512字節(jié)數(shù)據(jù);第二步:在sd卡底層操作基礎(chǔ)上搭載FAT32文件系統(tǒng),完成cpu從SD卡中讀出指定文件名的文件中的數(shù)據(jù);第三步:播放指定文件名的不同采樣頻率的WAV文件,測試并完善FIFO模塊;第四步:利用FAT32文件系統(tǒng)掃描SD卡根目錄下所有WAV文件,將文件信息(文件名、文件數(shù)據(jù)存放起始簇號等)存入文件信息結(jié)構(gòu)體數(shù)組中;第五步:完成自動(dòng)循環(huán)播放文件信息結(jié)構(gòu)體數(shù)組中所指的wav文件;第六步:寫按鍵中斷響應(yīng)函數(shù),實(shí)現(xiàn)暫停、下一曲、上一曲功能,完成整個(gè)軟件系統(tǒng)設(shè)計(jì)。5.7、NIOS 核心代碼流程圖主程序入口暫停、上一曲、下一曲中斷初始化SD卡復(fù)位、初始化FAT32文件系統(tǒng)初始化掃描根SD卡根目錄下所有wav文件,以獲得根目錄下所有wav文件的數(shù)目N定義N個(gè)文件信息結(jié)構(gòu)體數(shù)組再次掃描根目錄下所有wav文件,依次將這些文件的的信息(文件名、長度、開始簇等)裝入上述數(shù)組u=0uN?根據(jù)第u曲文件的信息調(diào)用讀文件函數(shù)讀取該文件數(shù)據(jù) u=u+1否是讀文件函數(shù)入口讀取文件開始簇第一扇區(qū)的數(shù)據(jù)到緩沖區(qū)buffer512由buffer24buffer27獲得wav文件的采樣率,并由此決定mode值(FIFO模塊根據(jù)mode值決定輸出數(shù)據(jù)的速度)讀取下一扇區(qū)數(shù)據(jù)到緩沖區(qū)buffer512Flag1(上一首中斷標(biāo)志位)=0 ??是否是否Flag2(下一首中斷標(biāo)志位)=0 ?fag1=1,u=u-2flag2=1FIFO允許寫入 ?否是將buffer512寫入FIFO文件數(shù)據(jù)讀完?是返回u暫停中斷入口FIFO正在播放數(shù)據(jù)?返回使FIFO暫停播放使FIFO繼續(xù)播放數(shù)據(jù)清零“暫停”中斷捕獲寄存器是否“上一首”中斷入口Flag1=0清零“上一首”中斷捕獲寄存器返回“下一首”中斷入口Flag2=0清零“下一首”中斷捕獲寄存器返回六、總結(jié)本系統(tǒng)以ALTERA公司EP2C5T114C8芯片為核心部件,通過在此芯片上定制一個(gè)高速嵌入式CPU(執(zhí)行速度可達(dá)150DMIPS)實(shí)現(xiàn)了對SD卡的內(nèi)部數(shù)據(jù)的讀取,并通過FIFO模塊將數(shù)據(jù)以均勻速度輸出到DAC,從而實(shí)現(xiàn)WAV音頻文件的播放,暫停,上一曲,下一曲功能,操作準(zhǔn)確無誤,音質(zhì)純正。利用Quartus II,Nios II等開發(fā)軟件編寫軟件代碼,能實(shí)現(xiàn)復(fù)雜的程序算法。拓展SD RAM作為CPU其內(nèi)存,突破芯片F(xiàn)PGA本身內(nèi)存的限制,為大型程序的穩(wěn)定運(yùn)行提供了充足的內(nèi)存空間
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年二手挖掘機(jī)交易合同參考2篇
- 國際市場的渠道建設(shè)與管理
- 2025年度新型設(shè)備租賃與智能化升級解決方案合同3篇
- 2024年私人車位出租合同模板
- 基礎(chǔ)護(hù)理之給藥的基本知識
- 五年級數(shù)學(xué)小數(shù)的四則混合運(yùn)算測試題
- 茶館劇本臺詞
- 公司股份合作協(xié)議書模板(完整版)
- 10kV電力電纜的故障查找與故障原因分析-20220601162001
- 中班第二學(xué)期安全計(jì)劃工作6篇
- 工藝豎井開挖支護(hù)施工技術(shù)方案(清楚明了)
- 水利五大員施工員教材講義
- 醫(yī)療機(jī)構(gòu)資產(chǎn)負(fù)債表(通用模板)
- 廢舊鋰離子電池高值資源化回收利用項(xiàng)目環(huán)評報(bào)告書
- 審計(jì)英語詞匯大全講課教案
- JIS G3507-1-2021 冷鐓用碳素鋼.第1部分:線材
- 初二家長會ppt通用PPT課件
- 小學(xué)生家庭作業(yè)布置存在的誤區(qū)及改進(jìn)策略論文1
- 生物醫(yī)學(xué)研究的統(tǒng)計(jì)學(xué)方法課后習(xí)題答案 2014 主編 方積乾
- 牛仔面料成本核算
- 加拿大礦業(yè)政策
評論
0/150
提交評論