徐家惠, 戚海峰, 高 健, 莊建軍, 陳毅煌
(南京大學 電子科學與工程學院, 江蘇 南京 210093)
現(xiàn)場可編程門陣列(FPGA)具有非常靈活的可編程邏輯,它不僅具有體積小、重量輕、功耗低、可靠性高、可批量生產等優(yōu)點,而且可實現(xiàn)并行處理、流水線操作,可有效地實時處理數(shù)字信號。隨著EDA和PLD技術的進步,F(xiàn)PGA器件的制造工藝和產品性能獲得了長足的發(fā)展,它是目前實現(xiàn)數(shù)字系統(tǒng)的主流平臺之一[1-3]。本設計正是運用Xilinx的高層次綜合設計方法,結合Vivado HLS、ISE和EDK開發(fā)工具,在Atlys Spartan-6 FPGA開發(fā)板上實現(xiàn)了AC97音頻系統(tǒng)。
本系統(tǒng)由信號采集、信號處理和命令輸出三部分組成,如圖1所示。
圖1 AC97音頻系統(tǒng)框圖
信號采集模塊由音頻輸入Line in端口、耳機輸出Line out端口和Atlys開發(fā)板提供的音頻AC97編解碼芯片LM4550組成。模擬音頻信號從Line in端口輸入,經過采樣控制和AD轉換,進入FPGA系統(tǒng)作數(shù)字信號處理,提取出滿足工程需要的信息,響應用戶的操作指令,最后進行混音處理和信號濾波,再轉換成模擬信號從Line out端口輸出[4]。
信號處理模塊包含AC97控制器、左右聲道FIR濾波器和MicroBlaze處理器等部分,是本設計的核心環(huán)節(jié)。圖1中的AC97控制器、fir_left和fir_right均是掛接在AXI總線上的IP核。AC97標準把音頻設備中的數(shù)字部分(DSP)和模擬部分(CODEC)分離開來,模擬部分已經由信號采集模塊完成,而AC97數(shù)字控制器通過AC-LINK協(xié)議與AC97 CODEC相連,并將音頻數(shù)字形式提供給DSP。利用Vivado HLS綜合設計,導出RTL模型,生成對應左右聲道的FIR IP核,與MicroBlaze結合構成處理系統(tǒng),處理系統(tǒng)通過板上的音頻編解碼芯片和信號處理模塊的AC97控制器獲得一段立體聲音樂,左右聲道濾波器分別對其作帶阻濾波處理[5-7]。在本設計中使用AXI4總線連接MicroBlaze和濾波器,具體實現(xiàn)如圖2所示。
圖中,箭頭方向代表主從設備,兩者可以連續(xù)地進行通信;AXI4是面向地址映射的接口,支持突發(fā)數(shù)據(jù)傳輸;AXI4-Lite模式主要處理簡單吞吐量的地址映射傳輸,一個地址只對應一個數(shù)據(jù)的讀寫,所以比較適用于控制寄存器和狀態(tài)寄存器的讀寫應用;AXI4-Stream面向流數(shù)據(jù)單向高速傳輸?shù)男枨?,“拋棄”地址,從而沒有突發(fā)數(shù)據(jù)量大小的限制[8-9]。
MicroBlaze實質上也是一個IP核,它與fir_left、fir_right、AC97控制器以及調試模塊Debug Module一起掛接在AXI4總線上[10]。MicroBlaze通過LMB同步總線訪問存放指令和數(shù)據(jù)的片上塊RAM,MicroBlaze有兩個LMB,即ILMB和DLMB,分別用于處理器指令和數(shù)據(jù)接口。片上BRAM最大為128 kB,存放運行軟件程序,本設計取值16 kB。
圖2 基于AXI4總線的MicroBlaze嵌入式系統(tǒng)框圖
其命令輸出模塊指的是硬件驗證過程中,打開串口對應用程序進行調試。通過音頻線往板上傳輸一段加噪立體聲音樂,為了檢驗濾波功能,作如下測試:在SDK的終端界面中,鍵入“i”,顯示濾波器系數(shù);鍵入“b”,輸出原聲;鍵入“f”,輸出濾除單音噪聲的音樂。本設計要實現(xiàn)從48 kHz 的CD質素的音樂中濾除4 Hz的信號,采用FIR帶阻型濾波[11],濾波器的參數(shù)設置如下:抽頭系數(shù)N=58,采樣頻率Fs=48 kHz,通帶下限截止頻率FPASS1=2.0 kHz,阻帶下限截止頻率FSTOP1=3.8 kHz,阻帶上限截止頻率FSTOP2=4.2 kHz,通帶上限截止頻率FPASS2=6.0 kHz,通帶最大衰減APASS1=APASS2=1 dB,阻帶最小衰減ASTOP=60 dB。
本設計建立在Atlys Spartan-6 FPGA開發(fā)平臺上,使用的工具有Xilinx高層次綜合工具Vivado HLS、硬件設計ISE和嵌入式系統(tǒng)設計EDK,其中EDK軟件主要包括構建嵌入式硬件平臺的XPS和用于開發(fā)應用軟件的SDK。通過這種軟硬件協(xié)同設計和仿真的方法,本設計的AC97音頻系統(tǒng)才得以完成。
所謂綜合,就是將較高級抽象層次的描述轉化成較低層次的描述。Vivado HLS高層次綜合[12]速度極其迅速,可以在短短幾min內處理上千萬行的C代碼,可以通過性能、資源和功耗指標去微調架構,也可以在函數(shù)級引入約束和指令,創(chuàng)造不同的架構,它為我們提供了設計探究的機會。
Vivado HLS從C、C++或系統(tǒng)C源碼中提取控制信息和數(shù)據(jù)流,接受用戶約束和指令,經過功能仿真、綜合優(yōu)化、綜合后仿真、實現(xiàn)和時序仿真等過程,將軟件代碼轉換成硬件語言[13]。源碼的測試平臺文件testbench可以復用到RTL的協(xié)同仿真中去,Vivado HLS生成的RTL級描述有VHDL、Verilog和system C三種形式,而且有IP-XAC、Sys Gen和Pcore三種導出方式。其中IP-XAC封裝到Vivado的IP Catalog中,Pcore可在EDK中被調用。
在Xilinx相應的軟件和FPGA硬件平臺的基礎上,基于Vivado HLS的AC97音頻系統(tǒng)的具體實現(xiàn)過程如圖3所示。
圖3 音頻系統(tǒng)的實現(xiàn)流程
Vivado HLS的設計是從以C語言描述的FIR濾波器開始的,一同加入的還有系數(shù)dat文件和測試平臺C文件。為解決方案設定好時鐘頻率和器件,用GCC/G++或Visual C++仿真器驗證設計的系統(tǒng)行為。一旦行為設計運行良好,對應的測試臺的問題全部解決,就可以通過Vivado HLS Synthesis運行設計,生成RTL 設計,代碼可以是Verilog,也可以是VHDL。
Vivado HLS綜合完畢后,會自動生成一份性能和資源的評估報告,包括用戶設定、速度(如latency、trip count)、面積(如FFs、LUTs)、功耗、接口等信息。本設計綜合的時鐘周期8.11ns,默認計算延遲為235個時鐘周期,對代碼循環(huán)loop使用PIPELINE指令重新綜合后,延遲周期有效地減少到了68。但是DSP48和BRAM的資源消耗保持原樣,分別為3和2。
有了RTL后,可以執(zhí)行System C架構級仿真,即RTL協(xié)同仿真,進一步根據(jù)之前創(chuàng)建的C 測試平臺,驗證HDL設計的功能。將綜合生成的VHDL文件加入到新建的Navigator工程中,其中fir毫無疑問要設為頂層模塊。Vivado HLS將程序代碼轉化為RTL的過程分為四個階段:算法規(guī)范、微型架構探索、RTL實現(xiàn)和IP封裝。運用Vivado HLS編譯器優(yōu)化來測試不同的設計,以找到適當?shù)拿娣e和性能組合[14-15]。圖4是濾波器C算法描述和生成的硬件RTL的對比圖,展現(xiàn)了基于Vivado HLS由C語言代碼生成硬件結構的過程,體現(xiàn)了高層次綜合工具Vivado HLS的優(yōu)越性[16]。
導入測試平臺VHDL文件,將工程切換到仿真視圖,設置ISIM仿真的運行時間為4.0 μs,當ap_done為高電平時,迭代計算后的系數(shù)y(濾波后的值)才輸出,x是16位寬的抽樣輸入,y對應程序中的acc變量,數(shù)組c[N+1]裝載了濾波器系數(shù),波形如圖5所示。
圖4 Vivado HLS C-RTL對比圖
圖5 ISIM仿真波形
在Vivado HLS中對Pcore進行適配的時候,將x、y以及頂層模塊FIR的Directive類型設置為Resource型,選用AXI4LiteS并作相同命名,以便將輸入輸出口連接。再次綜合后,選擇以Pcore形式導出RTL。
MicroBlaze、外圍設備和這些組件的連接問題以及它們各自的屬性設置,都在XPS中進行[17]。首先利用XPS的基本系統(tǒng)創(chuàng)建器(BSB)創(chuàng)建以Single MicroBlaze軟核處理器為基礎的AXI系統(tǒng)(頻率100 MHz,本地內存16 kB,外設只選RS232_Uart_1),指定目標板為Atlys Spartan-6 FPGA board,然后使用IP Catalog添加其他滿足需要的IP(ac97_0),將由Vivado HLS生成的Pcore的文件夾放置在edk的pcores目錄下,在XPS中重新掃描工程,找到上一環(huán)節(jié)生成的名為fir_top的IP核并添加(fir_left、fir_right),接著設置好AC97和FIR Pcore的端口連接,修改引腳UCF文件,最后生成系統(tǒng)硬件比特流后,再輸出到SDK。
當從XPS導入硬件平臺后,創(chuàng)建BSP工程,選擇以裸機standalone模式運行,生成軟件開發(fā)所用到的底層驅動庫。然后創(chuàng)建一個空C++工程,編寫編譯軟件代碼。Xilinx SDK軟件自帶了下載配置FPGA的功能即“Program FPGA”命令,在創(chuàng)建的應用程序中打開終端窗口,連接COM口,再利用Data2Mem工具將ISE實現(xiàn)后的bit文件、BMM文件和SDK生成的elf文件整合到一起,生成帶有軟核功能的download比特流文件,最后將該文件下載到FPGA中。至此,一個基于Vivado HLS的AC97音頻系統(tǒng)設計完成。
本設計選取Xilinx Spartan-6 Atlys數(shù)字電路板作為開發(fā)平臺,使用Xilinx公司的Vivado HLS、ISE以及EDK等工具,運用軟硬件協(xié)同設計、仿真和驗證的方法,實現(xiàn)了硬件邏輯設計和MicroBlaze嵌入式處理系統(tǒng)的開發(fā)。經測試,由LM4550采集的疊加單音噪聲的音樂經過本設計的AC97音頻濾波系統(tǒng),聲音質量明顯改善,濾波器的性能達到了設計要求。
[1] 徐文波,田 耘. Xilinx FPGA開發(fā)實用教程[M].2版.北京:清華大學出版社,2012:123-340.
[2] 鄭爭兵,魏 瑞,陳正濤. 一種基于FPGA的高速數(shù)據(jù)通道的實驗方法[J].實驗室研究與探索,2012,31(12):78-81.
Zheng Zheng-bing,Wei Rui,Chen Zheng-tao. An experimental method of high-speed data channel based on FPGA[J]. Research and Exploration in Laboratory,2012,31(12):78-81.
[3] 孫 航. Xilinx可編程邏輯器件的高級應用與設計技巧[M].北京:電子工業(yè)出版社,2004:68-358.
[4] 韓延義,李 航,李 岳. 基于FPGA的音頻芯片輸出控制設計[J].實驗室研究與探索,2013,32(5):94-96.
Han Yan-yi,Li Hang,Li Yue.The control design of audio output based on FPGA[J]. Research and Exploration in Laboratory,2013,32(5):94-96.
[5] Digilent. AtlysTMBoard Reference Manual[EB/OL].(2011-02-28). www.digilentinc.com.
[6] 何 賓,王 瑜. 基于Xilinx MicroBlaze多核嵌入式系統(tǒng)的設計[J].電子設計工程,2011,19(13):141-144.
He Bin,Wang Yu.The design based on multi-core embedded system of Xilinx MicroBlaze [J]. Electronic Design Engineering,2011,19(13):141-144.
[7] Intel Corporation. Audio Codec’97 Revision2.1[EB/OL].(1998-05-22). www.intel.cn.
[8] Xilinx. AXI Bus Functional Model v1.1[EB/OL].(2010-12-14). www.xilinx.com.
[9] 楊定定,施慧彬.基于AXI總線的MicroBlaze雙核SoPC系統(tǒng)設計[EB/OL].(2012-01-17) .www.eepw.com.cn.
Yang Ding-ding,Shi Hui-bin.The design of MicroBlaze dual-core SoPC system based on AXI bus[EB/OL].(2012-01-17) .www.eepw.com.cn.
[10] Xilinx. MicroBlaze Process or Reference Guide[EB/OL].(2008-01-17). www.xilinx.com.
[11] 余 琳,黃光明. 基于FPGA的FIR濾波器的性能研究[J].電子設計工程,2011,19(9):125-128.
Yu Lin,Huang Guang-ming.The performance studies of FIR filter based on FPGA[J]. Electronic Design Engineering,2011,19(9):125-128.
[12] Xilinx. Vivado Design Suite Tutorial[EB/OL].(2012-08-20). www.xilinx.com.
[13] 程小雄,伍麗華. 基于FPGA的多核技術課創(chuàng)新實驗探索[J].實驗室研究與探索,2008,27(11):3-6.
Cheng Xiao-xiong,Wu Li-hua.The exploration of experiments in innovating multi-core technological courses based on FPGA[J]. Research and Exploration in Laboratory,2008,27(11):3-6.
[14] Stephen Prata. C primer plus[M].5thed. Sams Publishing,2004.
[15] 夏宇聞. Verilog 數(shù)字系統(tǒng)設計教程[M].北京:北京航空航天大學出版社,2003:17-145.
[16] 陸佳華,江 舟,馬 岷. 嵌入式系統(tǒng)軟硬件協(xié)同設計實戰(zhàn)指南——基于XILINX ZYNQ[M].北京:機械工業(yè)出版社,2013:149-165.
[17] 楊浩強. 基于EDK的FPGA嵌入式系統(tǒng)開發(fā)[M].北京:機械工業(yè)出版社,2008:29-270.