牛斌凱 雍少為 張 建 陳 亮
(國防科技大學電子科學與工程學院衛星導航定位研發中心 長沙 410073)
最近幾年,FPGA已經成為數字信號處理系統的核心器件,其高速并行運算能力使得它成為高性能數字信號處理的理想平臺[1]。然而,數字信號處理設計者往往使用MATLAB或C/C++語言來進行系統建模,而FPGA設計者卻使用的是硬件描述語言(HDL)—VHDL或Verilog,所以如何將兩種設計方法相結合,具有一定挑戰。
SysGen是一種系統級(或算法級)的設計工具。較傳統的數字信號處理系統開發方式,它有著突出的優點:首先,SysGen能夠在Matlab/Sim ulink提供的高水平運行環境中對所需的硬件系統進行圖形化建模,這種建模方式擴展了傳統的HDL設計方式,提高了開發效率[2];其次,在Simulink環境下建模的數字系統可自動轉換成ISE、FPGA工程,大大減少了系統控制邏輯設計用時及具體硬件實現用時,降低了出錯概率;再次,對Sys-Gen系統仿真時,Matlab強大的數據生成、處理功能與Modlsim等基礎仿真工具很好的結合了起來,取代了編寫復雜 testbench的困難;另外,Sys-Gen的硬件聯合仿真功能,可以讓FPGA作為系統設計的一部分,實現已經驗證了的大規模并行計算,以此來加快系統其他部分仿真的速度。
本文通過分析數字系統設計傳統方法與Sys-Gen的技術特點,總結了基于SysGen的數字系統開發方法和一般流程,并應用該方法設計驗證了一套數字下變頻(DDC)系統,通過系統仿真結果及分析,證明了該方法對于數字系統的建模優勢明顯。
在傳統設計方法中,系統級建模時往往使用Matlab、C++語言來描述各功能模塊,而在寄存器傳輸級則使用硬件描述語言(VHDL/Verilog)描述各模塊。傳統的系統設計方法流程如圖1所示[3]。

圖1 傳統設計方法流程圖
從圖中不難看出,傳統的設計方法會出現如下弊端:首先,算法設計人員需要使用Matlab/C++語言來建立系統級模型,并驗證模型的正確性,在算法實現階段,原始的Matlab/C++描述必須手工轉換為VHDL或Verilog HDL描述。設計人員必須同時掌握高層抽象的Matlab/C++語言和低層細節的VHDL或Verilog語言,這兩個層次轉換過程中會花費大量的時間,并可能產生一些錯誤;其次,當使用C語言描述的模塊轉換成HDL描述的模塊之后,后者將會成為今后設計的焦點,而設計人員花費大量時間建立起來的C模型將再沒有什么用處[3];再次,不同層次的設計需要使用多個測試平臺,因為在系統級建立起來的針對C語言描述的模塊測試平臺無法直接轉換成針對 HDL語言描述的模塊所需要的測試平臺;同時,對于規模大、復雜度高的系統,軟件與RTL模型聯合仿真的速度過于緩慢,很難進行有效的仿真,驗證結果難以滿足一致性要求。
使用SysGen可以避免以上問題。這種工具可以在同一環境下(Matlab/Simu link)完成數字系統算法的模型設計,算法模型向ISE工程的自動轉換,以及測試向量的自動生成等[3]。其硬件聯合仿真(Hardware Co-sim)功能能夠提升系統仿真驗證速度。
SysGen繼承了Simulink的模塊化建模方式及其動態系統建模、仿真、和分析功能,同時,它還可以將功能模塊定義的系統參數映射為硬件實現中的實體、結構、端口、信號和屬性,并能夠自動生成FPGA綜合、仿真和實現工具所需的命令文件。由此可見,SysGen是數字信號處理系統設計與XILINX FPGA 實現之間的“橋梁”[7]。
在SysGen的基本元件庫中,有幾個重要模塊值得提出。System Generator模塊:該模塊可以配置SysGen系統的采樣時間,硬件相關程序的生成,它是每個SysGen系統的必備模塊;Gateway模塊:該模塊用于雙精度運算與定點運算之間的數據格式轉換,是XILINX模塊與非XILINX模塊之間的鏈接模塊;BlackBox模塊:該模塊用于裝載設計師自行定義的 HDL模型,當HDL描述被載入BlackBox時,SysGen可以自動生成HDL代碼與Simulink相鏈接的.m文件,文件確保了HDL功能模塊與Simulink的有效通信,載入HDL代碼后的BlaxkBox模塊與該HDL描述有著相同的輸入、輸出端口和功能;ModelSim HDL co-simulation模塊[1]:當設計中含有BlackBox加載的HDL功能模塊時,ModelSim HDL co-sim u lation模塊用來配置一個或幾個BlackBox,該模塊的功能就是將HDL代碼放到ModelSim中運行,然后將ModelSim得到的結果再導入到系統模塊中。
通過這一工具,用戶可以:1)用Sim ulink開發DSP;2)用System Generator for DSP自動將Simulink模型轉成面向Xilinx FPGA的VHDL/Verilog代碼;3)使用Xilinx公司提供的IP核。
應用SysGen設計數字信號處理系統時,設計者可應用Matlab對系統進行算法建模,同時確定軟硬件劃分及各功能模塊劃分;SysGen的模型庫中提供了相當豐富的數字信號處理模塊,如FFT、FIR、DDS等等,這些模塊模型對應著IP核庫組件,設計者只需按照算法要求拖拽、配置所需模塊就可完成功能模塊設計。當然,設計者還可以針對具體需求自行編寫.m/.v/.vhd類型的代碼模塊,然后通過載體模塊(BlackBox、MCode)將代碼模塊加載到系統中去,從而實現軟硬件協同設計;將各模塊相互連接實現系統模型搭建后,SysGen能夠將系統模型自動轉換成ISE工程、FPGA工程,同時為系統的 HDL仿真、綜合、布線生成了腳本文件、約束文件;Simu link提供的各種信號源模型、示波器模型能夠用來完善驗證環境搭建,為系統級仿真提供了條件。應用自動生成的testbench測試代碼、測試文件,SysGen系統模型能夠在Sim ulink環境下完成系統仿真驗證;SysGen可最終將設計系統編譯綜合成可上板調試的FPGA工程。

圖2 應用SysGen的一般建模方法流程圖
這種系統級建模方式不需要開發人員自行編寫代碼,不存在算法設計向 HDL描述手工轉換的問題,甚至不必對算法和FPGA結構有相當的了解。系統設計和硬件設計之間反復而便捷的迭代驗證極大地提高了開發效率。Sys-Gen的一般建模方法流程圖如圖2所示。
一般來說,從使用SysGen進行系統建模到完成設計包括以下幾個步驟[6]:1)用數字語言來描述算法;2)在設計環境中實現算法,開始時使用雙精度;3)把雙精度算法轉換成定點算法;4)把設計轉換成有效的硬件。
數字下變頻是無線電或移動通信系統的重要組成部分。數字接收系統(如GPS接收機)采用下變頻,將接收到的射頻信號搬移到中頻上,或者由中頻變為零中頻信號。從工作原理講,下變頻就是輸入信號與一個本地振蕩信號的乘法運算。設輸入信號為a(t)cos(ωct),本地振蕩信號為 A coscos(ωc-ωL)t。利用濾波器濾除和頻(ωc+ωL)保留差頻(ωc-ωL)就是下變頻。若 ωc=ωL就得到了零中頻信號。變頻器主要功能有:1)降低數據速率,從而降低后續電路的復雜度;2)將中頻信號變至基帶信號;3)濾除有效信號帶外的干擾信號。
本文設計的DDC系統由數字混頻器、數控振蕩器和低通濾波器三部分組成,其基本流程如圖3。

圖3 數字下變頻流程示意圖
該設計輸入為兩個頻率(42MHz、48MH z)混合后的單載波,混頻頻率 ωL為40MH z,輸入信號與數控振蕩器混頻后完成頻譜遷移,混頻信號通過兩級低通濾波,8MHz的單載波被抑制,最后輸出I/Q兩支路信號。濾波處理的過程設計為第一級低通濾波的同時完成5倍的降采樣操作,第二級濾波為同頻輸入輸出。該系統設計框圖如圖4所示。

圖4 DDC系統設計框圖
按照上述的SysGen系統設計方法和流程,在明確算法設計后可展開各模塊的建模。該DDC系統信號源采用兩個Simulink提供的信號發生器(SineWave)模塊,混頻模塊為SysGen模型庫中的數控振蕩器模塊(DDS)、乘法器模塊(Mult)也由SysGen模型庫提供,各模塊參量配置如前所述。設計FIR濾波器模塊時,我們嘗試了兩種實現方式。第一種方式應用IP core生成兩個不同參量的FIR濾波器的HDL描述,將這兩個HDL描述各自例化兩次(I/Q兩支路)后,載入兩個BlackBox模塊中,鏈接兩級黑盒子形成圖5所示的DDC系統;第二種方式應用SysGen模型庫中的FIR模型(濾波器系數與第一種方式相同),其他模塊相同。由于兩種建模方式結果相同,第二種方式的建模與仿真過程不再給出。

圖5 基于SysGen設計的 DDC系統
為了驗證應用SysGen設計出來的數字系統與該系統算法級描述在輸出結果上的一致性,我們應用Sim ulink與SysGen并行地搭建了上述討論的DDC系統(省略5倍降采樣部分),同時要求兩者的結果誤差不超過百分之一。SysGen系統參量設置如下:系統的采樣率為100MH z,FPGA時鐘頻率為10ns,仿真時間250μs。在仿真環境相同的情況下,仿真數據如圖6所示。比較兩組數據可見,SysGen系統滿足算法一致性要求,由量化和字長效應產生的誤差不超過百分之一,可以忽略。

圖6 Simu link與SysGen仿真結果比較圖
在SysGen設計滿足算法一致性要求的基礎上,我們對該DDC系統進行SysGen與ModelSim的聯合仿真(SysGen參量設置不變,仿真時間仍為250μs),仿真用時82s,然后把系統編譯綜合成可上板調試狀態(如圖7所示),并進行調試。實際電路板上時鐘晶振為50MH z,仿真時間250μs,所用的FPGA芯片型號為Spartan3 xc3s2000-4fg676,數據由FPGA下載線纜與PC進行傳輸。Hardware Co-Sim結果與SysGen、ModelSim聯合仿真結果一致,如圖8所示,仿真用時46s,仿真速度有近44%的提高。

由上述仿真結果可見,SysGen建模滿足算法與系統模型的一致性要求,仿真過程無需使用多個測試平臺,簡潔高效。SysGen系統上板調試的仿真用時較軟件與RTL模型聯合仿真的仿真用時有很大程度的縮減,這一優勢是應用SysGen的Hardware Co-Sim功能實現硬件加速的基礎。今后可以在SysGen建模的大系統中直接加入適合在FPGA中實現的運算(如大型并行計算)模塊,這種半實物仿真可以更迅速地驗證系統是否滿足功能要求。
本文首先分析了傳統的數字信號處理系統設計流程,針對傳統方法中算法設計與軟硬件設計脫節及聯合仿真速度慢的弊端,提出了應用Simulink/SysGen設計數字信號處理系統的相關方法。應用新方法,本文設計、驗證了一套數字下變頻系統。在DDC系統實現過程中,我們應用SysGen提供BlackBox載入了自行設計的功能模塊,完成了Simulink、ModelSim的聯合仿真與硬件聯合仿真,各項仿真結果一致,硬件聯合仿真速度較純軟件系統執行速度有明顯提高。
該DDC系統實現過程中,應用到的方法和積累下的經驗為下一步工作奠定了必要的實踐基礎,應用硬件聯合仿真實現大系統中復雜運算部分的硬件加速將是下一步研究的重點。
[1]紀志成,高春能.FPGA數字信號處理設計教程[M].西安:西安電子科技大學出版社,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]劉強.基于SystemC的系統級芯片設計方法研究[J].現代電子技術,1004-373X(2005)09-033-03
[4]張公禮.全數字接收機理論與技術[M].北京:科學出版社,2005,1
[5]Xilinx.System Generator Manual[Z]
[6]徐欣,于紅旗,易凡,等.基于FPGA的嵌入式系統設計[M].北京:機械工業出版社,2005,1
[7]紀志成,陳婭冰,周治平.基于SG/Simulink無印直流電機混合建模與仿真研究[J].系統仿真學報,1004-731X(2005)03-0525-04
[8]陳永春.從Matlab/Simu link模型到代碼實現[M].北京:清華大學出版社,2002,1