如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx

上传人:b****9 文档编号:25610286 上传时间:2023-06-10 格式:DOCX 页数:17 大小:43.15KB
下载 相关 举报
如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx_第1页
第1页 / 共17页
如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx_第2页
第2页 / 共17页
如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx_第3页
第3页 / 共17页
如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx_第4页
第4页 / 共17页
如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx

《如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx》由会员分享,可在线阅读,更多相关《如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx(17页珍藏版)》请在冰豆网上搜索。

如何使用debussy与modelsim做cosimulationsocverilogvhdldebussymodelsim.docx

如何使用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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1