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