高 峰,周永川
(中國電子科技集團公司第五十四研究所,河北 石家莊 050081)
在目前的大規模集成電路設計中,系統級設計和邏輯設計往往是分開進行的。系統設計人員使用諸如C/C++、Matlab、COSSAP、SPW等系統設計語言和軟件進行系統描述和算法仿真,并書寫系統設計書,然后移交給電路設計部門。電路設計人員,首先要花大量的時間理解系統設計書后,才能利用VHDL或者Verilog HDL硬件描述語言進行電路設計。根據有關統計從系統級設計到電路級設計所花費的時間一般是系統級設計所花時間的3倍左右。因此在系統級設計與電路級設計之間架設一座橋梁已經成為電路設計領域極為迫切的任務。對于片上系統設計而言,除了上述問題以外,還面對著如何處理嵌入式CPU或DSP與大規模邏輯電路的軟硬件協同設計問題。由于CPU或DSP多用C/C++或匯編語言來仿真和驗證,而邏輯電路則使用VHDL或者Verilog-HDL硬件描述語言進行仿真和驗證。因此,需要2種不同的仿真工具和仿真環境來支持設計工作。這2種不同的仿真和驗證環境,不僅增加了設計周期和設計成本,而且容易造成設計錯誤。
為了實現系統級與電路級設計的融合,同時解決硬軟件協同設計問題,最好的辦法是尋求一個既能兼容系統級設計和邏輯設計,又能兼容邏輯電路軟硬件仿真與驗證的綜合集成環境。基于MATLAB集成環境下的多EDA軟件聯合設計便可以很好地解決這個問題。
MATLAB結合第3方軟硬件產品組成了在不同領域內的完整解決方案,實現了從算法開發到實時仿真再到代碼生成與最終產品實現的完整過程。
主要的典型應用包括:
控制系統的應用與開發——快速控制原型與硬件在回路仿真的統一平臺dSPACE;
信號處理系統的設計與開發——全系統仿真與快速原型驗證,TI DSP、Lyrtech等信號處理產品軟硬件平臺;
通信系統設計與開發——結合RadioLab 3G和Candence等產品;
機電一體化設計與開發——全系統的聯合仿真,結合Easy 5、Adams等。
MATLAB開放的產品體系使MATLAB成為了諸多領域的開發首選軟件,并且,MATLAB還具有300余家第3方合作伙伴,分布在科學計算、機械動力、化工、計算機通訊、汽車、金融等領域。接口方式包括了聯合建模、數據共享、開發流程銜接等等。
傳統的DSP系統開發人員在設計一個DSP系統時,一般先研究算法,再使用MATLAB或C語言驗證算法,最后由硬件工程師在FPGA或DSP上實現并驗證。在MATLAB集成環境下使用多EDA軟件的典型DSP系統設計流程如下:
①用數學語言描述算法;②設計環境中使用雙精度數實現算法;③將雙精度運算變為定點運算;④將設計轉換為有效的硬件描述語言實現。
設計人員先在MATLAB中對系統進行建模和算法驗證,經過仿真后便可以直接將系統映射為基于FPGA的底層硬件實現方案。可用Simulink提供的圖形化環境對系統進行建模,代碼轉換工具可自動生成FPGA綜合、仿真和實現工具所需的命令文件,因此用戶可以在圖形化環境中完成系統模型的硬件開發。
1.2.1 建模
Simulink、Stateflow和Simulink Blocksets提供了一個集成的交互圖形化動態建模環境。強大的仿真能力能夠對離散、連續、條件執行、事件驅動、多速率、混雜系統等進行分析。通過使用Simulink、Stateflow、DSP Blocksets,可以快速、準確地仿真系統中每一部分的行為,包括實時DSP算法,數字、模擬和混合信號處理硬件,控制邏輯,通信協議和同步循環,還可以考慮信道、聲學和其他物理效應。利用Simulink可視化的建模方式,可迅速地建立動態系統的框圖模型,Simulink的分級建模能力使得體積龐大,結構復雜的模型構建也簡便易行。
1.2.2 實時仿真[1,2]
為了完成仿真的實時性,要用到一個Simulink的配套工具 Real-Time Workshop(RTW),它和C或C++編譯器編譯,可將程序生成獨立于MATLAB環境的應用程序,運行到實時的工業過程中。Real-Time Windows Target使用一個很小的實時內核來保證它開發出來的應用程序可以實時運行。實時核心運行在Ring0級,使用內置PC時鐘作為它的時鐘來源,該內核在Windows獲取之前截取PC時鐘的中斷,程序無法調用Windows系統提供的函數。正因如此,在C語言S函數中不允許使用Win32 API。內核使用時鐘中斷觸發已編譯模型執行,并能唯實時應用程序最高的優先級。
利用Simulink及其工具集運行仿真模型,調試控制參數。Simulink的示波器可以動畫和圖形顯示數據,能夠在仿真運算進行時監視仿真結果。
1.2.3 代碼生成
在MATLAB產品族中,自動化的代碼生成工具主要有Real-Time Workshop(RTW)和Stateflow Coder,這2種代碼生成工具可以直接將Simulink的模型框圖和Stateflow的狀態圖轉換成高效優化的程序代碼。利用RTW生成的代碼簡潔、可靠、易讀。目前RTW支持生成標準的C語言代碼,并且具備了生成其他語言代碼的能力。整個代碼的生成、編譯以及相應的目標下載過程都可以自動完成的,用戶需要做的僅僅使用鼠標點擊幾個按鈕即可。MathWorks公司針對不同的實時或非實時操作系統平臺,開發了相應的目標選項,配合不同的軟硬件系統,可以完成快速控制原型(Rapid Control Prototype)開發、硬件在回路的實時仿真(Hardware-in-Loop)、產品代碼生成等工作。另外,MATLAB開放性的可擴充體系允許用戶開發自定義的嵌入式系統目標,利用Real-Time Workshop Embedded Coder能夠直接將Simulink的模型轉變成效率優化的產品級代碼。代碼不僅可以是浮點的,還可以是定點的。
對于FPGA設計,Xilinx公司的System Generator和Altera公司的DSP Builder允許用戶建立位真實、周期精確的IP模型,將浮點模型調整為定點模型并在FPGA模塊上實現這些模型。然后,所得的HDL將直接進入后序的綜合流程。System Generator和DSP Builder軟件是由MathWorks分別與Xilinx公司和Altera公司合作開發而成,DSP設計人員可使用MATLAB和Simulink工具在FPGA內進行開發和仿真來完善DSP設計。該2種軟件為系統級DSP設計與FPGA硬件實現的融合起到了橋梁作用,而這一點對于高性能DSP系統的設計者來說,正是至關重要的。
另外,用戶可以使用FDATool或命令行函數調用的方式來設計濾波器,然后利用Filter Design HDL Coder來生成VHDL或Verilog代碼。Filter Design HDL Coder擴充了MATLAB的硬件實現能力。在Filter Design Toolbox中設計的定點濾波器利用FilterDesign HDL Coder可以生成有效的、可綜合和可移植的VHDL、Verilog代碼,這些代碼可以最終在ASIC和FPGA芯片上實現。利用Filter DesignHDL Coder同樣可以自動生成用于快速仿真、測試和驗證生成代碼的VHDL、Verilog、ModelSim測試基準程序。
Link for ModelSim可以和Xilinx System Generator或Altera DSP Builder協同工作。這意味著你可以使用Xilinx System Generator以及Altera DSP Builder來完成你的部分系統設計。因此你可以在一個完整的環境下進行 MATLAB、C/C++、Simulink blocks、自己設計的HDL實體、以及Xilinx System Generator所提供的模塊或Altera DSP Builder blocks所提供模塊的聯合仿真。Link for ModelSim是一個把MATLAB、Simulink和針對FPGA、ASIC的硬件設計流程無縫連結起來的聯合仿真的接口擴展模塊。它提供一個快速的雙向連接將MATLAB、Simulink和硬件描述語言仿真器Modelsim連接起來。使二者之間直接的聯合仿真成為可能,并且讓你更高效地在MATLAB/Simulink中驗證ModelSim中的寄存器傳輸級(RTL)模型。
為了更加清楚地說明MATLAB環境下多EDA軟件聯合設計的優勢,下面結合工程實踐,介紹一個數字上變頻器(DUC)的FPGA開發實例。設計在Simulink環境下建模、仿真、代碼生成,自動調用System Generator軟件、ISE軟件,大大節省了開發時間[3]。
設計用System Generator實現DUC,DUC是調用Xilinx公司開發的IP Core。在Simulink環境下創建的模型如圖1所示。

圖1 DUC的Simulink模型框圖
信號源是由正弦波發生器提供一個低頻率的單頻信號,它是由MATLAB/Simulink本身提供的,不屬于Xilinx模塊。信號源之后使Gateway In模塊,它將浮點數轉換成指定寬度的定點數,因為FPGA里面不能直接實現浮點運算。中間是Xilinx的DUC IP Core,主要是完成數字上變頻的功能,也是進行代碼轉換的對象。Gateway Out模塊的作用剛好與Gateway In模塊的作用相反,是將定點數轉換成Simulink能識別的浮點數,以便將信號送往示波器上顯示。最后一級是信宿和示波器,主要是對上變頻后的信號進行時域波形顯示和頻譜分析。
運行Simulink進行仿真,可以看到輸出的波形及其頻譜圖,如圖2所示。圖2所示信號是將100kHz信號上變頻到10MHz的結果。

圖2 DUC變換后的頻譜圖
確認DUC在Simulink環境下的仿真結果正確后,就可以通過System Generator生成已創建模型的VHDL等項目文件。用ISE軟件打開生成的工程,分別執行翻譯后仿真、映射后仿真、布局布線后仿真,在Modelsim窗口中可以看到,3個進程仿真后的結果與期待響應是完全匹配的,即System Generator生成的VHDL代碼經過綜合、翻譯、映射和布局布線后得到的FPGA實現完全能實現Simulink模型的功能。確認布局布線沒有出現錯誤后,生成FPGA編程文件,下載到硬件電路后驗證,結果是正確的。
MATLAB是全球使用最廣泛的算法開發產品之一,它長期服務于自己的領域,與EDA和硬件實現相距甚遠。但隨著它的開發商MathWorks公司與第3方供應商攜手合作將MATLAB帶入FPGA和ASIC設計領域,這種狀況正在發生改變,MATLAB正邁向電子設計自動化的領域。
[1]邊新迎,劉亮,劉君.基于MATLAB環境的實時仿真研究[J].微計算機信息,2006(22):250-252.
[2]史維佳,何鵬舉,李杰.Matlab/RTW實時仿真與嵌入式系統開發[J].單片機與嵌入式系統應用,2009(10):42-44.
[3]陳春章,艾霞,王國雄.數字集成電路物理設計[M].北京:科學出版社,2008.