權震華,羅 亮
(西南科技大學 信息工程學院,四川 綿陽621010)
數碼電子音樂相冊形式新穎、展示信息豐富,在商場、站臺、家庭有著廣泛的應用。本文提出了一種基于SoPC技術的數碼電子音樂相冊設計方案,在FPGA內部定制一個Nios II軟核處理器,再以其為核心,配以一定的外圍電路和驅動程序設計,通過軟硬件協同設計實現了一個人機接口友好的音樂相冊。
本系統以在Altera FPGA產品內定制的Nios II軟核作為處理器,外圍電路包括外圍存儲器驅動、MP3音頻解碼、TFT液晶屏控制、觸摸屏驅動和SD卡驅動等電路。外圍存儲器和SD卡的驅動部分在FPGA內部實現,而MP3音頻解碼、TFT液晶屏控制、觸摸屏驅動則分別選用了VS1003B、HX8347和UH78430芯片來實現。系統硬件框圖如圖1所示。

圖1 系統硬件框圖
SoPC,即片上可編程系統,是Altera公司提出來的一種靈活高效的SoC解決方案,是指將處理器、存儲器、定時器、總線控制器、通信接口、I/O端口等系統設計需要的功能模塊集成到一個FPGA上,構建成一個可編程的片上系統。本設計基于Nios II處理器組建的SoPC系統框圖如圖2所示。

圖2 SoPC系統框圖
系統需在FPGA上添加Flash存儲器和SDRAM存儲器,分別用于存儲應用程序代碼和運行應用程序。Flash選中的應用程序代碼在系統運行前將被拷貝到SDRAM中執行。本設計中的Flash存儲器選用S29AL032D芯片,SDRAM存儲器選用具有8 MB字節容量的A2V64S40CTP芯片。Flash存儲器和SDRAM存儲器都是使用Altera SoPC Builder工具中免費提供的Avalon總線IP掛接到片上Avalon總線上,以實現Nios II對它們的訪問。
VS1003B是芬蘭VLSI公司出品的單芯片MP3/WMA/MIDI音頻解碼和ADPCM編碼芯片,支持MP3、MP3+V、WMA、WAV、MIDI和SP-MIDI格式的音頻解碼播放,內部擁有高性能、低功耗DSP處理器核和緩存,且外圍接口豐富。
本設計使用7個IO口用于操作VS1003B,其端口連接圖如圖3所示。其中,各端口功能分別為:XRESET,復位;XDCS,數據片選;XCS,芯片片選;SCLK,SPI通信接口時鐘輸入;MOSI,SPI通信接口數據輸出;MISO,SPI通信接口數據輸入;DREQ,數據處理完中斷輸出。

圖3 VS1003B硬件接口設計
VS1003B芯片內部共有16個16位控制寄存器,地址分別為0x0~0x0F,可通過SPI接口使用SCI通信協議來配置控制寄存器。需解碼的數據也是通過SPI接口使用SDI通信協議傳送到緩存,讓芯片正確播放音頻文件。
在使用VS1003B之前,需要對VS1003B的控制寄存器進行初始化配置;完成配置后,即可往VS1003B的緩存中寫入解碼數據,實現音頻解碼。
HX8347芯片是TFT液晶屏專用驅動芯片,最大支持320×240分辨率的TFT液晶屏。其內置173 KB的RAM,色彩模式支持最高26萬色的顯示。HX8347具有4種接口方式:8/9/16/18 bit系統總線方式、SPI總線方式、寄存器接口方式和RGB接口方式。
本設計采用16 bit系統總線方式,端口連接如圖4所示。需使用21個IO口,各端口功能分別為:RST:復位;CS:片選;RS:指令/數據選擇;WR:寫使能;RD:讀使能;DATA[15:0]:16 bit數據。

圖4 HX8347硬件接口設計
HX8347內部共有132個寄存器,地址從0x00~0x93。在使用液晶屏前,需對其中大部分寄存器初始化。寄存器操作要使用CS、RS、RD、WR、DATA[7:0]端口。在正確配置寄存器后,就可進行顯示數據的傳送。數據傳輸與寄存器配置使用的端口是一樣的,只是寄存器配置使用的是數據總線的低8 bit,而數據傳送要使用全部16 bit數據總線。
對TFT液晶屏的操作,首先進行初始化操作,主要包括對液晶內部參考電壓、開啟晶振、顯示緩沖區和RGB色彩等寄存器的設置。在完成初始化之后即可進行顯示操作,先在液晶的RAM中開辟一個顯示緩沖區,然后再向顯示緩沖區填入顯示數據即可實現TFT屏的顯示與更新。
UH7843是TI公司生產的4線電阻觸摸屏轉換接口芯片,具有同步串行12位取樣數模轉換器,功耗低,轉換速率高。
本設計使用了6個IO口來操作UH7843芯片,端口連接如圖5所示。其中,各端口功能分別為:CS:芯片片選;SCLK:SPI通信接口時鐘輸入;DIN:SPI通信接口數據輸入;DOUT:SPI通信接口數據輸出;BUSY:芯片忙信號輸出;IRQ:芯片中斷信號輸出。

圖5 UH7843硬件接口設計
當觸摸屏上有觸摸動作時,觸摸屏的X+、X-、Y+、Y-端會產生不同的模擬電壓并送入UH7843。UH7843會對輸入電壓產生一個轉換過程,轉換完成后用中斷通知處理器,處理器便會去讀取此時的AD采樣值,再調用程序計算實現觸摸點的定位。
SD卡支持兩種總線方式:SD方式與SPI方式。本設計采用IO口模擬SPI模式通信,使用4個IO口實現SD卡的控制。端口連接如圖6所示。

圖6 SD卡硬件接口設計
本設計采用CMD0、CMD1、CMD17和CMD24 4個命令組合操作SD卡。CMD0為SD卡復位指令,設置SD卡工作于SPI接口模式;CMD1初始化SD卡,激活SD處于工作狀態;CMD17讀SD卡扇區,讀取一個扇區512 B數據,在讀取時需要給出地址信息;CMD24寫SD卡扇區,給出寫入扇區地址以及數據后即可往SD卡指定扇區寫入512 B數據。
通過復位SD卡、初始化SD卡、讀取SD卡扇區數據3個步驟完成對SD卡的操作,實現從卡中讀取數據的工作。
在Altera Quartus II軟件中建立工程,啟動SoPC Builder工具定制Nios II處理器,進行SoPC系統的構建。本SoPC系統包括Nios II處理器模塊、存儲器接口模塊、UART模塊和PIO口總線模塊等部分。
(1)Nios II/s CPU
結合本設計所需資源,選用標準型,如圖7所示。

圖7 SoPC構建
完成軟核類型的選擇之后,再進行JTAG Debug Module的設置,以便于調試。所得到的CPU配置如圖8所示。

圖8 CPU構建
(2)SDRAM、Flash等存儲器接口模塊
使用SRAM作為系統的通用數據存儲器。SDRAM空間較大,可作為應用程序的運行空間;Flash作為程序存儲器,用于存放應用程序代碼。
(3)UART模塊和PIO口總線模塊
UART串口模塊用于調試,系統也可以在此基礎上擴展串口外設。將串口波特率設置為最大的115 200 bit/s。PIO口則用于控制SD卡、TFT液晶、觸摸芯片以及音頻模塊這幾個外部設備。
在添加完各個模塊后,還需要為各個模塊指定名稱、類型、存儲器地址映像和系統外設的中斷設置,如圖9所示。為了方便起見,通常將Flash的首地址設置為0,其他模塊地址由系統自動分配。
整個應用軟件需要設計3大模塊程序:MP3音樂播放程序、數碼相冊程序和觸摸控制程序。整體軟件流程圖如圖10所示。

圖9 SoPC整體配置

圖10 系統軟件流程圖
為了方便對MP3文件和圖像文件的訪問,應用程序需要提供對文件系統的支持。本設計采用了znFAT32文件系統。
znFAT32是于振南為小型嵌入式設備完全獨立編寫且源代碼開放的FAT32文件系統解決方案。znFAT32能夠支持眾多 的存儲設備 (SD卡、CF卡、Flash、U盤等),支持多個存儲器共同工作以及同時訪問多個存儲器對文件的操作;其對硬件資源要求低,代碼完全由C語言編寫,能夠方便地移植到51單片機、AVR、ARM、Nios II等處理器上,占用資源極少,非常適合嵌入式開發中文件系統的嵌入。
znFAT32其中的一個主要實現是文件打開函數,該函數原型如下:

其中,入口參數的意義分別為:pfi,文件信息結構體;filepath,文件名稱;item,文件類型;is_file,確定是一個文件。
本設計首先使用文件打開函數打開文件,然后按需要對文件使用MP3處理函數和相冊處理函數進行處理。
MP3播放音樂程序流程如圖11所示。

圖11 MP3播放流程圖
當進入MP3播放程序以后,首先讀取出歌曲目錄表,等待用戶選擇歌曲,超時等待后即刻進入目錄表第一首歌曲播放。通過文件系統打開第一首歌曲,解析歌曲后,進入歌曲數據區按扇區讀出數據進行解碼播放。每個扇區讀取完成后,查閱觸摸緩沖區是否有需要處理的觸摸信息,如果有換歌信息則換到相應歌曲播放,同時液晶顯示界面切換;如果有退出播放信息,則執行退出播放狀態切換到主界面;如果沒有觸摸信息,則繼續播放,播放完一首歌后自動切換到下一首歌,直到所有音樂播放完成,最后返回主界面。在每個扇區讀取完成后處理觸摸信息,這樣能實時響應觸摸狀態。
數碼相冊是另一個主要功能。當系統進入到圖片瀏覽功能后,會讀取第一張圖片顯示,然后等待用戶觸摸選擇顯示圖片或者退出。程序流程圖如圖12所示。

圖12 圖片顯示主流程
在顯示圖片過程中,首先是通過文件系統讀取圖片數據區的第一個扇區,然后取出文件頭、文件信息頭、色彩表等信息,對圖片的有效性進行檢測,包括圖片大小、圖片格式、圖片色彩模式以及圖片的壓縮類型。當檢測到有效BMP圖片時,即可進入圖片顯示,每顯示一個扇區的數據,就檢測觸摸緩沖區是否有需要處理的數據,如果檢測到選擇下一張的觸摸信息則跳入下一張圖片顯示,如果檢測到上一張的觸摸信息則退回上一張,如果是選擇退出的觸摸信息則返回主界面。
觸摸控制程序流程圖如圖13所示。

圖13 觸摸控制程序流程圖
本設計在友晶科技的DE2開發板上進行調試驗證。首先在DE2實驗開發板上構建Nios II處理器;在測試構建的Nios處理器正確之后,再對各個外設的底層編寫驅動,并一一進行測試;最后在底層驅動編寫好的前提下,編寫應用程序。
對SD卡讀寫模塊、VS1003B音頻模塊、TFT顯示模塊、觸摸芯片模塊以及文件系統加載模塊等外設底層驅動進行測試,可利用JTAG UART串口輸出調試信息來進行正誤驗證。圖14是當正確掛載FAT32文件系統,插上SD卡讀取出SD卡的扇區信息后,在主機側使用串口調試助手接收到的信息。

圖14 FAT32文件系統加載測試圖
本文給出了一種基于SoPC的數碼電子音樂相冊的設計方案。使用SoPC Builder開發工具在DE2開發板上構建Nios II處理器和SoPC系統,搭建了外圍音頻解碼、TFT液晶驅動和觸摸屏驅動等電路,編寫了各外設的底層驅動以及應用程序,最終實現了數碼電子音樂相冊的設計。使用SoPC技術進行系統設計具有開發周期短、設計靈活、可將若干外部模塊綜合設計到一片高密度FPGA中等優點,同時設計更小巧,成本更低,更便于系統升級。目前SoPC技術的應用正在迅速擴大,具有廣闊的應用空間和突出的市場競爭力。
[1]周立功.SoPC嵌入式開發系列教程[M].北京:北京航空航天大學出版社,2006.
[2]蔡偉剛.Nios II軟件構架解析[M].西安:西安電子科技大學出版社,2007.
[3]武景濤,史大光,高龍,等.FPGA和Nios II軟核的SD卡文件系統實現方法[J].單片機與嵌入式系統應用,2012(12):22-25.
[4]HAMBLEN J O,HALL T S,FURMAN M D.Rapid prototyping of digital systems:SoPC edition[M].Springer,2007.
[5]Gao Kun,Cai Junbo.A SoPC-based mini VGA video capture and storage system[C].2010 3rd International Conference on Biomedical Engineering and Informatics(BMEI 2010),2010.