牛斌凱 雍少為 張 建 陳 亮
(國防科技大學(xué)電子科學(xué)與工程學(xué)院衛(wèi)星導(dǎo)航定位研發(fā)中心 長沙 410073)
最近幾年,FPGA已經(jīng)成為數(shù)字信號處理系統(tǒng)的核心器件,其高速并行運(yùn)算能力使得它成為高性能數(shù)字信號處理的理想平臺[1]。然而,數(shù)字信號處理設(shè)計者往往使用MATLAB或C/C++語言來進(jìn)行系統(tǒng)建模,而FPGA設(shè)計者卻使用的是硬件描述語言(HDL)—VHDL或Verilog,所以如何將兩種設(shè)計方法相結(jié)合,具有一定挑戰(zhàn)。
SysGen是一種系統(tǒng)級(或算法級)的設(shè)計工具。較傳統(tǒng)的數(shù)字信號處理系統(tǒng)開發(fā)方式,它有著突出的優(yōu)點(diǎn):首先,SysGen能夠在Matlab/Sim ulink提供的高水平運(yùn)行環(huán)境中對所需的硬件系統(tǒng)進(jìn)行圖形化建模,這種建模方式擴(kuò)展了傳統(tǒng)的HDL設(shè)計方式,提高了開發(fā)效率[2];其次,在Simulink環(huán)境下建模的數(shù)字系統(tǒng)可自動轉(zhuǎn)換成ISE、FPGA工程,大大減少了系統(tǒng)控制邏輯設(shè)計用時及具體硬件實現(xiàn)用時,降低了出錯概率;再次,對Sys-Gen系統(tǒng)仿真時,Matlab強(qiáng)大的數(shù)據(jù)生成、處理功能與Modlsim等基礎(chǔ)仿真工具很好的結(jié)合了起來,取代了編寫復(fù)雜 testbench的困難;另外,Sys-Gen的硬件聯(lián)合仿真功能,可以讓FPGA作為系統(tǒng)設(shè)計的一部分,實現(xiàn)已經(jīng)驗證了的大規(guī)模并行計算,以此來加快系統(tǒng)其他部分仿真的速度。
本文通過分析數(shù)字系統(tǒng)設(shè)計傳統(tǒng)方法與Sys-Gen的技術(shù)特點(diǎn),總結(jié)了基于SysGen的數(shù)字系統(tǒng)開發(fā)方法和一般流程,并應(yīng)用該方法設(shè)計驗證了一套數(shù)字下變頻(DDC)系統(tǒng),通過系統(tǒng)仿真結(jié)果及分析,證明了該方法對于數(shù)字系統(tǒng)的建模優(yōu)勢明顯。
在傳統(tǒng)設(shè)計方法中,系統(tǒng)級建模時往往使用Matlab、C++語言來描述各功能模塊,而在寄存器傳輸級則使用硬件描述語言(VHDL/Verilog)描述各模塊。傳統(tǒng)的系統(tǒng)設(shè)計方法流程如圖1所示[3]。
圖1 傳統(tǒng)設(shè)計方法流程圖
從圖中不難看出,傳統(tǒng)的設(shè)計方法會出現(xiàn)如下弊端:首先,算法設(shè)計人員需要使用Matlab/C++語言來建立系統(tǒng)級模型,并驗證模型的正確性,在算法實現(xiàn)階段,原始的Matlab/C++描述必須手工轉(zhuǎn)換為VHDL或Verilog HDL描述。設(shè)計人員必須同時掌握高層抽象的Matlab/C++語言和低層細(xì)節(jié)的VHDL或Verilog語言,這兩個層次轉(zhuǎn)換過程中會花費(fèi)大量的時間,并可能產(chǎn)生一些錯誤;其次,當(dāng)使用C語言描述的模塊轉(zhuǎn)換成HDL描述的模塊之后,后者將會成為今后設(shè)計的焦點(diǎn),而設(shè)計人員花費(fèi)大量時間建立起來的C模型將再沒有什么用處[3];再次,不同層次的設(shè)計需要使用多個測試平臺,因為在系統(tǒng)級建立起來的針對C語言描述的模塊測試平臺無法直接轉(zhuǎn)換成針對 HDL語言描述的模塊所需要的測試平臺;同時,對于規(guī)模大、復(fù)雜度高的系統(tǒng),軟件與RTL模型聯(lián)合仿真的速度過于緩慢,很難進(jìn)行有效的仿真,驗證結(jié)果難以滿足一致性要求。
使用SysGen可以避免以上問題。這種工具可以在同一環(huán)境下(Matlab/Simu link)完成數(shù)字系統(tǒng)算法的模型設(shè)計,算法模型向ISE工程的自動轉(zhuǎn)換,以及測試向量的自動生成等[3]。其硬件聯(lián)合仿真(Hardware Co-sim)功能能夠提升系統(tǒng)仿真驗證速度。
SysGen繼承了Simulink的模塊化建模方式及其動態(tài)系統(tǒng)建模、仿真、和分析功能,同時,它還可以將功能模塊定義的系統(tǒng)參數(shù)映射為硬件實現(xiàn)中的實體、結(jié)構(gòu)、端口、信號和屬性,并能夠自動生成FPGA綜合、仿真和實現(xiàn)工具所需的命令文件。由此可見,SysGen是數(shù)字信號處理系統(tǒng)設(shè)計與XILINX FPGA 實現(xiàn)之間的“橋梁”[7]。
在SysGen的基本元件庫中,有幾個重要模塊值得提出。System Generator模塊:該模塊可以配置SysGen系統(tǒng)的采樣時間,硬件相關(guān)程序的生成,它是每個SysGen系統(tǒng)的必備模塊;Gateway模塊:該模塊用于雙精度運(yùn)算與定點(diǎn)運(yùn)算之間的數(shù)據(jù)格式轉(zhuǎn)換,是XILINX模塊與非XILINX模塊之間的鏈接模塊;BlackBox模塊:該模塊用于裝載設(shè)計師自行定義的 HDL模型,當(dāng)HDL描述被載入BlackBox時,SysGen可以自動生成HDL代碼與Simulink相鏈接的.m文件,文件確保了HDL功能模塊與Simulink的有效通信,載入HDL代碼后的BlaxkBox模塊與該HDL描述有著相同的輸入、輸出端口和功能;ModelSim HDL co-simulation模塊[1]:當(dāng)設(shè)計中含有BlackBox加載的HDL功能模塊時,ModelSim HDL co-sim u lation模塊用來配置一個或幾個BlackBox,該模塊的功能就是將HDL代碼放到ModelSim中運(yùn)行,然后將ModelSim得到的結(jié)果再導(dǎo)入到系統(tǒng)模塊中。
通過這一工具,用戶可以:1)用Sim ulink開發(fā)DSP;2)用System Generator for DSP自動將Simulink模型轉(zhuǎn)成面向Xilinx FPGA的VHDL/Verilog代碼;3)使用Xilinx公司提供的IP核。
應(yīng)用SysGen設(shè)計數(shù)字信號處理系統(tǒng)時,設(shè)計者可應(yīng)用Matlab對系統(tǒng)進(jìn)行算法建模,同時確定軟硬件劃分及各功能模塊劃分;SysGen的模型庫中提供了相當(dāng)豐富的數(shù)字信號處理模塊,如FFT、FIR、DDS等等,這些模塊模型對應(yīng)著IP核庫組件,設(shè)計者只需按照算法要求拖拽、配置所需模塊就可完成功能模塊設(shè)計。當(dāng)然,設(shè)計者還可以針對具體需求自行編寫.m/.v/.vhd類型的代碼模塊,然后通過載體模塊(BlackBox、MCode)將代碼模塊加載到系統(tǒng)中去,從而實現(xiàn)軟硬件協(xié)同設(shè)計;將各模塊相互連接實現(xiàn)系統(tǒng)模型搭建后,SysGen能夠?qū)⑾到y(tǒng)模型自動轉(zhuǎn)換成ISE工程、FPGA工程,同時為系統(tǒng)的 HDL仿真、綜合、布線生成了腳本文件、約束文件;Simu link提供的各種信號源模型、示波器模型能夠用來完善驗證環(huán)境搭建,為系統(tǒng)級仿真提供了條件。應(yīng)用自動生成的testbench測試代碼、測試文件,SysGen系統(tǒng)模型能夠在Sim ulink環(huán)境下完成系統(tǒng)仿真驗證;SysGen可最終將設(shè)計系統(tǒng)編譯綜合成可上板調(diào)試的FPGA工程。
圖2 應(yīng)用SysGen的一般建模方法流程圖
這種系統(tǒng)級建模方式不需要開發(fā)人員自行編寫代碼,不存在算法設(shè)計向 HDL描述手工轉(zhuǎn)換的問題,甚至不必對算法和FPGA結(jié)構(gòu)有相當(dāng)?shù)牧私?。系統(tǒng)設(shè)計和硬件設(shè)計之間反復(fù)而便捷的迭代驗證極大地提高了開發(fā)效率。Sys-Gen的一般建模方法流程圖如圖2所示。
一般來說,從使用SysGen進(jìn)行系統(tǒng)建模到完成設(shè)計包括以下幾個步驟[6]:1)用數(shù)字語言來描述算法;2)在設(shè)計環(huán)境中實現(xiàn)算法,開始時使用雙精度;3)把雙精度算法轉(zhuǎn)換成定點(diǎn)算法;4)把設(shè)計轉(zhuǎn)換成有效的硬件。
數(shù)字下變頻是無線電或移動通信系統(tǒng)的重要組成部分。數(shù)字接收系統(tǒng)(如GPS接收機(jī))采用下變頻,將接收到的射頻信號搬移到中頻上,或者由中頻變?yōu)榱阒蓄l信號。從工作原理講,下變頻就是輸入信號與一個本地振蕩信號的乘法運(yùn)算。設(shè)輸入信號為a(t)cos(ωct),本地振蕩信號為 A coscos(ωc-ωL)t。利用濾波器濾除和頻(ωc+ωL)保留差頻(ωc-ωL)就是下變頻。若 ωc=ωL就得到了零中頻信號。變頻器主要功能有:1)降低數(shù)據(jù)速率,從而降低后續(xù)電路的復(fù)雜度;2)將中頻信號變至基帶信號;3)濾除有效信號帶外的干擾信號。
本文設(shè)計的DDC系統(tǒng)由數(shù)字混頻器、數(shù)控振蕩器和低通濾波器三部分組成,其基本流程如圖3。
圖3 數(shù)字下變頻流程示意圖
該設(shè)計輸入為兩個頻率(42MHz、48MH z)混合后的單載波,混頻頻率 ωL為40MH z,輸入信號與數(shù)控振蕩器混頻后完成頻譜遷移,混頻信號通過兩級低通濾波,8MHz的單載波被抑制,最后輸出I/Q兩支路信號。濾波處理的過程設(shè)計為第一級低通濾波的同時完成5倍的降采樣操作,第二級濾波為同頻輸入輸出。該系統(tǒng)設(shè)計框圖如圖4所示。
圖4 DDC系統(tǒng)設(shè)計框圖
按照上述的SysGen系統(tǒng)設(shè)計方法和流程,在明確算法設(shè)計后可展開各模塊的建模。該DDC系統(tǒng)信號源采用兩個Simulink提供的信號發(fā)生器(SineWave)模塊,混頻模塊為SysGen模型庫中的數(shù)控振蕩器模塊(DDS)、乘法器模塊(Mult)也由SysGen模型庫提供,各模塊參量配置如前所述。設(shè)計FIR濾波器模塊時,我們嘗試了兩種實現(xiàn)方式。第一種方式應(yīng)用IP core生成兩個不同參量的FIR濾波器的HDL描述,將這兩個HDL描述各自例化兩次(I/Q兩支路)后,載入兩個BlackBox模塊中,鏈接兩級黑盒子形成圖5所示的DDC系統(tǒng);第二種方式應(yīng)用SysGen模型庫中的FIR模型(濾波器系數(shù)與第一種方式相同),其他模塊相同。由于兩種建模方式結(jié)果相同,第二種方式的建模與仿真過程不再給出。
圖5 基于SysGen設(shè)計的 DDC系統(tǒng)
為了驗證應(yīng)用SysGen設(shè)計出來的數(shù)字系統(tǒng)與該系統(tǒng)算法級描述在輸出結(jié)果上的一致性,我們應(yīng)用Sim ulink與SysGen并行地搭建了上述討論的DDC系統(tǒng)(省略5倍降采樣部分),同時要求兩者的結(jié)果誤差不超過百分之一。SysGen系統(tǒng)參量設(shè)置如下:系統(tǒng)的采樣率為100MH z,FPGA時鐘頻率為10ns,仿真時間250μs。在仿真環(huán)境相同的情況下,仿真數(shù)據(jù)如圖6所示。比較兩組數(shù)據(jù)可見,SysGen系統(tǒng)滿足算法一致性要求,由量化和字長效應(yīng)產(chǎn)生的誤差不超過百分之一,可以忽略。
圖6 Simu link與SysGen仿真結(jié)果比較圖
在SysGen設(shè)計滿足算法一致性要求的基礎(chǔ)上,我們對該DDC系統(tǒng)進(jìn)行SysGen與ModelSim的聯(lián)合仿真(SysGen參量設(shè)置不變,仿真時間仍為250μs),仿真用時82s,然后把系統(tǒng)編譯綜合成可上板調(diào)試狀態(tài)(如圖7所示),并進(jìn)行調(diào)試。實際電路板上時鐘晶振為50MH z,仿真時間250μs,所用的FPGA芯片型號為Spartan3 xc3s2000-4fg676,數(shù)據(jù)由FPGA下載線纜與PC進(jìn)行傳輸。Hardware Co-Sim結(jié)果與SysGen、ModelSim聯(lián)合仿真結(jié)果一致,如圖8所示,仿真用時46s,仿真速度有近44%的提高。
由上述仿真結(jié)果可見,SysGen建模滿足算法與系統(tǒng)模型的一致性要求,仿真過程無需使用多個測試平臺,簡潔高效。SysGen系統(tǒng)上板調(diào)試的仿真用時較軟件與RTL模型聯(lián)合仿真的仿真用時有很大程度的縮減,這一優(yōu)勢是應(yīng)用SysGen的Hardware Co-Sim功能實現(xiàn)硬件加速的基礎(chǔ)。今后可以在SysGen建模的大系統(tǒng)中直接加入適合在FPGA中實現(xiàn)的運(yùn)算(如大型并行計算)模塊,這種半實物仿真可以更迅速地驗證系統(tǒng)是否滿足功能要求。
本文首先分析了傳統(tǒng)的數(shù)字信號處理系統(tǒng)設(shè)計流程,針對傳統(tǒng)方法中算法設(shè)計與軟硬件設(shè)計脫節(jié)及聯(lián)合仿真速度慢的弊端,提出了應(yīng)用Simulink/SysGen設(shè)計數(shù)字信號處理系統(tǒng)的相關(guān)方法。應(yīng)用新方法,本文設(shè)計、驗證了一套數(shù)字下變頻系統(tǒng)。在DDC系統(tǒng)實現(xiàn)過程中,我們應(yīng)用SysGen提供BlackBox載入了自行設(shè)計的功能模塊,完成了Simulink、ModelSim的聯(lián)合仿真與硬件聯(lián)合仿真,各項仿真結(jié)果一致,硬件聯(lián)合仿真速度較純軟件系統(tǒng)執(zhí)行速度有明顯提高。
該DDC系統(tǒng)實現(xiàn)過程中,應(yīng)用到的方法和積累下的經(jīng)驗為下一步工作奠定了必要的實踐基礎(chǔ),應(yīng)用硬件聯(lián)合仿真實現(xiàn)大系統(tǒng)中復(fù)雜運(yùn)算部分的硬件加速將是下一步研究的重點(diǎn)。
[1]紀(jì)志成,高春能.FPGA數(shù)字信號處理設(shè)計教程[M].西安:西安電子科技大學(xué)出版社,2008,2
[2]Shashikala Narasimha Murthy,Wendy Alvis,Rakesh Shirodkar,et al.Methodology for Imp lementation of UnmannedVehicle Control on FPGA Using System Generator[J].978-1-4244-1957-9/08/$25.00 2008 IEEE
[3]劉強(qiáng).基于SystemC的系統(tǒng)級芯片設(shè)計方法研究[J].現(xiàn)代電子技術(shù),1004-373X(2005)09-033-03
[4]張公禮.全數(shù)字接收機(jī)理論與技術(shù)[M].北京:科學(xué)出版社,2005,1
[5]Xilinx.System Generator Manual[Z]
[6]徐欣,于紅旗,易凡,等.基于FPGA的嵌入式系統(tǒng)設(shè)計[M].北京:機(jī)械工業(yè)出版社,2005,1
[7]紀(jì)志成,陳婭冰,周治平.基于SG/Simulink無印直流電機(jī)混合建模與仿真研究[J].系統(tǒng)仿真學(xué)報,1004-731X(2005)03-0525-04
[8]陳永春.從Matlab/Simu link模型到代碼實現(xiàn)[M].北京:清華大學(xué)出版社,2002,1