基于DE2與NiosII的音頻錄放系統(tǒng)的設(shè)計(jì)論文_第1頁
基于DE2與NiosII的音頻錄放系統(tǒng)的設(shè)計(jì)論文_第2頁
基于DE2與NiosII的音頻錄放系統(tǒng)的設(shè)計(jì)論文_第3頁
基于DE2與NiosII的音頻錄放系統(tǒng)的設(shè)計(jì)論文_第4頁
基于DE2與NiosII的音頻錄放系統(tǒng)的設(shè)計(jì)論文_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 PAGE23 / NUMPAGES23基于DE2 與Nios II的音頻錄放系統(tǒng)的設(shè)計(jì)-系統(tǒng)篇Summary:作為2008年的電子技術(shù)課程設(shè)計(jì)的課題,我們選擇了“語音錄放系統(tǒng)”,使用Altera的DE2開發(fā)板來構(gòu)建一個基于NIOS II的嵌入式系統(tǒng),實(shí)現(xiàn)錄音以與放音的功能。主要目的是熟悉SOPC的基本概念,使用Qurtus II進(jìn)行硬件編程,Nios IDE進(jìn)行軟件編程?,F(xiàn)在就我們在具體實(shí)踐中得到的一些經(jīng)驗(yàn)做一些總結(jié)。目錄HYPERLINK l _Toc195221157目錄. 1HYPERLINK l _Toc195221158寫在前面的話. 1HYPERLINK l _Toc195221

2、159初識DE2開發(fā)板. 2HYPERLINK l _Toc195221160DE2的資源. 2HYPERLINK l _Toc195221161DE2的使用. 2HYPERLINK l _Toc195221162關(guān)于DE2資料光盤的使用. 3HYPERLINK l _Toc195221163程序下載方法. 3HYPERLINK l _Toc195221164關(guān)于管腳分配. 3HYPERLINK l _Toc195221165認(rèn)識Nios II 系統(tǒng). 4HYPERLINK l _Toc195221166Avalon總線. 5HYPERLINK l _Toc195221167利用SPOC Bu

3、ilder 創(chuàng)建 Nios II 系統(tǒng). 6HYPERLINK l _Toc195221168SPOC Builder 生成的文件. 12HYPERLINK l _Toc195221169基于Nios系統(tǒng)的頂層結(jié)構(gòu)圖. 14HYPERLINK l _Toc195221170為Avalon總線創(chuàng)建自定義組件. 15HYPERLINK l _Toc195221171用Nios IDE 和C語言編寫程序. 17HYPERLINK l _Toc195221172技術(shù)總結(jié). 20DE2 Board與 NIOS II 系統(tǒng)篇寫在前面的話 經(jīng)過一周的艱苦奮戰(zhàn),我們的語音錄放系統(tǒng)終于擺脫了只用FPGA實(shí)現(xiàn)的困

4、境,終于上了核!真正的構(gòu)建了一個基于NiosII的嵌入式軟硬件開發(fā)環(huán)境。 最開始的時候,通過對例程里面的i2sound和WM8731芯片資料的學(xué)習(xí),我們完成了“語音錄放系統(tǒng)V1.0”,主要容是通過I2C電路將WM8731配置到特定的模式,然后按照一定的時須將WM8731的ADC輸出信號存儲起來,必要的時候再從存儲器中讀取數(shù)字信號到WM8731的DAC輸出,這樣就完成了錄音放音的基本功能。但是諾大一個CycloneII 2C35加上DE2配置的超豪華外設(shè),僅僅用來做這個事情顯然有點(diǎn)大材小用,而且不便于擴(kuò)展功能,這就引出了本文要說的容。初識DE2開發(fā)板DE2的資源 DE2的資源非常豐富,包括1.

5、核心的FPGA芯片-Cyclone II 2C35 F672C6,從名稱可以看出,它包含有35千個LE,在Altera的芯片系列中,不算最多,但也絕對夠用。Altera下載控制芯片- EPCS16以與USB-Blaste對Jtag的支持。2.存儲用的芯片有: 512-KB SRAM,8-Mbyte SDRAM,4-Mbyte Flash memory3. 經(jīng)典IO配置:擁有4個按鈕,18個撥動開關(guān),18個紅色發(fā)光二極管,9個綠色發(fā)光二極管,8個七段數(shù)碼管,16*2字符液晶顯示屏,4. 超強(qiáng)多媒體:24位CD音質(zhì)音頻芯片WM8731(Mic輸入+LineIn+ 標(biāo)準(zhǔn)音頻輸出),視頻解碼芯片(支持

6、NTSC/PAL制式),帶有高速DAC視屏輸出VGA模塊。5.更多標(biāo)準(zhǔn)接口:通用串行總線USB控制模塊以與A、B型接口,SD Card接口,IrDA紅外模塊, 10/100M自適應(yīng)以太網(wǎng)絡(luò)適配器,RS-232標(biāo)準(zhǔn)串口, PS/2鍵盤接口6.其他:50M,27M晶振各一個,支持外部時鐘, 80針帶保護(hù)電路的外接IO 7.此外還有:配套的光盤資料,QutuarsII6軟件,NiosII 6.0IDE,例程與說明文檔。DE2的使用關(guān)于DE2資料光盤的使用主要的可以參看他的用戶手冊,里面有關(guān)于DE2的資料的詳細(xì)使用說明,板子的電路原理圖,模塊圖,管腳圖,和各個模塊的Datasheet等等??梢赃@樣來看

7、:DE2_System:Datasheet DE2板子上的各個模塊的詳細(xì)的官方Datasheet,來自各個芯片廠商。DE2_demonstrations 豐富的例程,里面很多適用的例子,比如SD_Music_Player.等DE2_lab_exercises DE2提供的試驗(yàn)容,里面有很詳細(xì)的操作步驟截圖。DE2_schematics DE2板子資料,包括布線,電路板的資料DE2_tutorials 例如詳細(xì)的講解SOPC Builder的使用。DE2_user_manual 用戶使用指南與手冊.綜合的說明。Altera_Debug_Client DE2的調(diào)試工具,可以直接下載Nios處理器的

8、匯編代碼,C語言代碼等。DE2_control_panel DE2控制面板,直接操作DE2板子上的各個模塊的工作狀態(tài)。程序下載方法 第一種成為RUN模式,需要將板上RUN/PROG開關(guān)(LCD旁)撥到RUN,是用USB-Blaster直接將sof文件燒到 Cyclone FPGA芯片,這樣掉電之后就沒有了,重啟后需要再次燒寫。 第二種模式為AS模式,將RUN/PROG開關(guān)撥到PROG模式,然后在Qutuars下載模式設(shè)置為AS模式,選擇pof文件下載,這樣直接下載到EPCS16 Configure芯片中,每次復(fù)位,會根據(jù)EPCS16里面的容重新燒寫Cyclone II芯片。關(guān)于管腳分配 當(dāng)我們

9、創(chuàng)建一個FPGA用戶系統(tǒng)的時候,到最后要做的工作就是下載,在下載之前必須根據(jù)芯片的型號分配管腳,這樣才能將程序中特定功能的管腳與實(shí)際中的FPGA片外硬件電路一一對應(yīng)。 通常的管腳分配使用的是拖拽法,然而在一個龐大的系統(tǒng)中,這樣是非常的不現(xiàn)實(shí),可以使用CSV文件分配法,方法是在Qurtus II的Assignment菜單下面的Import Assignment項(xiàng)中,定位到要分配的管腳文件即可(對于做Nios核必的通用管腳分配,可以參照de2_systemDE2_lab_exercisesDE2_pin_assignments.csv文件),這里有個前提,就是你的頂層文件管腳命名必須與CSV文件中

10、管腳一致。所以頂層文件如果用Verilog來寫的話那將更加的方便,當(dāng)然這是對于對于做Nios核而言的,你可以直接從Demo中拷貝一個頂層文件作為你的頂層。只要稍加修改即可,也可以定義自己的額外管教分配。 分配管腳的有一個方法是,直接修改工程文件夾里面的“qsf”文件,將相應(yīng)的端口與芯片的預(yù)設(shè)相連即可。例如:認(rèn)識Nios II 系統(tǒng) 現(xiàn)在開始寫一些關(guān)于Nios的東西,初次接觸Nios II,只能寫一些簡單初級的東西,主要是個人對它的一點(diǎn)認(rèn)識,希望能對今后新手學(xué)習(xí)提供一定的幫助。 Nios II ,準(zhǔn)確的說,是一個IP核,即知識產(chǎn)權(quán)核,使用特定的硬件描敘語言寫成的一堆代碼罷了,如果不將它燒到特定的

11、FPGA或者CPLD芯片中是沒有任何意義的。Altera的NiosII軟核,說白了就是一個CPU,部像其他處理器一樣,都包括指令解碼,地址譯碼,指令隊(duì)列,中斷管理,總線時須控制,DMA控制等等。NiosII還支持最多兩套用戶自定義指令集,者可以有用戶自定義模塊來實(shí)現(xiàn)。一個Nios系統(tǒng)應(yīng)該至少包括一個Nios CPU,1個片上RAM(Onchip-RAM),當(dāng)然還可以添加其他廠商的IP Core和自定義用戶邏輯。這些模塊共同使用者一塊包含有大量邏輯陣列的FPGA芯片,組成片上可編程系統(tǒng),也稱為SOPC (System On Programmable Chip)。 這個片上系統(tǒng)然后與外電路連接,構(gòu)

12、成一個具有特定功能的完整的用戶系統(tǒng)。下面給出一個NiosII系統(tǒng)的典型模塊圖:Avalon總線在這里不得不提Avalon總線,Avalon總線是NiosII系統(tǒng)各模塊之間的紐帶,它部復(fù)雜,但對外部卻保留著相對簡單的接口,沒有復(fù)雜的總線應(yīng)答等等,因此我們可以很方便的使用它來連接我們的自定義模塊。一個標(biāo)準(zhǔn)的用戶邏輯與Avalon總線的接口并不需要包含所有的Avalon端口類型的接口,可以一般的有以下類型的信號中的部分:比如你的用戶邏輯中主要負(fù)責(zé)采集數(shù)據(jù)給總線,那么你充當(dāng)?shù)慕巧褪菙?shù)據(jù)的提供者,你至少應(yīng)該給Avalon總線read,readdata,clk的接口,其中read為總線的讀取請求信號,對

13、用戶模塊為input, readdata信號為8,16,32位數(shù)據(jù),對用戶模塊而言為output,clk為總線為你提供的統(tǒng)一時鐘信號,可以為讀取你的設(shè)備提供時鐘。當(dāng)然總線提供的reset信號可以用作你的設(shè)備的初始化。 同理如果你是輸出模塊,從總線上面接收數(shù)據(jù),那么你應(yīng)該向Avalon總線提供write,writedata,clk的接口,如果你的模塊即是輸入又是輸出,那么你應(yīng)該他們都包括進(jìn)去。 還有就是Avalon總線提供的信號類型的名稱,一般的是高電平有效,如果是低電平有效,那么在后面會加上一個“_n”例如reset是復(fù)位類型的信號(高電平復(fù)位),那么reset_n就是低電平有效。關(guān)與Aval

14、on總線其他信號線,比如irq,readdatavalid,waitrequest, flush等等,用到的時候Google吧。利用SPOC Builder創(chuàng)建 Nios II 系統(tǒng) Qurtus II給我們提供了一個方便的創(chuàng)建Nios系統(tǒng)的工具,即SOPC Builder,這個工具只有在新建了一個Quartus工程文件后才能使用。下面我們創(chuàng)建一個Qurtus工程:輸入名稱,定位文件位置以后,選擇器件為我們使用的“Cyclone II 2C35”運(yùn)行SPOC Builder,新建Nios項(xiàng)目,輸入名稱,選擇Verilog作為生成文件的語言:然后就是添加Nios系統(tǒng)組件了:首線添加nios_cp

15、u: 雙擊左邊的系統(tǒng)模塊Nios II Processor ,彈出如下對話框:設(shè)置CPU類型,這里就使用最簡單的一種。添加以后,你可以重新給CPU命名,名一個容易記憶的名稱。然后就是選擇一個最片上RAM,選擇Avalon Components Memory On-Chip Memory (RAM or ROM),雙擊就添加了,設(shè)置類型,選擇的大小要根據(jù)開發(fā)板來定,比如我們使用的是DE2,那么最有最大Memory限制,根據(jù)情況而定。添加好了以后系統(tǒng)會自動將RAM與Avalon總線連上,窗口中個模塊前面的曲線就是這個含義。這時一個最簡單的系統(tǒng)就做好了。注意,此時如果點(diǎn)擊生成“Generate”的話

16、,會報錯,你還必須制定CPU的boot Address與reset Address雙擊cpu_0模塊,在彈出的屬性對話框中,選擇地址為你添加的On-chip Memory即可。當(dāng)然你可以添加更多模塊,也可以人工修改每個模塊的基地址。但要注意的是若果要加上CFI Flash Memory(Common Flash Interface)的話,必須要加上Avalon Tristate Bridge,即Avalon三態(tài)橋接器。通過Avalon Tristate Bridge來連接結(jié)Avalon master 和Avalon Slave。 如果你需要在運(yùn)行的時候進(jìn)行調(diào)試,你應(yīng)該加上jtag_uart模塊

17、。你可以為你的模塊選擇參數(shù),比如,你添加了一個PIO,可以選擇它是輸入還是輸出,或者是輸入輸出都有,SOPC Builder會根據(jù)你的參數(shù)產(chǎn)生相應(yīng)的HDL文件,如圖:你還可以為你加上的IO模塊產(chǎn)生中斷,比如在你自定義的模塊中向Avalon總線提供irq類型的信號,那么在SOPC Builder產(chǎn)生系統(tǒng)的時候會給你定義中斷號,比如你添加4Bit的PIO給4個Button的時候,可以選擇是否產(chǎn)生中斷,如圖:你還可以為指定為你的模塊產(chǎn)生仿真元數(shù)據(jù),提供給像ModelSim這樣的仿真軟件仿真信息,當(dāng)然Qurtus自己也能夠進(jìn)行波形仿真。SPOC Builder 生成的文件 SOPC Builder生成

18、的文件包括:核模塊的ptf文件,.sopc_builder文件加下面的install.ptf文件,nios系統(tǒng)的頂層模塊的HDL文件,例如:你的Nios工程名為nios,那么頂層文件名應(yīng)該是nios_0.v,還包括了nios_0.v調(diào)用了各個子模塊的Verilog文件。仿真文件和一些其他的其他的文件。 其中ptf文件是Nios系統(tǒng)的描敘文件,此文件在后面創(chuàng)建Nios Project時候會用到,Nios IDE通過這個文件來生成并且編譯Nios Project的庫文件,以便你在用戶C語言程序中引用。下面來看一個ptf文件: 下面來看看它生成的另外一個文件:nios_0.v這是nios系統(tǒng)的核心模

19、塊,但是還不是頂層模塊,它有時需要外部提供PLL時鐘,或者是需要將自己模塊的export管腳連接到核外用戶邏輯上??匆粋€nios_0.v:一個nios系統(tǒng)主模塊中包括很多module,但是只有只有一個module與模塊的文件名一樣,這個就是主模塊,它調(diào)用了很多組件的HDL模塊,然后將其他組件的export引腳對外暴露,各組件與CPU的連線即Avalon總線對外封閉。這里提一下核的頂層模塊(這里是nios_0.v)里面的管腳命名規(guī)則:凡是input,則為“模塊端口名稱”+“to”+“模塊實(shí)例名稱”,凡是output,則為“模塊端口名稱”+“from”+“模塊實(shí)例名稱”例如上圖中的nios_0.v

20、的核中實(shí)例化了AUDIO_MOD模塊,命名為the_AUDIO_MOD那么AUDIO_MOD的外部輸入adcclk命名為:dacclk_to_the_AUDIO_MOD.基于Nios系統(tǒng)的頂層結(jié)構(gòu)圖 這里說明以下,這里的系統(tǒng)頂層圖不是Nios的頂層圖,而是用戶創(chuàng)建的項(xiàng)目的頂層圖,它調(diào)用了用SOPC Builder創(chuàng)建的nios系統(tǒng)頂層模塊,除了包括系統(tǒng)的nios模塊外,還包括一些核外用戶邏輯,例如PLL時鐘,I2C控制塊等等。下面給出我們的音頻系統(tǒng)的頂層結(jié)構(gòu)圖。 我們可以在系統(tǒng)的頂層圖中使用用戶邏輯,此時的用戶邏輯是與系統(tǒng)總線沒有關(guān)系的,他是與Nios系統(tǒng)沒有直接關(guān)系的電路,在這兒稱之為“核外

21、用戶邏輯”,比如說在我們系統(tǒng)中的I2C對AV的配置(當(dāng)然這也能夠通過OpenI2C模塊加到總線系統(tǒng)中去),核外邏輯可以用于與核無關(guān)的部分(直接連接到外部),也可以為核提供輸入,或者接收輸出。 在Nios總線系統(tǒng)部,也可以添加用戶自定義邏輯,這時候成為用戶自定義組件,Interface To User Logics,但是這個時候就要和Avalon總線打交道了,因此必須滿足Avalon總線的規(guī)則,下面就我們的系統(tǒng)中使用的模塊做簡單介紹。為Avalon總線創(chuàng)建自定義組件 在假設(shè)WM8731芯片初始化到正常模式后,我們的用戶邏輯只需要做兩件事情:1.將WM8731的ADC輸入采集轉(zhuǎn)換成并行的16位數(shù)據(jù)

22、,送到Avalon總線2.從總線上讀取16并行數(shù)據(jù),經(jīng)過轉(zhuǎn)換,串行的送到WM8731的DAC通道上這是一個經(jīng)過測試后的獨(dú)立模塊,用圖形描述如下:和Avalon總線接口有兩個FIFO,ADC FIFO對總線有(iRD, iRD_CLK, iRST_N , oDATA)其中 iRD為read類型,iRD_CLK為clk信號,iRST_N為reset_n信號,oDATA為readdataDAC FIFO對總線有(iWR, iWR_CLK, iRST_N , iDATA)其中 iRD為read類型,iWR_CLK為clk信號,iRST_N為reset_n信號,iDATA為writedata 該模塊還與

23、三個PIO間接與總線相連,一個為輸入控制信號,另外兩個為FIFO對于總線的狀態(tài)信號。模塊的其余管腳均為export類型,連接到WM8731的硬件端口。 下面簡要說明一下在SOPC Builder里面添加自定義組件的步驟. 打開SOPC Builder ,在左邊的組件列表中選擇Interface to User Logic 雙擊,在彈出對話框中添加已經(jīng)封裝好的自定義模塊的Verilog文件,注意先添加頂層模塊,然后添加底層被調(diào)用的模塊,在添加之前首先要將這些文件拷貝到工程文件目錄。 然后點(diǎn)擊Read ports from files,然后按照剛才定義的信號類型,選擇Type,最后Filished

24、。添加完成后,重新生成你的nios系統(tǒng),這時ptf文件,以與nios的verilog文件都會做相應(yīng)的改變。但是你的QurtusII 工程頂層文件中的核模塊任然沒有更新,這個需要手動更新。你需要編輯頂層的Verilog文件,在調(diào)用nios_0.v的地方加入你的模塊,去掉無用的模塊。按照前面所說的nios系統(tǒng)的管腳命名規(guī)則,可以直接根據(jù)輸入或輸出類型直接添加模塊引腳,并且與外部電路相連,這里指的是從自定義模塊中export的管腳。例如下圖所示:經(jīng)過上面的步驟,在原來的核的基礎(chǔ)上,添加了自定義模塊,只要編譯成功,我們的核就完成了,接著就是去Nios IDE下面寫C語言程序了,前提條件是你的自定義模塊

25、已經(jīng)測試成功。用Nios IDE 和C語言編寫程序 接下來我們就可以打開Nios II IDE,新建工程了。啟動Nios II IDE (實(shí)際上是Eclipse的插件),將Workspase設(shè)置為我們的QurtusII工程目錄。New a Project ,選擇Nios II project,如圖: 點(diǎn)擊下一步。輸入工程名稱,選擇ptf文件,就是SOPC Builder建成后的ptf文件,定位好文件放置的目錄,然后就可以下一步了。新建一個工程后,就可一寫C語言程序了,新建的軟件項(xiàng)目統(tǒng)稱會包含一個syslib,這個C語言庫就是根據(jù)ptf文件生成的特定Nios系統(tǒng)的庫文件,里面定義了Nios系統(tǒng)中

26、的每一個模塊的基址,中斷地址,等等。通常,比如你有一個模塊叫做sdram_0的模塊,那么Nios II會生成相應(yīng)的模塊基址常量名為SDRAM_0_BASE,全部是大些字母,以表明是全局常量,比如你在核中加了一個button_pio的模塊,并且要求SOPC Builder產(chǎn)生中斷,那么這時你可以訪問BUTTON_PIO_IRQ來獲取中斷時間,或者捕捉中斷信號。說白了,在Nios里面用C語言編程實(shí)際上就是使用兩個函數(shù): IORD(MODULE_BASE , OFFSET_ADDR) /讀取總線上面特定設(shè)備的值,例如讀取名為sram_0的SRAM地址偏移量為0 x00001的數(shù)據(jù)(假設(shè)沒有越界,數(shù)據(jù)

27、寬度為16位),那么也可以這樣寫:int i=0 ; i=IORD(SRAM_0_BASE,0 x00001); IOWR(MODULE_BASE , OFFSET_ADDR,DATA) /向特定模塊,特定偏移地址寫入DATA數(shù)據(jù)。例如向名稱為sdram_0的SDRAM地址為0 x0002ffff的地址中寫入0 x55AA數(shù)據(jù)。可以這樣寫:IOWR(SDRAM_0_BASE,0 x0002ffff,0 x55AA);初寫程序,主要也就用到這兩個函數(shù),原因是目前只涉與到了總線設(shè)備的讀和寫。必要的時候,可以從Demo中拷貝一些現(xiàn)成的函數(shù),例如LCD的測試函數(shù),DM9000網(wǎng)卡讀寫等等,經(jīng)過整理,工程文件加里面的函數(shù)文件越來越多,你可以編寫復(fù)雜的程序了。下面是Nios II IDE的工作環(huán)境:還有一個值得注意的就是中斷的設(shè)置函數(shù),以下舉按鈕的中斷設(shè)置為例:voidButton_Irq_Init()/* Enable all 4 button interrupts. */ set_pio_irq_mask(BUTTON_PIO_BASE, BUTTON_INT_MASK);/* Reset the edge capture register. */ set_pio_edge_cap(BUTTON_PIO_BASE

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論