如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx
- 文档编号:25610286
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:17
- 大小:43.15KB
如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx
《如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx》由会员分享,可在线阅读,更多相关《如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx(17页珍藏版)》请在冰豆网上搜索。
如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim
如何使用Debussy與ModelSim做Co-Simulation(SOC)(Verilog)(VHDL)(Debussy)(ModelSim)
Abstract本文介紹如何使用Debussy與ModelSim做Co-Simulation,並使用Verilog、VHDL以及Verilog搭配VHDL交叉一起simulation。
Introduction使用環境:
Debussyv9+ModelSimSE
我之前一直使用Debussy+NC-Verilog做simulation,Debussy(Verdi)可以說是HDL的SourceInsight,是trace與debug的神兵利器,NC-Verilog也是Verilogsimulator中速度最快的,可是最近因工作需要,拿到的一包code卻是用Verilog寫RTL,用VHDL寫testbench,所以必須2種語言一起做simulation,我在NC-Verilog一直無法成功讓兩種語言一起simulation。
ModelSim雖然支援Verilog+VHDLco-simulation,但用慣Debussy的我還是無法忘懷其方便的tracecode方式,所以若能讓ModelSim也能dump出Debussy所需要的fsdb檔案,這樣就太完美了。
接下來會分4個方式討論
與testbench皆使用Verilog
與testbench皆使用VHDL
使用VHDL,testbench使用Verilog
使用Verilog,testbench使用VHDL
與testbench皆使用Verilog
Step1:
設定ModeSim使用VerilogPLI(因為testbench使用Verilog)
將C:
\Novas\Debussy\share\PLI\modelsim_pli\WINNT\複製到C:
\\win32\下修改C:
\\,將Veriuser部分修改成如下所示:
;ListofdynamicallyloadedobjectsforVerilogPLIapplications;Veriuser=;usebyverilogVeriuser=;usebyvhdl;Veriuser=
复制代码
是個readonly檔,要修改前記得修改其屬性才能存檔。
Step2:
RTL部分(以4bitcounter為例)
/Verilog
1/*2(C)OOMusou201134Filename:
5Simulator:
ModelSim,Debussyv96Description:
ModelSimwithdebussy7Release:
01/31/20108 */910 modulecounter(11clk,12rst_n,13cnt14);1516 inputclk;17 inputrst_n;18 output[3:
0]cnt;1920 reg[3:
0]cnt;2122 always@(posedgeclk,negedgerst_n)begin23if(~rst_n)24cnt<=4'h0;25 else26cnt<=cnt+1'b1;27 end2829 endmodule
复制代码
Step3:
Testbench部分
/Verilog
1/*2(C)OOMusou201134Filename:
5Compiler:
ModelSim,Debussyv96Description:
ModelSimwithdebussy7Release:
01/31/20108 */910 modulecounter_tb;1112 regclk;13 regrst_n;14 wire[3:
0]cnt;1516 lk(clk),37.rst_n(rst_n),38t(cnt)39);4041 endmodule
复制代码
19行
initialbegin#0;clk=1'b0;rst_n=1'b0;#5;rst_n=1'b1;#195;$finish;end
复制代码
一搬來說,若在NC-Verilog做simulation,我們會在testbench內指定結束simulation的時間,不過在ModelSim裡,simulation時間是由ModelSimscript控制,在testbench內寫$finish並沒有用,所以會省略$finish時間入下。
initialbegin#0;clk=1'b0;rst_n=1'b0;#5;rst_n=1'b1;end
复制代码
Step4:
ModelSimscript部分
vlibworkvlogvlogvsimcounter_tbrun200nsq
复制代码
其中
vlibwork
建立worklibrary。
vlogvlog
复制代码
編譯RTL:
與testbench:
,vlog為modelsim的Verilogcompiler。
vsimcounter_tb
以counter_tb為topmodule進行simulation。
run200ns
命令ModelSim執行200ns的simulation。
q
離開ModelSim
Step5:
執行ModelSim的批次檔
vsim-c-do
-c表示ModelSim將以consolemode執行,因為在Debussy+ModelSim時,只把ModelSim當成NC-Verilog使用,並沒有用到ModelSim的GUI模式。
-do表示執行ModelSimscript。
執行結果
D:
\0Clare\VerilogLab\ModelSim\counter_verilog>vsim-c-doReadingC:
/tcl/vsim/##do#**Warning:
(vlib-34)Libraryalreadyexistsat"work".#ModelTechnologyModelSimSEvlogCompilerFeb22008#--Compilingmodulecounter##Toplevelmodules:
#counter#ModelTechnologyModelSimSEvlogCompilerFeb22008#--Compilingmodulecounter_tb##Toplevelmodules:
#counter_tb#vsimcounter_tb#**Note:
(vsim-3813)Designisbeingoptimizedduetomodulerecompilation...#**Note:
(vsim-3865)DuetoPLIbeingpresent,fulldesignaccessisbeingspecified.#LoadingC:
\\win32/####*Novas*CreateFSDBfile''#*Novas*Startdumpingthescope(counter_tb),layer(0).#*Novas*Endofdumping.#**Note:
$finish:
(27)#Time:
200nsIteration:
0Instance:
/counter_tb
复制代码
Step6:
執行Debussy批次檔部份
debussy-2001-ssf-sswr
-2001表示支援Verilog2001語法
-ssf載入Debussydumpfile
-sswr載入Debussysignalfile
執行結果
與testbench皆使用VHDL
Step1:
設定ModelSim使用VHDLFLI(因為testbench使用VHDL)
將C:
\Novas\Debussy\share\PLI\modelsim_fli54\WINNT\複製到C:
\\win32\下修改C:
\\,將Veriuser部分修改成如下所示:
;ListofdynamicallyloadedobjectsforVerilogPLIapplications;Veriuser=;usebyverilog;Veriuser=;usebyvhdlVeriuser=
复制代码
是個readonly檔,要修改前記得修改其屬性才能存檔。
複製C:
\Novas\Debussy\share\PLI\modelsim_fli54\WINNT\到自己的project底下
(為什麼Verilog不需要這個檔,而VHDL需要這個檔,稍後會解釋)
Step2:
RTL部分(以4bitcounter為例)
/VHDL
1--(C)OOMusou20112 3 --Filename:
4 --Simulator:
ModelSim,Debussyv95 --Description:
ModelSimwithdebussy6 --Release:
02/05/201178 libraryIEEE;9 use10 use1112 entitycounteris13port(clk:
instd_logic;14rst_n:
instd_logic;15cnt:
outstd_logic_vector(3downto0));16 endentitycounter;1718 architecturearcofcounteris19signalcnt_r:
std_logic_vector(3downto0);20 begin21process(clk,rst_n)22begin23if(rst_n='0')then24cnt_r<="0000";25elsifrising_edge(clk)then26cnt_r<=cnt_r+1;27endif;28endprocess;2930cnt<=cnt_r;31 endarc;
复制代码
Step3:
Testbench部分
/VHDL
1--(C)OOMusou20112 3 --Filename:
4 --Simulator:
ModelSim,Debussyv95 --Description:
ModelSimwithdebussy6 --Release:
01/31/201078 libraryIEEE;9 use10 use11 use1213entitycounter_tbis14endentitycounter_tb;1516architecturearcofcounter_tbis17componentcounter18port(19clk:
instd_logic;20rst_n:
instd_logic;21cnt:
outstd_logic_vector(3downto0)22);23endcomponent;2425signalclk:
std_logic:
='0';26signalrst_n:
std_logic:
='0';27signalcnt:
std_logic_vector(3downto0);2829begin30process31begin--50MHz32clk_loop:
loop33clk<='0';34waitfor10ns;35clk<='1';36waitfor10ns;37endloopclk_loop;38endprocess;3940process41begin42waitfor5ns;43rst_n<='1';44endprocess;4546process47begin48fsdbDumpfile("");49fsdbDumpvars(0,"counter_tb");50wait;51endprocess;5253u_counter:
counter54portmap(55clk=>clk,56rst_n=>rst_n,57cnt=>cnt58);59endarc;
复制代码
11行
use這是因為與VHDLFLI的原因,稍後會解釋。
47行
processbeginfsdbDumpfile("");fsdbDumpvars(0,"counter_tb");wait;endprocess;
复制代码
一樣使用fsdbDumpfile()與fsdbDumpvars()兩個Debussy所提供的函數,不過在VHDLFLI並不需要如VerilogPLI一樣加上$。
wait也一定要加上,否則在ModelSim做simulation時會造成無窮回圈無法停止。
Step4:
ModelSimscript部分
vlibworkvcomvcomvcomvsimcounter_tbrun200nsq
复制代码
因為是VHDL,所以全部改用vcom編譯。
其中是從Debussy目錄複製過來的,為什麼需要編譯這個檔案呢
VHDLFLI(ForeignLanguageInterface)與VerilogPLI(ProgrammingLanguageInterface)不同的地方在於,當你自己提供由C寫的function給simulator使用時,VerilogPLI會自己到所提供的dll去找是否有此function,但VHDLFLI需要自己去提供mapping的動作,告訴simulator哪一個function對應dll內那ㄧ個function,就是提供這個mapping的腳色。
若直接使用Debussy所提供的,在執行ModelSim會有以下錯誤訊息。
#**Warning:
(vsim-FLI-3159)Failedtofindforeignfunction'fliparseVariableInFile'inFLIobjectfile"C:
\\win32/./".
复制代码
意思是定義的fliparseVariableInFile在找不到,致於為什麼會有此錯誤,我並不清楚。
將修改成如下所示:
/VHDL
1packagepkgis2attributeforeign:
string;34procedurefsdbDumpfile(file_name:
instring);5attributeforeignoffsdbDumpfile:
procedureis"fliparseTraceInit./";67procedurefsdbDumpvars(depth:
ininteger;8region_name:
instring);9attributeforeignoffsdbDumpvars:
procedureis"fliparsePartial./";10end;1112packagebodypkgis13procedurefsdbDumpfile(file_name:
instring)is14begin15assertfalsereport"ERROR:
foreignsubprogramnotcalled"severitynote;16end;1718procedurefsdbDumpvars(depth:
ininteger;19region_name:
instring)is20begin21assertfalsereport"ERROR:
foreignsubprogramnotcalled"severitynote;22end;23end;2425entitynovasisend;2627architecturenovas_archofnovasis28attributeforeign:
string;29attributeforeignofnovas_arch:
architectureis"fliparseCommand";30begin31end;32
复制代码
也就是僅留下fsdbDumpfile()與fsdbDumpvars()兩個function,其他的都刪除。
根據我使用Debussy的經驗,只要留這兩個function就夠用了,其他Debussy的function我還真的沒用過。
在也看到了這些是定義在pkg這個package下,所以在必須use。
Step5:
執行ModelSim的批次檔
vsim-c-do
執行結果
D:
\0Clare\VerilogLab\ModelSim\counter_vhdl>vsim-c-doReadingC:
/tcl/vsim/##do#**Warning:
(vlib-34)Libraryalreadyexistsat"work".#ModelTechnologyModelSimSEvcomCompilerFeb22008#--Loadingpackagestandard#--Compilingpackagepkg#--Compilingpackagebodypkg#--Loadingpackagepkg#--Compilingentitynovas#--Compilingarchitecturenovas_archofnovas#ModelTechnologyModelSimSEvcomCompilerFeb22008#--Loadingpackagestandard#--Loadingpackagestd_logic_1164#--Loadingpackagestd_logic_arith#--Loadingpackagestd_logic_unsigned#--Compilingentitycounter#--Compilingarchitecturearcofcounter#ModelTechnologyModelSimSEvcomCompilerFeb22008#--Loadingpackagestandard#--Loadingpackagestd_logic_1164#--Loadingpackagestd_logic_arith#--Loadingpackagestd_logic_unsigned#--Loadingpackagepkg#--Compilingentitycounter_tb#--Compilingarchitecturearcofcounter_tb#vsimcounter_tb#LoadingC:
\\win32/####Loading(arc)#Loading(arc)#NovasFSDBDumperforModelSim(FLI),Release(Win95/NT)05/04/2005#Copyright(C)1996-2004byNovasSoftware,Inc.#*Novas*CreateFSDBfile''
复制代码
Step6:
執行Debussy批次檔部份
debussy–vhdl–93–topcounter_tb-ssf-sswr
复制代码
-vhdl表示支援VHDL語法,因為Debussy預設支援Verilog
-93表示支援VHDL93的語法
-top指定topmodule,在Verilog可以不指定top,Debussy可以自動判斷而抓到topmodule,但是VHDL沒辦法,需要自己指定,若不指定,待會會有GUI要你手動挑選topmodule
執行結果
使用VHDL,testbench使用Verilog
Step1:
設定ModeSim使用VerilogPLI(因為testbench使用Verilog)
將C:
\Novas\Debussy\share\PLI\modelsim_pli\WINNT\複製到C:
\\win32\下修改C:
\\,將Veriuser部分修改成如下所示:
;ListofdynamicallyloadedobjectsforVerilogPLIapplications;Veriuser=;usebyverilogVeriuser=;usebyvhdl;Veriuser=
复制代码
是個readonly檔,要修改前記得修改其屬性才能存檔。
Step2:
RTL部分(以4bitcounter為例)
/VHDL
1--(C)OOMusou20112 3 --Filename:
4 --Simulator:
ModelSim,Debussyv95 --Description:
ModelSimwithdebussy6 --Release:
02/05/201178 libraryIEEE;9use10use1112entitycounteris13port(clk:
instd_logic;14rst_n:
instd_logic;15cnt:
outstd_logic_vector(3downto0));16endentitycounter;1718architecturearcofcounteris19signalcnt_r:
std_logic_vector(3downto0);20begin21process(clk,rst_n)22
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 使用 debussy modelsim cosimulationsocverilogvhdldebussymodelsim
链接地址:https://www.bdocx.com/doc/25610286.html