徐家惠, 戚海峰, 高 健, 莊建軍, 陳毅煌
(南京大學(xué) 電子科學(xué)與工程學(xué)院, 江蘇 南京 210093)
現(xiàn)場可編程門陣列(FPGA)具有非常靈活的可編程邏輯,它不僅具有體積小、重量輕、功耗低、可靠性高、可批量生產(chǎn)等優(yōu)點(diǎn),而且可實(shí)現(xiàn)并行處理、流水線操作,可有效地實(shí)時處理數(shù)字信號。隨著EDA和PLD技術(shù)的進(jìn)步,F(xiàn)PGA器件的制造工藝和產(chǎn)品性能獲得了長足的發(fā)展,它是目前實(shí)現(xiàn)數(shù)字系統(tǒng)的主流平臺之一[1-3]。本設(shè)計正是運(yùn)用Xilinx的高層次綜合設(shè)計方法,結(jié)合Vivado HLS、ISE和EDK開發(fā)工具,在Atlys Spartan-6 FPGA開發(fā)板上實(shí)現(xiàn)了AC97音頻系統(tǒng)。
本系統(tǒng)由信號采集、信號處理和命令輸出三部分組成,如圖1所示。

圖1 AC97音頻系統(tǒng)框圖
信號采集模塊由音頻輸入Line in端口、耳機(jī)輸出Line out端口和Atlys開發(fā)板提供的音頻AC97編解碼芯片LM4550組成。模擬音頻信號從Line in端口輸入,經(jīng)過采樣控制和AD轉(zhuǎn)換,進(jìn)入FPGA系統(tǒng)作數(shù)字信號處理,提取出滿足工程需要的信息,響應(yīng)用戶的操作指令,最后進(jìn)行混音處理和信號濾波,再轉(zhuǎn)換成模擬信號從Line out端口輸出[4]。
信號處理模塊包含AC97控制器、左右聲道FIR濾波器和MicroBlaze處理器等部分,是本設(shè)計的核心環(huán)節(jié)。圖1中的AC97控制器、fir_left和fir_right均是掛接在AXI總線上的IP核。AC97標(biāo)準(zhǔn)把音頻設(shè)備中的數(shù)字部分(DSP)和模擬部分(CODEC)分離開來,模擬部分已經(jīng)由信號采集模塊完成,而AC97數(shù)字控制器通過AC-LINK協(xié)議與AC97 CODEC相連,并將音頻數(shù)字形式提供給DSP。利用Vivado HLS綜合設(shè)計,導(dǎo)出RTL模型,生成對應(yīng)左右聲道的FIR IP核,與MicroBlaze結(jié)合構(gòu)成處理系統(tǒng),處理系統(tǒng)通過板上的音頻編解碼芯片和信號處理模塊的AC97控制器獲得一段立體聲音樂,左右聲道濾波器分別對其作帶阻濾波處理[5-7]。在本設(shè)計中使用AXI4總線連接MicroBlaze和濾波器,具體實(shí)現(xiàn)如圖2所示。
圖中,箭頭方向代表主從設(shè)備,兩者可以連續(xù)地進(jìn)行通信;AXI4是面向地址映射的接口,支持突發(fā)數(shù)據(jù)傳輸;AXI4-Lite模式主要處理簡單吞吐量的地址映射傳輸,一個地址只對應(yīng)一個數(shù)據(jù)的讀寫,所以比較適用于控制寄存器和狀態(tài)寄存器的讀寫應(yīng)用;AXI4-Stream面向流數(shù)據(jù)單向高速傳輸?shù)男枨螅皰仐墶钡刂罚瑥亩鴽]有突發(fā)數(shù)據(jù)量大小的限制[8-9]。
MicroBlaze實(shí)質(zhì)上也是一個IP核,它與fir_left、fir_right、AC97控制器以及調(diào)試模塊Debug Module一起掛接在AXI4總線上[10]。MicroBlaze通過LMB同步總線訪問存放指令和數(shù)據(jù)的片上塊RAM,MicroBlaze有兩個LMB,即ILMB和DLMB,分別用于處理器指令和數(shù)據(jù)接口。片上BRAM最大為128 kB,存放運(yùn)行軟件程序,本設(shè)計取值16 kB。

圖2 基于AXI4總線的MicroBlaze嵌入式系統(tǒng)框圖
其命令輸出模塊指的是硬件驗證過程中,打開串口對應(yīng)用程序進(jìn)行調(diào)試。通過音頻線往板上傳輸一段加噪立體聲音樂,為了檢驗濾波功能,作如下測試:在SDK的終端界面中,鍵入“i”,顯示濾波器系數(shù);鍵入“b”,輸出原聲;鍵入“f”,輸出濾除單音噪聲的音樂。本設(shè)計要實(shí)現(xiàn)從48 kHz 的CD質(zhì)素的音樂中濾除4 Hz的信號,采用FIR帶阻型濾波[11],濾波器的參數(shù)設(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。
本設(shè)計建立在Atlys Spartan-6 FPGA開發(fā)平臺上,使用的工具有Xilinx高層次綜合工具Vivado HLS、硬件設(shè)計ISE和嵌入式系統(tǒng)設(shè)計EDK,其中EDK軟件主要包括構(gòu)建嵌入式硬件平臺的XPS和用于開發(fā)應(yīng)用軟件的SDK。通過這種軟硬件協(xié)同設(shè)計和仿真的方法,本設(shè)計的AC97音頻系統(tǒng)才得以完成。
所謂綜合,就是將較高級抽象層次的描述轉(zhuǎn)化成較低層次的描述。Vivado HLS高層次綜合[12]速度極其迅速,可以在短短幾min內(nèi)處理上千萬行的C代碼,可以通過性能、資源和功耗指標(biāo)去微調(diào)架構(gòu),也可以在函數(shù)級引入約束和指令,創(chuàng)造不同的架構(gòu),它為我們提供了設(shè)計探究的機(jī)會。
Vivado HLS從C、C++或系統(tǒng)C源碼中提取控制信息和數(shù)據(jù)流,接受用戶約束和指令,經(jīng)過功能仿真、綜合優(yōu)化、綜合后仿真、實(shí)現(xiàn)和時序仿真等過程,將軟件代碼轉(zhuǎn)換成硬件語言[13]。源碼的測試平臺文件testbench可以復(fù)用到RTL的協(xié)同仿真中去,Vivado HLS生成的RTL級描述有VHDL、Verilog和system C三種形式,而且有IP-XAC、Sys Gen和Pcore三種導(dǎo)出方式。其中IP-XAC封裝到Vivado的IP Catalog中,Pcore可在EDK中被調(diào)用。
在Xilinx相應(yīng)的軟件和FPGA硬件平臺的基礎(chǔ)上,基于Vivado HLS的AC97音頻系統(tǒng)的具體實(shí)現(xiàn)過程如圖3所示。

圖3 音頻系統(tǒng)的實(shí)現(xiàn)流程
Vivado HLS的設(shè)計是從以C語言描述的FIR濾波器開始的,一同加入的還有系數(shù)dat文件和測試平臺C文件。為解決方案設(shè)定好時鐘頻率和器件,用GCC/G++或Visual C++仿真器驗證設(shè)計的系統(tǒng)行為。一旦行為設(shè)計運(yùn)行良好,對應(yīng)的測試臺的問題全部解決,就可以通過Vivado HLS Synthesis運(yùn)行設(shè)計,生成RTL 設(shè)計,代碼可以是Verilog,也可以是VHDL。
Vivado HLS綜合完畢后,會自動生成一份性能和資源的評估報告,包括用戶設(shè)定、速度(如latency、trip count)、面積(如FFs、LUTs)、功耗、接口等信息。本設(shè)計綜合的時鐘周期8.11ns,默認(rèn)計算延遲為235個時鐘周期,對代碼循環(huán)loop使用PIPELINE指令重新綜合后,延遲周期有效地減少到了68。但是DSP48和BRAM的資源消耗保持原樣,分別為3和2。
有了RTL后,可以執(zhí)行System C架構(gòu)級仿真,即RTL協(xié)同仿真,進(jìn)一步根據(jù)之前創(chuàng)建的C 測試平臺,驗證HDL設(shè)計的功能。將綜合生成的VHDL文件加入到新建的Navigator工程中,其中fir毫無疑問要設(shè)為頂層模塊。Vivado HLS將程序代碼轉(zhuǎn)化為RTL的過程分為四個階段:算法規(guī)范、微型架構(gòu)探索、RTL實(shí)現(xiàn)和IP封裝。運(yùn)用Vivado HLS編譯器優(yōu)化來測試不同的設(shè)計,以找到適當(dāng)?shù)拿娣e和性能組合[14-15]。圖4是濾波器C算法描述和生成的硬件RTL的對比圖,展現(xiàn)了基于Vivado HLS由C語言代碼生成硬件結(jié)構(gòu)的過程,體現(xiàn)了高層次綜合工具Vivado HLS的優(yōu)越性[16]。
導(dǎo)入測試平臺VHDL文件,將工程切換到仿真視圖,設(shè)置ISIM仿真的運(yùn)行時間為4.0 μs,當(dāng)ap_done為高電平時,迭代計算后的系數(shù)y(濾波后的值)才輸出,x是16位寬的抽樣輸入,y對應(yīng)程序中的acc變量,數(shù)組c[N+1]裝載了濾波器系數(shù),波形如圖5所示。

圖4 Vivado HLS C-RTL對比圖

圖5 ISIM仿真波形
在Vivado HLS中對Pcore進(jìn)行適配的時候,將x、y以及頂層模塊FIR的Directive類型設(shè)置為Resource型,選用AXI4LiteS并作相同命名,以便將輸入輸出口連接。再次綜合后,選擇以Pcore形式導(dǎo)出RTL。
MicroBlaze、外圍設(shè)備和這些組件的連接問題以及它們各自的屬性設(shè)置,都在XPS中進(jìn)行[17]。首先利用XPS的基本系統(tǒng)創(chuàng)建器(BSB)創(chuàng)建以Single MicroBlaze軟核處理器為基礎(chǔ)的AXI系統(tǒng)(頻率100 MHz,本地內(nèi)存16 kB,外設(shè)只選RS232_Uart_1),指定目標(biāo)板為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),接著設(shè)置好AC97和FIR Pcore的端口連接,修改引腳UCF文件,最后生成系統(tǒng)硬件比特流后,再輸出到SDK。
當(dāng)從XPS導(dǎo)入硬件平臺后,創(chuàng)建BSP工程,選擇以裸機(jī)standalone模式運(yùn)行,生成軟件開發(fā)所用到的底層驅(qū)動庫。然后創(chuàng)建一個空C++工程,編寫編譯軟件代碼。Xilinx SDK軟件自帶了下載配置FPGA的功能即“Program FPGA”命令,在創(chuàng)建的應(yīng)用程序中打開終端窗口,連接COM口,再利用Data2Mem工具將ISE實(shí)現(xiàn)后的bit文件、BMM文件和SDK生成的elf文件整合到一起,生成帶有軟核功能的download比特流文件,最后將該文件下載到FPGA中。至此,一個基于Vivado HLS的AC97音頻系統(tǒng)設(shè)計完成。
本設(shè)計選取Xilinx Spartan-6 Atlys數(shù)字電路板作為開發(fā)平臺,使用Xilinx公司的Vivado HLS、ISE以及EDK等工具,運(yùn)用軟硬件協(xié)同設(shè)計、仿真和驗證的方法,實(shí)現(xiàn)了硬件邏輯設(shè)計和MicroBlaze嵌入式處理系統(tǒng)的開發(fā)。經(jīng)測試,由LM4550采集的疊加單音噪聲的音樂經(jīng)過本設(shè)計的AC97音頻濾波系統(tǒng),聲音質(zhì)量明顯改善,濾波器的性能達(dá)到了設(shè)計要求。
[1] 徐文波,田 耘. Xilinx FPGA開發(fā)實(shí)用教程[M].2版.北京:清華大學(xué)出版社,2012:123-340.
[2] 鄭爭兵,魏 瑞,陳正濤. 一種基于FPGA的高速數(shù)據(jù)通道的實(shí)驗方法[J].實(shí)驗室研究與探索,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可編程邏輯器件的高級應(yīng)用與設(shè)計技巧[M].北京:電子工業(yè)出版社,2004:68-358.
[4] 韓延義,李 航,李 岳. 基于FPGA的音頻芯片輸出控制設(shè)計[J].實(shí)驗室研究與探索,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)的設(shè)計[J].電子設(shè)計工程,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)設(shè)計[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].電子設(shè)計工程,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的多核技術(shù)課創(chuàng)新實(shí)驗探索[J].實(shí)驗室研究與探索,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)設(shè)計教程[M].北京:北京航空航天大學(xué)出版社,2003:17-145.
[16] 陸佳華,江 舟,馬 岷. 嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計實(shí)戰(zhàn)指南——基于XILINX ZYNQ[M].北京:機(jī)械工業(yè)出版社,2013:149-165.
[17] 楊浩強(qiáng). 基于EDK的FPGA嵌入式系統(tǒng)開發(fā)[M].北京:機(jī)械工業(yè)出版社,2008:29-270.