付揚 李成



摘? 要: 利用SoPC設計靈活和軟硬件可編程的優勢,開發設計基于Nios Ⅱ嵌入式軟核的SoPC音頻播放系統。該設計在SoPC Builder下開發了基于Nios Ⅱ軟核的基本系統,利用Verilog語言進行了I2C數據傳輸模塊和音頻配置模塊的硬件設計,并在Nios Ⅱ IDE軟件環境下實現音頻播放的軟件設計。以Altera公司FPGA EP2C35F48418為核心芯片,以TLV320AIC23B為音頻模塊,通過SoPC的軟硬件協同設計成功實現了一款通用的音頻播放系統。該設計采用SoPC技術,具有可靠性、靈活性和擴展性強的優勢。
關鍵詞: 音頻播放; 系統開發; 硬件配置; 軟件設計; 系統驗證; 協同設計
中圖分類號: TN912.2?34? ? ? ? ? ? ? ? ? ? ? ? ? 文獻標識碼: 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? 引? 言
可編程片上系統(System on a Programmable Chip,SoPC)是一種特殊的嵌入式系統,首先它由單個FPGA芯片融入了很多模塊,特別是軟核微處理器,能夠完成整個系統的主要邏輯功能,其次它是可編程系統,具有靈活的設計方式,可裁減、可擴充、可升級,具備軟硬件在系統可編程的功能。Altera 公司的Nios Ⅱ軟核處理器是基于哈佛結構的RISC通用嵌入式處理器軟核,能與用戶邏輯相結合,編程至該公司的FPGA中,處理器具有32位指令集、32位數據通道、可配置的指令以及數據緩沖,它特別為可編程邏輯進行了優化設計。以Nios Ⅱ軟核為處理器的SoPC設計靈活、高效、成本低廉,以此開發的消費電子產品將具有很大的競爭力。
多媒體技術中,特別是音頻播放技術,在手持終端產品中具有巨大應用潛力和市場前景,基于SoPC技術設計開發支持多媒體技術的手持播放產品將具有可靠性高、體積小、耗電少和靈活性強等特點。本設計采用SoPC設計方案,基于Nios Ⅱ處理器軟核構建系統,利用Verilog硬件描述語言完成了I2C數據傳輸模塊、音頻配置模塊等系統與外圍硬件接口的設計,并通過軟件實現從SD卡中讀取數據并傳送到硬件系統中對數據進行處理,最終實現了具有大容量移動存儲功能并能流暢播放音頻文件的音頻播放系統[1]。
1? 硬件模塊化設計
利用Quartus Ⅱ軟件中的SoPC Builder創建基于Nios Ⅱ處理器的基本系統,在此系統的基礎之上,通過Verilog硬件描述語言設計I2C通信模塊、音頻配置模塊,并對各個模塊進行仿真驗證,最終完成硬件總體結構的設計[2]。
1.1? 基于NiosⅡ軟核基本系統構建
為了更好地完成數據的傳輸與儲存,并且保證音頻文件播放的流暢性,在構建一個SoPC系統時選用Nios Ⅱ/f快速軟核。此軟核具有最高的系統性能,中等FPGA使用量。在添加Nios Ⅱ/f快速軟核時將重置向量存儲器設置為FLASH,常向量存儲器設置為SDRAM,并設置偏移地址以保證此內核可以正常工作。選用Nios Ⅱ處理器后,繼續為系統配置SDRAM存儲器、TIMER定時器、System ID peripheral系統標識符、Avalon?MM流水線橋接口IP核、JTAG邊界掃描調試串口IP核、定時器EPCS控制器、FLASH控制器、外部存儲器控制器、三態總線橋等系統必要的IP核,如圖1所示,分配好地址范圍后,構成基于Nios Ⅱ的基本系統[3]。
1.2? I2C數據傳輸模塊設計
I2C由兩條雙向串行總線(SCL,SDA)構成,可以完成多個器件之間的數據交換。主從器件之間在SDA總線上進行數據傳輸,SCL總線的功能是進行時鐘同步。數據傳輸以字節為單位,每位占用一個時鐘,其中最高有效位在先,每個字節后跟隨一個應答位(ACK)。只有在總線處于“非忙”狀態時,數據傳輸才能開始。在數據傳輸期間,只要時鐘線為高電平,數據線都必須保持穩定,否則數據線上的任何變化都被當作“啟動”或“停止”信號。當時鐘線SCL為高電平狀態時,數據線SDA由低電平變為高電平的上升沿被認為是“停止”信號。隨著“停止”信號的出現,所有的外部操作都結束。audio_config中I2C總線配置模塊是按照上述I2C總線規范和標準時序,用Verilog語言設計實現的[4]。
I2C控制器需要在33個時鐘周期內完成一次24位的數據傳輸。I2C控制器完成一次數據傳輸可以分為4個階段:第1個階段為初始化控制器;第2個階段為啟動傳輸;第3個階段為傳輸數據;第4個階段為停止傳輸。初始化控制器在第1個時鐘周期完成,啟動傳輸在第2和第3周期完成,數據傳輸在第4~30周期完成,其中包含3個ACK應答位,而停止傳輸則在最后3個周期完成。設置一個6位的計數器SD?COUNTER用于對傳輸周期進行計數。設置一個寄存器SCLK用于產生開始與停止的條件。在開始前與停止后SCLK均保持高電平,數據傳輸階段為低電平[5]。對設計模塊進行時序仿真,結果如圖2所示。
通過時序仿真圖2可以看出,根據設計計數器的值在4~30之間是產生與時鐘信號同頻率的SCLK信號。為模擬數據的傳輸,將數據信號DATA始終設置為0。可以看到在計數器為0~2時,把數據儲存到24位寄存器SD0中,在計數器為3~11時發送從設備地址,在計數器為12~20時發送從設備寄存器地址,在計數器為21~29時發送數據,在計數器為30~32時停止,并在每部分完成后將SD0置1作為ACK應答位。在傳輸開始之前和傳輸結束之后SCLK均保持高電平。可見時序仿真結果驗證了本模塊設計的正確性。
1.3? 音頻配置模塊設計
音頻配置模塊設計選用型號為TLV320AIC23B的芯片對音頻信號進行處理。FPGA通過TLV320AIC23B芯片的控制接口,對TLV320AIC23B芯片的11個控制寄存器輸入控制字,用以設置芯片的工作模式。而該芯片有兩種控制接口類型,分別是三線模式的SPI接口和兩線模式的I2C接口模式。因為選用了I2C接口模式,所以MODE=0。TLV320AIC23與FPGA器件EP2C25F48418的連接結構如圖3所示[6]。
在2?wire模式下,數據利用SDIN傳送串行數據,SCLK作為串行時鐘。SCLK為高電平時,SDIN產生一個下降沿指示傳輸開始。開始沿的后7位決定2?wire總線上的哪個設備接收數據。R/W決定了數據傳輸的方向。TLV320AIC23B是一個僅寫設備,所以僅當R/W為0時設備反應。在此模式下,TLV320AIC23B僅工作于從模式,其地址由CS管腳決定。通過第9個時鐘周期將SDIN的一個上升沿用來標志傳輸結束。控制字分為兩個部分:一個部分為地址;另一個部分為控制數據。B[15:9]為地址,B[8:0]為控制數據[7]。
根據以上時序要求在Quartus Ⅱ開發環境下通過Verilog硬件描述語言描述audio_config模塊,在該模塊中調用I2C_Controller模塊根據I2C協議對數據進行傳輸,并對TLV320AIC23B進行配置[8]。對此模塊進行的仿真如圖4所示。為便于觀察結果,將時鐘頻率與I2C傳輸頻率之比調低。從圖中可以看出,該模塊實現了對時鐘模塊的分頻,使其與I2C控制模塊頻率相匹配,從而能夠正確地完成數據的傳輸。mSetup_ST寄存器在不同狀態下完成了對標志位的改變,同時LUT_INDEX寄存器在不同狀態下根據TLV320AIC23B寄存器地址把數據傳輸給LUT_DATA寄存器,完成了對TLV320AIC23B的配置,此時序仿真驗證了此模塊滿足設計要求。
2? 系統FPGA驗證
在系統硬件中,除了基于Nios Ⅱ的基本系統和音頻配置模塊外,為使系統能夠正常運行還需要加入鎖相環PLL(Phase?lock Loop),設計所使用的開發平臺上只有一個50 MHz的時鐘信號,通過PLL生成三個50 MHz的時鐘,一個為系統時鐘,另外兩個50 MHz的時鐘分別為存儲器提供時鐘信號及外設芯片的時鐘信號。使用Altera的基本宏功能來生成PLL,通過Altera的IP工具MegaWizard管理器定制基本宏功能參數。設置輸入輸出管腳,對整個系統進行編譯,從而完成了整個系統硬件部分的配置與設計[9]。
系統成功完成FPGA驗證,編譯報告如圖5所示,整個SoPC系統硬件占用EP2C35F48418芯片6 075個邏輯單元,占用芯片資源的18%,其中用于實現組合邏輯功能的LUT表使用了5 311個,寄存器總共使用了3 305個,使用片內存儲器96 384位以及1個PLL鎖相環, 很好地完成硬件配置。
3? 軟硬件協同設計實現音頻播放
為滿足SD卡讀取數據的相關時序并讀取相應的數據,在SD_Card.h文件中定義如下語句,通過軟件與硬件結合的方式,將數據送到相關的接口,從而按照SD卡時序要求完成數據讀取的任務[10]。
//SD卡設置輸入輸出方向
#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的函數為SD_read_lba(Buffer,j,1);表示從SD Card的第j個扇區開始,讀取一個扇區放在 char Buffer[]里。這樣就可以從SD Card里讀取數據,需要設置4個全局變量以跟蹤SD Card的讀取情況,流程圖如圖6所示。Int Sector:記錄SD Card的扇區;Unsigned char Buffer[512]:從SD Card里讀出來先放在這里;Int IsFinish:判斷第j個扇區是否用完;Int Sector
OffSet:Buffer數組中的下標。
系統運行后從控制臺打印出的系統讀取當前的字節數,這些數據表明系統正在從SD卡中讀取音頻文件數據到緩沖區SDRAM中,驗證了之前通過PIO接口以軟硬件結合的方式來滿足SD卡傳輸數據的時序要求,從而驗證了從SD卡中數據讀取任務完成的正確性。
播放的音頻文件為WAV格式。WAV為微軟公司開發的一種聲音文件格式,它符合RIFF(Resource Interchange File Format)文件規范,用于保存Windows平臺的音頻信息資源,被Windows平臺及其應用程序所廣泛支持,支持多種音頻數字,取樣頻率和聲道。標準格式化的WAV文件和CD格式一樣,也是44.1 kHz的取樣頻率,16位量化數字,因此聲音文件質量和CD相差無幾。音頻DAC控制器被集成到了Avalon總線結構中,Nios Ⅱ處理器檢查音頻DAC控制器的FIFO存儲器是否被填滿。如果FIFO不滿,處理器讀取一個512字節段,通過Avalon總線將數據發送至音頻DAC控制器的FIFO。AUD_FULL_BASE變量為標志判斷存儲器是否已滿,在已經完成數據讀取的情況下,便可以將讀入的音頻文件的數據流輸入到由TLV320AIC23B為主體的音頻播放模塊,即可完成音頻播放的任務[11]。
通過NiosⅡ處理器系統硬件運行此軟件,在控制臺可以看到顯示SD卡中的數據被讀入到系統緩存中,讀入無誤并且完成后便可將耳機或者揚聲器連接到音頻輸出接口,即可聽到聲音清晰且播放流暢的音頻文件,從而成功實現了基于NiosⅡ軟核的音頻播放系統的設計。
4? 結? 語
本文設計采用超大規模集成電路,實現基于 Nios Ⅱ軟核為核心的SoPC嵌入式數字音頻播放系統。 該系統通過Verilog語言對I2C數據傳輸模塊和音頻處理模塊的設計,很好地解決了數據傳輸和FPGA與TLV320AIC23B之間接口的匹配問題,并通過SoPC的軟硬件協同設計實現了音頻文件的流暢播放。由于采用先進的SoPC技術,選用Nios Ⅱ軟核作為處理器,使得在較低的時鐘頻率下具備更高性能和具有硬件加速、定制指令等優勢,同時模塊的Verilog硬件語言設計具有極大的靈活性,所以該音頻播放器具有處理能力強、復用性強、可裁剪、擴展性好等特點,該設計在多媒體產品中具有一定實用價值和應用前景。
參考文獻
[1] CHU P P.基于Nios Ⅱ的嵌入式SoPC系統設計與Verilog開發實例[M].金明錄,門宏志,譯.北京:電子工業出版社,2015.
[2] 楊秀增,楊仁桓.基于FPGA的高精度超聲波測距儀設計[J].現代電子技術,2017,40(1):145?147.
[3] 張艷.基于FPGA低頻信號發生及分析儀設計[J].自動化與儀器儀表,2016(6):40?41.
[4] 吳厚航.深入淺出玩轉FPGA[M].北京:北京航空航天大學出版社,2017.
[5] 張曉龍.基于Avalon?MM的I2C總線控制器設計及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Ⅱ的音頻錄播系統設計[J].計算機應用,2014,34(z1):262?264.
[8] 秦玉龍.Avalon總線的音頻編解碼控制器IP核設計[J].單片機與嵌入式系統應用,2017,17(6):60?62.
[9] 萬宇,祝忠明,李燦,等.基于Nios Ⅱ的音頻播放器硬件實現[J].中國集成電路設計,2014(10):33?36.
[10] 陳俠,李開航.基于SoPC和Nios Ⅱ的SD卡文件系統的設計[J].現代電子技術,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.