Abstract
在上一篇blog,我們學會如何開發一個硬體Controller,並加上軟體API,讓Nios II軟體能順利地控制硬體,並且讓七段顯示器從0屬到100。或許由同學會問:『要讓七段顯示器從0數到100,我用純硬體的方式開發,全部的Verilog程式碼不超過50行,為什麼要大費周章的使用軟硬體設計的方式呢?還要多學了SOPC Builder、Avalon Bus、Nios II,增加學習曲線,執行速度也比純硬體慢,FPGA所使用的資源(LE)也比純硬體多很多!!』
本Lab是軟硬體設計的精典範例,你將會感受出軟硬體設計的威力。
Introduction
使用環境:Quartus II 8.1 + Nios II EDS 8.1 + DE2-70 (Cyclone II EP2C70F896C6N)
這4篇原本是設計在一起的lab,適合初學者從0開始慢慢熟悉Quartus II、SOPC Builder、Nios II EDS、Avalon Bus Slave、Avalon Bus Master。
(原創) 如何自己用SOPC Builder建立一個能在DE2-70上跑μC/OS-II的Nios II系統? (SOC) (Quartus II) (SOPC Builder) (Nios II) (μC/OS-II) (DE2-70)(原創) 如何設計一個七段顯示器Controller? (SOC) (Quartus II) (SOPC Builder) (Nios II) (DE2-70)
(原創) 如何設計一個SD卡Wav Player? (SOC) (Quartus II) (SOPC Builder) (Nios II) (DE2-70)
(原創) 如何設計一個數位相框? (SOC) (Quartus II) (SOPC Builder) (Nios II) (DE2-70)
(本範例取自Terasic範例光碟,並非我個人設計,我只是稍加修改適合教學)
系統架構圖
硬體部分
將lab3_files.7z的DE2_70_SD_Card_Audio_Player複製到c:\DE2-70下
Step 1:
加入I2C
新增了i2c_sclk與i2c_sdat
其實只是PIO
Step 2:
加入SDCard
(demo如何插入SD卡)
其實只是PIO
Step 3:
加入Audio Controller
Altera並沒有內建Audio Controller,目前用的controller是由Terasic所提供,注意他的clk是18MHz,與其他周邊都不一樣。
Audio Controller含有source code可供研究。
Step 4:
加入7段顯示器
Altera沒有內建7段顯示器Controller,,目前用的controller是由Terasic所提供,其實這個controller與(原創) 如何設計一個七段顯示器Controller? (SOC) (Quartus II) (SOPC Builder) (Nios II) (DE2-70)我們自己寫的controller是完全一樣的。
Step 5:
SOPC Builder Generate
Quartus II編譯
Programmer燒入FPGA
軟體部分
Step 6:
Import DE2_70_SD_Card_Audio_Player與DE2_70_SD_Card_Audio_Player_syslib_0
用相同的方法import DE2_70_SD_Card_Audio_Player_syslib_0。
Step 7:
修改main.c
main.c / C
將265行與270行改成
bSuccess = Fat_FileOpen(&gWavePlay.hFile, pFilename);if (!bSuccess) DEMO_PRINTF("wave file open fail.\n"); if (bSuccess) { bSuccess = Fat_FileRead(&gWavePlay.hFile, gWavePlay.szBuf, WAVE_BUF_SIZE);
Fat_FileOpen()與Fat_FileRead()是FatFileSystem.h所提供的API,負責讀取SD卡中的wav檔。
Step 8:
將gcc編譯改成release模式
這是本實驗一個大trick,很多人最後結果失敗,都因為少了這個步驟,Altera與Terasic都沒有提到這點。
Step 9:
Run As Hardware
將lab3_wav1.7z與lab3_wav2.7z放到SD卡上,執行成功,將可聽到貝多芬的『給愛麗絲』。
操作方式
KEY1:Volumn Down
KEY2:Volumn Up
KEY3:Next Song
KEY4:Repeat current song
LED會根據聲音的大小變動。
完整程式碼下載
lab3_files.7z (一個未完成的半成品,可以根著本文一步一步完成)
lab3_wav1.7z (wav檔)
lab3_wav2.7z (wav檔)
DE2_70_SD_Card_Audio_Player.7z (最後完整的結果)
Question
(這是我當時給學生的homework,各位有興趣可以自己自做做看)
1.請將gcc改用Debug模式執行,看看結果如何?並解釋為什麼Debug模式會有這種結果。
2.使用Lab 1的Hello μC/OS-II project template,試著將本範例加上μC/OS-II。
3.能夠將本範例用純硬體實現嗎(只使用Verilog,而不使用C)?說說你的想法。
Conclusion本Lab是由DE2-70的範例DE2_70_SD_Card_Audio_Player所改編,由於軟硬體的code很多,無法一一詳解,請同學自行研究,重點放在如何使用SDCardDriver.h與FatFileSystem.h提供的API讀取SD卡上的檔案,下一個Lab的數位相框將使用這個技巧,將SD卡上的bmp檔讀入到LCD上,實做出一個數位相框。
See Also
(原創) 如何設計一個七段顯示器Controller? (SOC) (Quartus II) (SOPC Builder) (Nios II) (DE2-70)
(原創) 如何設計一個SD卡Wav Player? (SOC) (Quartus II) (SOPC Builder) (Nios II) (DE2-70)
(原創) 如何設計一個數位相框? (SOC) (Quartus II) (SOPC Builder) (Nios II) (DE2-70)
来源:https://www.cnblogs.com/oomusou/archive/2010/08/13/de2_70_sd_player.html