付揚 李成
摘? 要: 利用SoPC設(shè)計靈活和軟硬件可編程的優(yōu)勢,開發(fā)設(shè)計基于Nios Ⅱ嵌入式軟核的SoPC音頻播放系統(tǒng)。該設(shè)計在SoPC Builder下開發(fā)了基于Nios Ⅱ軟核的基本系統(tǒng),利用Verilog語言進(jìn)行了I2C數(shù)據(jù)傳輸模塊和音頻配置模塊的硬件設(shè)計,并在Nios Ⅱ IDE軟件環(huán)境下實現(xiàn)音頻播放的軟件設(shè)計。以Altera公司FPGA EP2C35F48418為核心芯片,以TLV320AIC23B為音頻模塊,通過SoPC的軟硬件協(xié)同設(shè)計成功實現(xiàn)了一款通用的音頻播放系統(tǒng)。該設(shè)計采用SoPC技術(shù),具有可靠性、靈活性和擴(kuò)展性強的優(yōu)勢。
關(guān)鍵詞: 音頻播放; 系統(tǒng)開發(fā); 硬件配置; 軟件設(shè)計; 系統(tǒng)驗證; 協(xié)同設(shè)計
中圖分類號: TN912.2?34? ? ? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識碼: A? ? ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2020)10?0059?04
Design and implementation of audio playing system based on NiosⅡsoft core
FU Yang, LI Cheng
(College of Computer and Information Engineering, Beijing Technology and Business University, Beijing 100048, China)
Abstract: The SoPC audio playing system based on Nios Ⅱ embedded soft core is developed and designed by making use of the SoPC′s advantages of flexible design and programmable software and hardware. In this design, the basic system based on Nios Ⅱ soft core is developed with the SoPC Builder, the hardware designs of I2C data transmission module and audio configuration module are performed by means of the Verilog language, and the software design of audio playing is realized in the Nios Ⅱ IDE software environment. With FPGA EP2C35F48418 made in Altera Corporation as the core chip and TLV320AIC23B as the audio module, a universal audio playing system is implemented successfully by means of the co?design of SoPC hardware and software. The SoPC technology is adopted in the design, and the design has the advantages of reliability, flexibility and expansibility.
Keywords: audio player; system development; hardware configuration; software design; system verification; co?design
0? 引? 言
可編程片上系統(tǒng)(System on a Programmable Chip,SoPC)是一種特殊的嵌入式系統(tǒng),首先它由單個FPGA芯片融入了很多模塊,特別是軟核微處理器,能夠完成整個系統(tǒng)的主要邏輯功能,其次它是可編程系統(tǒng),具有靈活的設(shè)計方式,可裁減、可擴(kuò)充、可升級,具備軟硬件在系統(tǒng)可編程的功能。Altera 公司的Nios Ⅱ軟核處理器是基于哈佛結(jié)構(gòu)的RISC通用嵌入式處理器軟核,能與用戶邏輯相結(jié)合,編程至該公司的FPGA中,處理器具有32位指令集、32位數(shù)據(jù)通道、可配置的指令以及數(shù)據(jù)緩沖,它特別為可編程邏輯進(jìn)行了優(yōu)化設(shè)計。以Nios Ⅱ軟核為處理器的SoPC設(shè)計靈活、高效、成本低廉,以此開發(fā)的消費電子產(chǎn)品將具有很大的競爭力。
多媒體技術(shù)中,特別是音頻播放技術(shù),在手持終端產(chǎn)品中具有巨大應(yīng)用潛力和市場前景,基于SoPC技術(shù)設(shè)計開發(fā)支持多媒體技術(shù)的手持播放產(chǎn)品將具有可靠性高、體積小、耗電少和靈活性強等特點。本設(shè)計采用SoPC設(shè)計方案,基于Nios Ⅱ處理器軟核構(gòu)建系統(tǒng),利用Verilog硬件描述語言完成了I2C數(shù)據(jù)傳輸模塊、音頻配置模塊等系統(tǒng)與外圍硬件接口的設(shè)計,并通過軟件實現(xiàn)從SD卡中讀取數(shù)據(jù)并傳送到硬件系統(tǒng)中對數(shù)據(jù)進(jìn)行處理,最終實現(xiàn)了具有大容量移動存儲功能并能流暢播放音頻文件的音頻播放系統(tǒng)[1]。
1? 硬件模塊化設(shè)計
利用Quartus Ⅱ軟件中的SoPC Builder創(chuàng)建基于Nios Ⅱ處理器的基本系統(tǒng),在此系統(tǒng)的基礎(chǔ)之上,通過Verilog硬件描述語言設(shè)計I2C通信模塊、音頻配置模塊,并對各個模塊進(jìn)行仿真驗證,最終完成硬件總體結(jié)構(gòu)的設(shè)計[2]。
1.1? 基于NiosⅡ軟核基本系統(tǒng)構(gòu)建
為了更好地完成數(shù)據(jù)的傳輸與儲存,并且保證音頻文件播放的流暢性,在構(gòu)建一個SoPC系統(tǒng)時選用Nios Ⅱ/f快速軟核。此軟核具有最高的系統(tǒng)性能,中等FPGA使用量。在添加Nios Ⅱ/f快速軟核時將重置向量存儲器設(shè)置為FLASH,常向量存儲器設(shè)置為SDRAM,并設(shè)置偏移地址以保證此內(nèi)核可以正常工作。選用Nios Ⅱ處理器后,繼續(xù)為系統(tǒng)配置SDRAM存儲器、TIMER定時器、System ID peripheral系統(tǒng)標(biāo)識符、Avalon?MM流水線橋接口IP核、JTAG邊界掃描調(diào)試串口IP核、定時器EPCS控制器、FLASH控制器、外部存儲器控制器、三態(tài)總線橋等系統(tǒng)必要的IP核,如圖1所示,分配好地址范圍后,構(gòu)成基于Nios Ⅱ的基本系統(tǒng)[3]。
1.2? I2C數(shù)據(jù)傳輸模塊設(shè)計
I2C由兩條雙向串行總線(SCL,SDA)構(gòu)成,可以完成多個器件之間的數(shù)據(jù)交換。主從器件之間在SDA總線上進(jìn)行數(shù)據(jù)傳輸,SCL總線的功能是進(jìn)行時鐘同步。數(shù)據(jù)傳輸以字節(jié)為單位,每位占用一個時鐘,其中最高有效位在先,每個字節(jié)后跟隨一個應(yīng)答位(ACK)。只有在總線處于“非忙”狀態(tài)時,數(shù)據(jù)傳輸才能開始。在數(shù)據(jù)傳輸期間,只要時鐘線為高電平,數(shù)據(jù)線都必須保持穩(wěn)定,否則數(shù)據(jù)線上的任何變化都被當(dāng)作“啟動”或“停止”信號。當(dāng)時鐘線SCL為高電平狀態(tài)時,數(shù)據(jù)線SDA由低電平變?yōu)楦唠娖降纳仙乇徽J(rèn)為是“停止”信號。隨著“停止”信號的出現(xiàn),所有的外部操作都結(jié)束。audio_config中I2C總線配置模塊是按照上述I2C總線規(guī)范和標(biāo)準(zhǔn)時序,用Verilog語言設(shè)計實現(xiàn)的[4]。
I2C控制器需要在33個時鐘周期內(nèi)完成一次24位的數(shù)據(jù)傳輸。I2C控制器完成一次數(shù)據(jù)傳輸可以分為4個階段:第1個階段為初始化控制器;第2個階段為啟動傳輸;第3個階段為傳輸數(shù)據(jù);第4個階段為停止傳輸。初始化控制器在第1個時鐘周期完成,啟動傳輸在第2和第3周期完成,數(shù)據(jù)傳輸在第4~30周期完成,其中包含3個ACK應(yīng)答位,而停止傳輸則在最后3個周期完成。設(shè)置一個6位的計數(shù)器SD?COUNTER用于對傳輸周期進(jìn)行計數(shù)。設(shè)置一個寄存器SCLK用于產(chǎn)生開始與停止的條件。在開始前與停止后SCLK均保持高電平,數(shù)據(jù)傳輸階段為低電平[5]。對設(shè)計模塊進(jìn)行時序仿真,結(jié)果如圖2所示。
通過時序仿真圖2可以看出,根據(jù)設(shè)計計數(shù)器的值在4~30之間是產(chǎn)生與時鐘信號同頻率的SCLK信號。為模擬數(shù)據(jù)的傳輸,將數(shù)據(jù)信號DATA始終設(shè)置為0??梢钥吹皆谟嫈?shù)器為0~2時,把數(shù)據(jù)儲存到24位寄存器SD0中,在計數(shù)器為3~11時發(fā)送從設(shè)備地址,在計數(shù)器為12~20時發(fā)送從設(shè)備寄存器地址,在計數(shù)器為21~29時發(fā)送數(shù)據(jù),在計數(shù)器為30~32時停止,并在每部分完成后將SD0置1作為ACK應(yīng)答位。在傳輸開始之前和傳輸結(jié)束之后SCLK均保持高電平??梢姇r序仿真結(jié)果驗證了本模塊設(shè)計的正確性。
1.3? 音頻配置模塊設(shè)計
音頻配置模塊設(shè)計選用型號為TLV320AIC23B的芯片對音頻信號進(jìn)行處理。FPGA通過TLV320AIC23B芯片的控制接口,對TLV320AIC23B芯片的11個控制寄存器輸入控制字,用以設(shè)置芯片的工作模式。而該芯片有兩種控制接口類型,分別是三線模式的SPI接口和兩線模式的I2C接口模式。因為選用了I2C接口模式,所以MODE=0。TLV320AIC23與FPGA器件EP2C25F48418的連接結(jié)構(gòu)如圖3所示[6]。
在2?wire模式下,數(shù)據(jù)利用SDIN傳送串行數(shù)據(jù),SCLK作為串行時鐘。SCLK為高電平時,SDIN產(chǎn)生一個下降沿指示傳輸開始。開始沿的后7位決定2?wire總線上的哪個設(shè)備接收數(shù)據(jù)。R/W決定了數(shù)據(jù)傳輸?shù)姆较?。TLV320AIC23B是一個僅寫設(shè)備,所以僅當(dāng)R/W為0時設(shè)備反應(yīng)。在此模式下,TLV320AIC23B僅工作于從模式,其地址由CS管腳決定。通過第9個時鐘周期將SDIN的一個上升沿用來標(biāo)志傳輸結(jié)束??刂谱址譃閮蓚€部分:一個部分為地址;另一個部分為控制數(shù)據(jù)。B[15:9]為地址,B[8:0]為控制數(shù)據(jù)[7]。
根據(jù)以上時序要求在Quartus Ⅱ開發(fā)環(huán)境下通過Verilog硬件描述語言描述audio_config模塊,在該模塊中調(diào)用I2C_Controller模塊根據(jù)I2C協(xié)議對數(shù)據(jù)進(jìn)行傳輸,并對TLV320AIC23B進(jìn)行配置[8]。對此模塊進(jìn)行的仿真如圖4所示。為便于觀察結(jié)果,將時鐘頻率與I2C傳輸頻率之比調(diào)低。從圖中可以看出,該模塊實現(xiàn)了對時鐘模塊的分頻,使其與I2C控制模塊頻率相匹配,從而能夠正確地完成數(shù)據(jù)的傳輸。mSetup_ST寄存器在不同狀態(tài)下完成了對標(biāo)志位的改變,同時LUT_INDEX寄存器在不同狀態(tài)下根據(jù)TLV320AIC23B寄存器地址把數(shù)據(jù)傳輸給LUT_DATA寄存器,完成了對TLV320AIC23B的配置,此時序仿真驗證了此模塊滿足設(shè)計要求。
2? 系統(tǒng)FPGA驗證
在系統(tǒng)硬件中,除了基于Nios Ⅱ的基本系統(tǒng)和音頻配置模塊外,為使系統(tǒng)能夠正常運行還需要加入鎖相環(huán)PLL(Phase?lock Loop),設(shè)計所使用的開發(fā)平臺上只有一個50 MHz的時鐘信號,通過PLL生成三個50 MHz的時鐘,一個為系統(tǒng)時鐘,另外兩個50 MHz的時鐘分別為存儲器提供時鐘信號及外設(shè)芯片的時鐘信號。使用Altera的基本宏功能來生成PLL,通過Altera的IP工具M(jìn)egaWizard管理器定制基本宏功能參數(shù)。設(shè)置輸入輸出管腳,對整個系統(tǒng)進(jìn)行編譯,從而完成了整個系統(tǒng)硬件部分的配置與設(shè)計[9]。
系統(tǒng)成功完成FPGA驗證,編譯報告如圖5所示,整個SoPC系統(tǒng)硬件占用EP2C35F48418芯片6 075個邏輯單元,占用芯片資源的18%,其中用于實現(xiàn)組合邏輯功能的LUT表使用了5 311個,寄存器總共使用了3 305個,使用片內(nèi)存儲器96 384位以及1個PLL鎖相環(huán), 很好地完成硬件配置。
3? 軟硬件協(xié)同設(shè)計實現(xiàn)音頻播放
為滿足SD卡讀取數(shù)據(jù)的相關(guān)時序并讀取相應(yīng)的數(shù)據(jù),在SD_Card.h文件中定義如下語句,通過軟件與硬件結(jié)合的方式,將數(shù)據(jù)送到相關(guān)的接口,從而按照SD卡時序要求完成數(shù)據(jù)讀取的任務(wù)[10]。
//SD卡設(shè)置輸入輸出方向
#define SD_CMD_IN? ?IOWR(SD_CMD_BASE, 1, 0)
#define SD_CMD_OUT? IOWR(SD_CMD_BASE, 1, 1)
#define SD_DAT_IN? ?IOWR(SD_DAT_BASE, 1, 0)
#define SD_DAT_OUT? IOWR(SD_DAT_BASE, 1, 1)
// SD卡輸出高低電平
#define SD_CMD_LOW? IOWR(SD_CMD_BASE, 0, 0)
#define SD_CMD_HIGH IOWR(SD_CMD_BASE, 0, 1)
#define SD_DAT_LOW? IOWR(SD_DAT_BASE, 0, 0)
#define SD_DAT_HIGH IOWR(SD_DAT_BASE, 0, 1)
#define SD_CLK_LOW? IOWR(SD_CLK_BASE, 0, 0)
#define SD_CLK_HIGH IOWR(SD_CLK_BASE, 0, 1)
//SD卡輸入讀操作
#define SD_TEST_CMD IORD(SD_CMD_BASE, 0)
#define SD_TEST_DAT IORD(SD_DAT_BASE, 0)
讀取SD Card的函數(shù)為SD_read_lba(Buffer,j,1);表示從SD Card的第j個扇區(qū)開始,讀取一個扇區(qū)放在 char Buffer[]里。這樣就可以從SD Card里讀取數(shù)據(jù),需要設(shè)置4個全局變量以跟蹤SD Card的讀取情況,流程圖如圖6所示。Int Sector:記錄SD Card的扇區(qū);Unsigned char Buffer[512]:從SD Card里讀出來先放在這里;Int IsFinish:判斷第j個扇區(qū)是否用完;Int Sector
OffSet:Buffer數(shù)組中的下標(biāo)。
系統(tǒng)運行后從控制臺打印出的系統(tǒng)讀取當(dāng)前的字節(jié)數(shù),這些數(shù)據(jù)表明系統(tǒng)正在從SD卡中讀取音頻文件數(shù)據(jù)到緩沖區(qū)SDRAM中,驗證了之前通過PIO接口以軟硬件結(jié)合的方式來滿足SD卡傳輸數(shù)據(jù)的時序要求,從而驗證了從SD卡中數(shù)據(jù)讀取任務(wù)完成的正確性。
播放的音頻文件為WAV格式。WAV為微軟公司開發(fā)的一種聲音文件格式,它符合RIFF(Resource Interchange File Format)文件規(guī)范,用于保存Windows平臺的音頻信息資源,被Windows平臺及其應(yīng)用程序所廣泛支持,支持多種音頻數(shù)字,取樣頻率和聲道。標(biāo)準(zhǔn)格式化的WAV文件和CD格式一樣,也是44.1 kHz的取樣頻率,16位量化數(shù)字,因此聲音文件質(zhì)量和CD相差無幾。音頻DAC控制器被集成到了Avalon總線結(jié)構(gòu)中,Nios Ⅱ處理器檢查音頻DAC控制器的FIFO存儲器是否被填滿。如果FIFO不滿,處理器讀取一個512字節(jié)段,通過Avalon總線將數(shù)據(jù)發(fā)送至音頻DAC控制器的FIFO。AUD_FULL_BASE變量為標(biāo)志判斷存儲器是否已滿,在已經(jīng)完成數(shù)據(jù)讀取的情況下,便可以將讀入的音頻文件的數(shù)據(jù)流輸入到由TLV320AIC23B為主體的音頻播放模塊,即可完成音頻播放的任務(wù)[11]。
通過NiosⅡ處理器系統(tǒng)硬件運行此軟件,在控制臺可以看到顯示SD卡中的數(shù)據(jù)被讀入到系統(tǒng)緩存中,讀入無誤并且完成后便可將耳機或者揚聲器連接到音頻輸出接口,即可聽到聲音清晰且播放流暢的音頻文件,從而成功實現(xiàn)了基于NiosⅡ軟核的音頻播放系統(tǒng)的設(shè)計。
4? 結(jié)? 語
本文設(shè)計采用超大規(guī)模集成電路,實現(xiàn)基于 Nios Ⅱ軟核為核心的SoPC嵌入式數(shù)字音頻播放系統(tǒng)。 該系統(tǒng)通過Verilog語言對I2C數(shù)據(jù)傳輸模塊和音頻處理模塊的設(shè)計,很好地解決了數(shù)據(jù)傳輸和FPGA與TLV320AIC23B之間接口的匹配問題,并通過SoPC的軟硬件協(xié)同設(shè)計實現(xiàn)了音頻文件的流暢播放。由于采用先進(jìn)的SoPC技術(shù),選用Nios Ⅱ軟核作為處理器,使得在較低的時鐘頻率下具備更高性能和具有硬件加速、定制指令等優(yōu)勢,同時模塊的Verilog硬件語言設(shè)計具有極大的靈活性,所以該音頻播放器具有處理能力強、復(fù)用性強、可裁剪、擴(kuò)展性好等特點,該設(shè)計在多媒體產(chǎn)品中具有一定實用價值和應(yīng)用前景。
參考文獻(xiàn)
[1] CHU P P.基于Nios Ⅱ的嵌入式SoPC系統(tǒng)設(shè)計與Verilog開發(fā)實例[M].金明錄,門宏志,譯.北京:電子工業(yè)出版社,2015.
[2] 楊秀增,楊仁桓.基于FPGA的高精度超聲波測距儀設(shè)計[J].現(xiàn)代電子技術(shù),2017,40(1):145?147.
[3] 張艷.基于FPGA低頻信號發(fā)生及分析儀設(shè)計[J].自動化與儀器儀表,2016(6):40?41.
[4] 吳厚航.深入淺出玩轉(zhuǎn)FPGA[M].北京:北京航空航天大學(xué)出版社,2017.
[5] 張曉龍.基于Avalon?MM的I2C總線控制器設(shè)計及VMM驗證[J].計算機測量與控制,2016,24(2):147?150.
[6] Altera Corporation. Avalon interface specification [EB/OL]. [2013?11?01]. http://www.Altera.com.cn /devices/processor/nios2/benefits/performance/ni2?high?performance. html.
[7] 江一帆,江飚.基于NiosⅡ的音頻錄播系統(tǒng)設(shè)計[J].計算機應(yīng)用,2014,34(z1):262?264.
[8] 秦玉龍.Avalon總線的音頻編解碼控制器IP核設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2017,17(6):60?62.
[9] 萬宇,祝忠明,李燦,等.基于Nios Ⅱ的音頻播放器硬件實現(xiàn)[J].中國集成電路設(shè)計,2014(10):33?36.
[10] 陳俠,李開航.基于SoPC和Nios Ⅱ的SD卡文件系統(tǒng)的設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(16):12?14.
[11] Altera Corporation. NiosⅡcustom instruction user guide [EB/OL]. [2013?11?01]. http://www.Altera.com.cn/ literature/lit?sop.jsp.