高 峰,周永川
(中國電子科技集團公司第五十四研究所,河北 石家莊 050081)
在目前的大規(guī)模集成電路設(shè)計中,系統(tǒng)級設(shè)計和邏輯設(shè)計往往是分開進行的。系統(tǒng)設(shè)計人員使用諸如C/C++、Matlab、COSSAP、SPW等系統(tǒng)設(shè)計語言和軟件進行系統(tǒng)描述和算法仿真,并書寫系統(tǒng)設(shè)計書,然后移交給電路設(shè)計部門。電路設(shè)計人員,首先要花大量的時間理解系統(tǒng)設(shè)計書后,才能利用VHDL或者Verilog HDL硬件描述語言進行電路設(shè)計。根據(jù)有關(guān)統(tǒng)計從系統(tǒng)級設(shè)計到電路級設(shè)計所花費的時間一般是系統(tǒng)級設(shè)計所花時間的3倍左右。因此在系統(tǒng)級設(shè)計與電路級設(shè)計之間架設(shè)一座橋梁已經(jīng)成為電路設(shè)計領(lǐng)域極為迫切的任務(wù)。對于片上系統(tǒng)設(shè)計而言,除了上述問題以外,還面對著如何處理嵌入式CPU或DSP與大規(guī)模邏輯電路的軟硬件協(xié)同設(shè)計問題。由于CPU或DSP多用C/C++或匯編語言來仿真和驗證,而邏輯電路則使用VHDL或者Verilog-HDL硬件描述語言進行仿真和驗證。因此,需要2種不同的仿真工具和仿真環(huán)境來支持設(shè)計工作。這2種不同的仿真和驗證環(huán)境,不僅增加了設(shè)計周期和設(shè)計成本,而且容易造成設(shè)計錯誤。
為了實現(xiàn)系統(tǒng)級與電路級設(shè)計的融合,同時解決硬軟件協(xié)同設(shè)計問題,最好的辦法是尋求一個既能兼容系統(tǒng)級設(shè)計和邏輯設(shè)計,又能兼容邏輯電路軟硬件仿真與驗證的綜合集成環(huán)境?;贛ATLAB集成環(huán)境下的多EDA軟件聯(lián)合設(shè)計便可以很好地解決這個問題。
MATLAB結(jié)合第3方軟硬件產(chǎn)品組成了在不同領(lǐng)域內(nèi)的完整解決方案,實現(xiàn)了從算法開發(fā)到實時仿真再到代碼生成與最終產(chǎn)品實現(xiàn)的完整過程。
主要的典型應(yīng)用包括:
控制系統(tǒng)的應(yīng)用與開發(fā)——快速控制原型與硬件在回路仿真的統(tǒng)一平臺dSPACE;
信號處理系統(tǒng)的設(shè)計與開發(fā)——全系統(tǒng)仿真與快速原型驗證,TI DSP、Lyrtech等信號處理產(chǎn)品軟硬件平臺;
通信系統(tǒng)設(shè)計與開發(fā)——結(jié)合RadioLab 3G和Candence等產(chǎn)品;
機電一體化設(shè)計與開發(fā)——全系統(tǒng)的聯(lián)合仿真,結(jié)合Easy 5、Adams等。
MATLAB開放的產(chǎn)品體系使MATLAB成為了諸多領(lǐng)域的開發(fā)首選軟件,并且,MATLAB還具有300余家第3方合作伙伴,分布在科學計算、機械動力、化工、計算機通訊、汽車、金融等領(lǐng)域。接口方式包括了聯(lián)合建模、數(shù)據(jù)共享、開發(fā)流程銜接等等。
傳統(tǒng)的DSP系統(tǒng)開發(fā)人員在設(shè)計一個DSP系統(tǒng)時,一般先研究算法,再使用MATLAB或C語言驗證算法,最后由硬件工程師在FPGA或DSP上實現(xiàn)并驗證。在MATLAB集成環(huán)境下使用多EDA軟件的典型DSP系統(tǒng)設(shè)計流程如下:
①用數(shù)學語言描述算法;②設(shè)計環(huán)境中使用雙精度數(shù)實現(xiàn)算法;③將雙精度運算變?yōu)槎c運算;④將設(shè)計轉(zhuǎn)換為有效的硬件描述語言實現(xiàn)。
設(shè)計人員先在MATLAB中對系統(tǒng)進行建模和算法驗證,經(jīng)過仿真后便可以直接將系統(tǒng)映射為基于FPGA的底層硬件實現(xiàn)方案??捎肧imulink提供的圖形化環(huán)境對系統(tǒng)進行建模,代碼轉(zhuǎn)換工具可自動生成FPGA綜合、仿真和實現(xiàn)工具所需的命令文件,因此用戶可以在圖形化環(huán)境中完成系統(tǒng)模型的硬件開發(fā)。
1.2.1 建模
Simulink、Stateflow和Simulink Blocksets提供了一個集成的交互圖形化動態(tài)建模環(huán)境。強大的仿真能力能夠?qū)﹄x散、連續(xù)、條件執(zhí)行、事件驅(qū)動、多速率、混雜系統(tǒng)等進行分析。通過使用Simulink、Stateflow、DSP Blocksets,可以快速、準確地仿真系統(tǒng)中每一部分的行為,包括實時DSP算法,數(shù)字、模擬和混合信號處理硬件,控制邏輯,通信協(xié)議和同步循環(huán),還可以考慮信道、聲學和其他物理效應(yīng)。利用Simulink可視化的建模方式,可迅速地建立動態(tài)系統(tǒng)的框圖模型,Simulink的分級建模能力使得體積龐大,結(jié)構(gòu)復雜的模型構(gòu)建也簡便易行。
1.2.2 實時仿真[1,2]
為了完成仿真的實時性,要用到一個Simulink的配套工具 Real-Time Workshop(RTW),它和C或C++編譯器編譯,可將程序生成獨立于MATLAB環(huán)境的應(yīng)用程序,運行到實時的工業(yè)過程中。Real-Time Windows Target使用一個很小的實時內(nèi)核來保證它開發(fā)出來的應(yīng)用程序可以實時運行。實時核心運行在Ring0級,使用內(nèi)置PC時鐘作為它的時鐘來源,該內(nèi)核在Windows獲取之前截取PC時鐘的中斷,程序無法調(diào)用Windows系統(tǒng)提供的函數(shù)。正因如此,在C語言S函數(shù)中不允許使用Win32 API。內(nèi)核使用時鐘中斷觸發(fā)已編譯模型執(zhí)行,并能唯實時應(yīng)用程序最高的優(yōu)先級。
利用Simulink及其工具集運行仿真模型,調(diào)試控制參數(shù)。Simulink的示波器可以動畫和圖形顯示數(shù)據(jù),能夠在仿真運算進行時監(jiān)視仿真結(jié)果。
1.2.3 代碼生成
在MATLAB產(chǎn)品族中,自動化的代碼生成工具主要有Real-Time Workshop(RTW)和Stateflow Coder,這2種代碼生成工具可以直接將Simulink的模型框圖和Stateflow的狀態(tài)圖轉(zhuǎn)換成高效優(yōu)化的程序代碼。利用RTW生成的代碼簡潔、可靠、易讀。目前RTW支持生成標準的C語言代碼,并且具備了生成其他語言代碼的能力。整個代碼的生成、編譯以及相應(yīng)的目標下載過程都可以自動完成的,用戶需要做的僅僅使用鼠標點擊幾個按鈕即可。MathWorks公司針對不同的實時或非實時操作系統(tǒng)平臺,開發(fā)了相應(yīng)的目標選項,配合不同的軟硬件系統(tǒng),可以完成快速控制原型(Rapid Control Prototype)開發(fā)、硬件在回路的實時仿真(Hardware-in-Loop)、產(chǎn)品代碼生成等工作。另外,MATLAB開放性的可擴充體系允許用戶開發(fā)自定義的嵌入式系統(tǒng)目標,利用Real-Time Workshop Embedded Coder能夠直接將Simulink的模型轉(zhuǎn)變成效率優(yōu)化的產(chǎn)品級代碼。代碼不僅可以是浮點的,還可以是定點的。
對于FPGA設(shè)計,Xilinx公司的System Generator和Altera公司的DSP Builder允許用戶建立位真實、周期精確的IP模型,將浮點模型調(diào)整為定點模型并在FPGA模塊上實現(xiàn)這些模型。然后,所得的HDL將直接進入后序的綜合流程。System Generator和DSP Builder軟件是由MathWorks分別與Xilinx公司和Altera公司合作開發(fā)而成,DSP設(shè)計人員可使用MATLAB和Simulink工具在FPGA內(nèi)進行開發(fā)和仿真來完善DSP設(shè)計。該2種軟件為系統(tǒng)級DSP設(shè)計與FPGA硬件實現(xiàn)的融合起到了橋梁作用,而這一點對于高性能DSP系統(tǒng)的設(shè)計者來說,正是至關(guān)重要的。
另外,用戶可以使用FDATool或命令行函數(shù)調(diào)用的方式來設(shè)計濾波器,然后利用Filter Design HDL Coder來生成VHDL或Verilog代碼。Filter Design HDL Coder擴充了MATLAB的硬件實現(xiàn)能力。在Filter Design Toolbox中設(shè)計的定點濾波器利用FilterDesign HDL Coder可以生成有效的、可綜合和可移植的VHDL、Verilog代碼,這些代碼可以最終在ASIC和FPGA芯片上實現(xiàn)。利用Filter DesignHDL Coder同樣可以自動生成用于快速仿真、測試和驗證生成代碼的VHDL、Verilog、ModelSim測試基準程序。
Link for ModelSim可以和Xilinx System Generator或Altera DSP Builder協(xié)同工作。這意味著你可以使用Xilinx System Generator以及Altera DSP Builder來完成你的部分系統(tǒng)設(shè)計。因此你可以在一個完整的環(huán)境下進行 MATLAB、C/C++、Simulink blocks、自己設(shè)計的HDL實體、以及Xilinx System Generator所提供的模塊或Altera DSP Builder blocks所提供模塊的聯(lián)合仿真。Link for ModelSim是一個把MATLAB、Simulink和針對FPGA、ASIC的硬件設(shè)計流程無縫連結(jié)起來的聯(lián)合仿真的接口擴展模塊。它提供一個快速的雙向連接將MATLAB、Simulink和硬件描述語言仿真器Modelsim連接起來。使二者之間直接的聯(lián)合仿真成為可能,并且讓你更高效地在MATLAB/Simulink中驗證ModelSim中的寄存器傳輸級(RTL)模型。
為了更加清楚地說明MATLAB環(huán)境下多EDA軟件聯(lián)合設(shè)計的優(yōu)勢,下面結(jié)合工程實踐,介紹一個數(shù)字上變頻器(DUC)的FPGA開發(fā)實例。設(shè)計在Simulink環(huán)境下建模、仿真、代碼生成,自動調(diào)用System Generator軟件、ISE軟件,大大節(jié)省了開發(fā)時間[3]。
設(shè)計用System Generator實現(xiàn)DUC,DUC是調(diào)用Xilinx公司開發(fā)的IP Core。在Simulink環(huán)境下創(chuàng)建的模型如圖1所示。
圖1 DUC的Simulink模型框圖
信號源是由正弦波發(fā)生器提供一個低頻率的單頻信號,它是由MATLAB/Simulink本身提供的,不屬于Xilinx模塊。信號源之后使Gateway In模塊,它將浮點數(shù)轉(zhuǎn)換成指定寬度的定點數(shù),因為FPGA里面不能直接實現(xiàn)浮點運算。中間是Xilinx的DUC IP Core,主要是完成數(shù)字上變頻的功能,也是進行代碼轉(zhuǎn)換的對象。Gateway Out模塊的作用剛好與Gateway In模塊的作用相反,是將定點數(shù)轉(zhuǎn)換成Simulink能識別的浮點數(shù),以便將信號送往示波器上顯示。最后一級是信宿和示波器,主要是對上變頻后的信號進行時域波形顯示和頻譜分析。
運行Simulink進行仿真,可以看到輸出的波形及其頻譜圖,如圖2所示。圖2所示信號是將100kHz信號上變頻到10MHz的結(jié)果。
圖2 DUC變換后的頻譜圖
確認DUC在Simulink環(huán)境下的仿真結(jié)果正確后,就可以通過System Generator生成已創(chuàng)建模型的VHDL等項目文件。用ISE軟件打開生成的工程,分別執(zhí)行翻譯后仿真、映射后仿真、布局布線后仿真,在Modelsim窗口中可以看到,3個進程仿真后的結(jié)果與期待響應(yīng)是完全匹配的,即System Generator生成的VHDL代碼經(jīng)過綜合、翻譯、映射和布局布線后得到的FPGA實現(xiàn)完全能實現(xiàn)Simulink模型的功能。確認布局布線沒有出現(xiàn)錯誤后,生成FPGA編程文件,下載到硬件電路后驗證,結(jié)果是正確的。
MATLAB是全球使用最廣泛的算法開發(fā)產(chǎn)品之一,它長期服務(wù)于自己的領(lǐng)域,與EDA和硬件實現(xiàn)相距甚遠。但隨著它的開發(fā)商MathWorks公司與第3方供應(yīng)商攜手合作將MATLAB帶入FPGA和ASIC設(shè)計領(lǐng)域,這種狀況正在發(fā)生改變,MATLAB正邁向電子設(shè)計自動化的領(lǐng)域。
[1]邊新迎,劉亮,劉君.基于MATLAB環(huán)境的實時仿真研究[J].微計算機信息,2006(22):250-252.
[2]史維佳,何鵬舉,李杰.Matlab/RTW實時仿真與嵌入式系統(tǒng)開發(fā)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2009(10):42-44.
[3]陳春章,艾霞,王國雄.數(shù)字集成電路物理設(shè)計[M].北京:科學出版社,2008.