因?yàn)槭稚嫌幸粔KXilinx的Spartan--3E開發(fā)板,前些日子陸陸續(xù)續(xù)學(xué)習(xí)了ISE的一般工程開發(fā),熟悉了Xilinx ISE 10.x的軟件操作和開發(fā)板的使用。近來沒有事情,于是乎,又把那開發(fā)板拿出來把弄把弄,開始學(xué)習(xí)Xilinx的FPGA的DSP開發(fā)設(shè)計(jì)。在這里先介紹一下Xlinx FPGA的DSP設(shè)計(jì)工具和設(shè)計(jì)流程。
近年來,隨著多媒體技術(shù)和無線通信技術(shù)的迅猛發(fā)展,信息技術(shù)領(lǐng)域?qū)SP應(yīng)用的需求不斷增長,傳統(tǒng)的DSP處理器(現(xiàn)在用得最多的當(dāng)屬IT的DSP,種類多,功能強(qiáng)大,軟件技術(shù)也很成熟)雖然時(shí)鐘速率很高,當(dāng)DSP處理器在運(yùn)行時(shí)按指令順序執(zhí)行,因而資源利用率不高,數(shù)據(jù)的吞吐量較低,難以實(shí)現(xiàn)高速率,高復(fù)雜度的設(shè)計(jì)。而FPGA擁有大量可編程邏輯資源,比如專用的DSP塊,乘法器、雙端口RAM、LUT、寄存器和DCM等,同時(shí)配合嵌入式處理器,像Altera的NiosII核、Xilinx的MicroBlaze和PowerPC405等處理器軟核或硬核,可以輕松實(shí)現(xiàn)高數(shù)據(jù)率的數(shù)字信號處理設(shè)計(jì),而且性能原聲與傳統(tǒng)的DSP處理器,具有可裁剪,靈活性大等特點(diǎn),正越來越被人們所重視。
使用FPGA進(jìn)行DSP算法設(shè)計(jì)時(shí),傳統(tǒng)方式下,設(shè)計(jì)者首先要進(jìn)行浮點(diǎn)數(shù)的算法驗(yàn)證和仿真,然后再將其轉(zhuǎn)換為定點(diǎn)數(shù)程序;其次將定點(diǎn)數(shù)算法編寫成HDL代碼,通過反復(fù)的功能仿真,后仿真驗(yàn)證程序的正確性,最終生成比特流。Xilinx公司推出的系統(tǒng)建模工具System Generator簡化了整個(gè)DSP設(shè)計(jì)流程。設(shè)計(jì)者只需要根據(jù)設(shè)計(jì)要求咱Simulink下進(jìn)行系統(tǒng)建模,使用System Generator工具即可自動(dòng)生成可執(zhí)行比特流、測試文件等,去掉繁瑣的仿真、對比和驗(yàn)證過程。由于提供了適合硬件設(shè)計(jì)的數(shù)字信號處理(DSP)建模環(huán)境,加速、簡化了FPGA的DSP系統(tǒng)級硬件設(shè)計(jì)。
關(guān)于System Generator的下載和安裝過程,我在此就不詳細(xì)說明了,在google上搜索一下就能找到的。關(guān)于System Gnenrator的使用說明我在此向大家推薦一本很好的教材--《Xilinx ISE Design suite 10.x FPGA開發(fā)指南》(人民郵電出版社、田耕 胡彬 徐文波等著)我是在學(xué)校圖書館借到的這本書,寫得很詳細(xì),相當(dāng)不錯(cuò)。我寫這篇文章的之前做的實(shí)驗(yàn)也是參考上面做的。下面我進(jìn)入正題,具體介紹我在用SystemGenerator工具完成DSP設(shè)計(jì)后使用Xilinx ISE 10.x 調(diào)用Modelsim SE 6.5進(jìn)行仿真驗(yàn)證時(shí)遇到的的若干問題及其解決方法。
下圖為我設(shè)計(jì)的用Matlab Simulink工具設(shè)計(jì)DSP工程。
在用System Generator進(jìn)行FPGA的DSP模塊設(shè)計(jì)是以下幾點(diǎn)值得特別注意:
①設(shè)計(jì)的的FPGA DSP模塊的全局輸入和輸出數(shù)據(jù)(也就是在非Xilinx庫提供的數(shù)據(jù)源或者數(shù)據(jù)顯示、測量終端,比如下面設(shè)計(jì)中的Step信號源和Scope示波器等)必須經(jīng)過Xilinx提供的Gateway In和Gateway OUT進(jìn)行采樣,進(jìn)而得到FPGA內(nèi)部能夠處理的定點(diǎn)數(shù)。
②每個(gè)設(shè)計(jì)中至少要包含一個(gè)System Generator圖標(biāo),因?yàn)樗锹?lián)系MATLAB設(shè)計(jì)與Xilinx FPGA 硬件實(shí)現(xiàn)的主要橋梁,通過它可以實(shí)現(xiàn)FPGA實(shí)現(xiàn)屬性的設(shè)置和修改,雙擊該圖標(biāo)會(huì)出現(xiàn)如圖-2所示的對話框。
③由于在System Generator中進(jìn)行設(shè)計(jì)是需要對外部數(shù)據(jù)進(jìn)行采樣,所以設(shè)計(jì)中各個(gè)Gateway In和Gateway Out模塊都有一個(gè)采樣周期和采樣后所得定點(diǎn)數(shù)精度的設(shè)置,另外在整個(gè)系統(tǒng)也必須有一個(gè)系統(tǒng)采樣設(shè)置,多數(shù)情況下就對應(yīng)著FPGA實(shí)現(xiàn)設(shè)計(jì)是的全局時(shí)鐘,其設(shè)置在 圖-2中的Simulink System Clock(sec)。這里需要特別注意,系統(tǒng)設(shè)置必須是整個(gè)FPGA的最高時(shí)鐘,而Gateway In和Gateway Out模塊的采樣周期都必須是它的整數(shù)倍,否則系統(tǒng)會(huì)報(bào)錯(cuò),設(shè)計(jì)失敗。
?
下圖為System Generator的系統(tǒng)設(shè)置,請注意其中勾選了Create testbench選項(xiàng),這樣在點(diǎn)擊Generator以后,系統(tǒng)才會(huì)自動(dòng)生成勇于Modelsim仿真的測試文件,十分方便。
?
當(dāng)一切設(shè)計(jì)好之后,點(diǎn)擊圖-2中的Generator按鈕,系統(tǒng)就會(huì)自動(dòng)調(diào)用ISE工具進(jìn)行綜合并產(chǎn)生所以需要的設(shè)計(jì)文件和仿真文件。
接下來,運(yùn)行ISE,打開Open Project,將路徑切換至MATLAB的work工作目錄文件下找到netlist文件,進(jìn)入就會(huì)看到一個(gè)已經(jīng)生產(chǎn)的<工程名>_dcm_mcw.ise的ISE工程文件如圖-3示,點(diǎn)擊打開.
接著,設(shè)置ISE調(diào)用Modelsin進(jìn)行仿真的路徑:
點(diǎn)擊ISE窗口的Edit---->Prefrence,出現(xiàn)圖-4窗口,點(diǎn)擊展開ISE General--->Intergrated Tools,如下所示,在Model Tech simulator項(xiàng)選擇你的Modelsim安裝路徑完成設(shè)置。另外ISE也提供利用其他綜合工具進(jìn)行設(shè)計(jì)綜合的軟件接口,如Synplify 或者Synplify Pro。
圖-4 點(diǎn)擊ISE窗口的Edit---->Prefrence
然后,回到ISE工程界面,在source窗口選擇Source for 切換至Behavior Simulation,此時(shí)在Sources窗口就能看見剛才System Generator自動(dòng)生成的testbench測試文件了以<工程名>-dcm_mcw_tb-structure形式命名。如圖-5示:
?
接下來的一步是決定ISE能否成功調(diào)用Modelsim SE6.5進(jìn)行仿真工作的關(guān)鍵。我遇到的問題也大都在于此。如果此時(shí),你和我一樣迫不及待的想看到仿真的結(jié)果而草草的點(diǎn)擊圖-6中Process窗口的Simulate Behavioral Model的話,一連串的問題也就隨之出現(xiàn)了。
如圖-6所示,Modelsim的命令窗口輸出了以下錯(cuò)誤信息
# ** Error: lab_dcm.vhd(41): Library xilinxcorelib not found.
# ** Error: lab_dcm.vhd(43): VHDL Compiler exiting
# ** Error: D:/modeltech_6.5/win32/vcom failed.
# Error in macro ./pn_behavioral.do line 9
# D:/modeltech_6.5/win32/vcom failed.
# while executing
?
上面的信息提示://沒找到 Library xilinxcorelib所以編譯器不能對當(dāng)前工程進(jìn)行編譯和仿真,所編譯器退出。
看到如此的信息,當(dāng)時(shí)很茫然,這到底是怎么回事呢?從 xilinxcorelib來看似乎是Modelsim里面沒有Xilinx的仿真庫呀!
到google上面一查才知道,原來用Modelsim進(jìn)行仿真時(shí),先要對設(shè)計(jì)中調(diào)用的元件庫進(jìn)行編譯,也就是compile,通過之后才能進(jìn)行波形仿真(simulate)。而Modelsim 的SE版本屬于通用版,僅集成(也就是自帶的)一般的庫,比如ieee庫,Verilog庫和標(biāo)準(zhǔn)庫std等。不像其專業(yè)版,如跟Altera設(shè)計(jì)的ModelSim-Altera版就自帶了AlteraFPGA的全部設(shè)計(jì)庫。
另外,Modelsim在啟動(dòng)時(shí),會(huì)調(diào)用一個(gè)非常關(guān)鍵的初始化文件--Modelsim.ini,這個(gè)文件決定了本次Modelsim軟件啟動(dòng)后所具備的庫的多少和映射關(guān)系。在知道了這一點(diǎn)后,我就在電腦上搜索Modelsim.ini,結(jié)果驚訝的發(fā)現(xiàn)了在我的電腦上面居然有好幾個(gè)Modelsim.ini文件。如圖-7所示:
?
看到上面的搜索結(jié)果,我才想起以前曾經(jīng)使用過Modelsim,但都是FPGA軟件安裝包配套的版本,有ACTEL的FPGA設(shè)計(jì)軟件Libero8.3自帶的專業(yè)許可的Modelsim版本和Altera 的FPGA設(shè)計(jì)軟件Quartus9.0自帶的ModelSim-Altera 6.4a (Quartus II 9.0) Starter Edition版本,在使用的時(shí)候由于是專業(yè)版,都安裝好了各自FPGA廠商的設(shè)計(jì)庫,在用FPGA軟件調(diào)用Modelsim是從未遇到過此類數(shù)據(jù)庫lib方面的問題。
由此,我也發(fā)現(xiàn)EDA工具在生成Modelsim測試文件時(shí)會(huì)根據(jù)FPGA的設(shè)計(jì)環(huán)境生產(chǎn)一個(gè)Modelsim.ini文件,用于調(diào)用Modelsim軟件仿真時(shí)初始化Modelsim的啟動(dòng)環(huán)境。該初始化文件一般都包含在各自的工程設(shè)計(jì)文件目錄下。如圖-8所示。
我打開我當(dāng)前的設(shè)計(jì)工程目錄:D:\Program Files\MATLAB\R2007a\work\my_lab\netlist下的Modelsim.ini文件,發(fā)現(xiàn)其中的庫設(shè)置內(nèi)容如下:
[Library]
others = $MODEL_TECH/../modelsim.ini
;vhdl_psl_checkers = $MODEL_TECH/../vhdl_psl_checkers // Source files only for this release
;verilog_psl_checkers = $MODEL_TECH/../verilog_psl_checkers // Source files only for this release
;mvc_lib = $MODEL_TECH/../mvc_lib
上面語句的意思是每個(gè)庫的名稱及其映射路徑,從上面并沒有發(fā)現(xiàn)錯(cuò)誤中所提到的xilinxcorelib這個(gè)庫及其映射路徑。所以出錯(cuò)也就理所當(dāng)然啦!
另外從上面的語句還可以看出,Modelsim在啟動(dòng)時(shí)首先調(diào)用的是當(dāng)前工程設(shè)計(jì)目錄下的modelsim.ini文件,其他它通過others = $MODEL_TECH/../modelsim.ini還會(huì)調(diào)用modelsim安裝目錄下的初始化文件,進(jìn)行庫的映射。
好了,在打開modelsim安裝目錄下的初始化文件modelsim.ini文件發(fā)現(xiàn)其庫映射設(shè)置如下:
[Library]
std = $MODEL_TECH/../std
ieee = $MODEL_TECH/../ieee
verilog = $MODEL_TECH/../verilog
vital2000 = $MODEL_TECH/../vital2000
std_developerskit = $MODEL_TECH/../std_developerskit
synopsys = $MODEL_TECH/../synopsys
modelsim_lib = $MODEL_TECH/../modelsim_lib
sv_std = $MODEL_TECH/../sv_std
mtiAvm = $MODEL_TECH/../avm
mtiOvm = $MODEL_TECH/../ovm-2.0.1
mtiUPF = $MODEL_TECH/../upf_lib
mtiPA = $MODEL_TECH/../pa_lib
floatfixlib = $MODEL_TECH/../floatfixlib
;vhdl_psl_checkers = $MODEL_TECH/../vhdl_psl_checkers // Source files only for this release
;verilog_psl_checkers = $MODEL_TECH/../verilog_psl_checkers // Source files only for this release
;mvc_lib = $MODEL_TECH/../mvc_lib
中也就是我們在圖-6的modelsim軟件界面的library欄所見到的所有庫了。
繼而,我又在google上進(jìn)一步搜索ISE調(diào)用modelsim進(jìn)行仿真方面的問題。看到一些論壇的回帖中談到,用Modelsim進(jìn)行Xilinx FPGA設(shè)計(jì)的仿真時(shí)安裝Xilinx庫的各種方法。我將它們都一一試了一遍,問題依舊??!特別是其中用ISE的compxlibgui.exe工具(安裝路徑\Xilinx\10.1\ISE\bin\nt\compxlibgui.exe)進(jìn)行自動(dòng)的Xilinx庫編譯時(shí),由于選擇了全部的庫進(jìn)行編譯,用了近3個(gè)小時(shí)才完成。于是,我很不甘心就這樣失敗了。
回想整個(gè)工程,我又在電腦上搜索modelsim.ini文件,發(fā)現(xiàn)此時(shí)在ISE的安裝目錄下多了一個(gè)該文件(見圖-7所示),于是迫不及待的打開,發(fā)現(xiàn)如下:
[Library]
others = $MODEL_TECH/../modelsim.ini
;vhdl_psl_checkers = $MODEL_TECH/../vhdl_psl_checkers // Source files only for this release
;verilog_psl_checkers = $MODEL_TECH/../verilog_psl_checkers // Source files only for this release
;mvc_lib = $MODEL_TECH/../mvc_lib
UNISIMS_VER = C:\Xilinx\10.1\ISE\verilog\mti_se\unisims_ver
UNIMACRO_VER = C:\Xilinx\10.1\ISE\verilog\mti_se\unimacro_ver
UNI9000_VER = C:\Xilinx\10.1\ISE\verilog\mti_se\uni9000_ver
SIMPRIMS_VER = C:\Xilinx\10.1\ISE\verilog\mti_se\simprims_ver
XILINXCORELIB_VER = C:\Xilinx\10.1\ISE\verilog\mti_se\XilinxCoreLib_ver
SECUREIP = C:\Xilinx\10.1\ISE\verilog\mti_se\secureip
AIM_VER = C:\Xilinx\10.1\ISE\verilog\mti_se\abel_ver\aim_ver
CPLD_VER = C:\Xilinx\10.1\ISE\verilog\mti_se\cpld_ver
UNISIM = C:\Xilinx\10.1\ISE\vhdl\mti_se\unisim
UNIMACRO = C:\Xilinx\10.1\ISE\vhdl\mti_se\unimacro
SIMPRIM = C:\Xilinx\10.1\ISE\vhdl\mti_se\simprim
XILINXCORELIB = C:\Xilinx\10.1\ISE\vhdl\mti_se\XilinxCoreLib
AIM = C:\Xilinx\10.1\ISE\vhdl\mti_se\abel\aim
PLS = C:\Xilinx\10.1\ISE\vhdl\mti_se\abel\pls
CPLD = C:\Xilinx\10.1\ISE\vhdl\mti_se\cpld
奇跡般的發(fā)現(xiàn)了XILINXCORELIB = C:\Xilinx\10.1\ISE\vhdl\mti_se\XilinxCoreLib
于是,欣喜萬分。將上面的全部粗體語句全部copy到當(dāng)前工程目錄下的modelsim.ini文件中,再在ISE下面重復(fù)上面的過程,奇跡終于出現(xiàn)啦!
My God!所有的Xilinx庫都出現(xiàn)了,仿真波形也出來了!
?
這里再附上我上傳在本網(wǎng)站上的Modelsim SE 6.5的完整版下載鏈接和利用ISE的compxlibgui.exe工具進(jìn)行Xilinx庫編譯的流程截圖。希望對大家有幫助。Modelsim SE 6.5的完整版下載鏈接:如果未能找到,請?jiān)谒阉鳈谥兴袽odelsim SE 6.5就可以看見了,全部11個(gè)壓縮包,共202M
。
?
大家點(diǎn)擊附件也可以查看完整版本。
?
胡恩偉
寫于2010年3月15日于重大A區(qū)一舍
Xilinx ISE 10.x 調(diào)用Modelsim SE 6.5仿真的若干問題及其解決方法 ? 843 KB ?
?
評論