ModelSim SE简明操作指南
生活随笔
收集整理的這篇文章主要介紹了
ModelSim SE简明操作指南
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一章?介??紹
本指南是為 ModelSim5.5f版本編寫的,該版本運行于UNIX和Microsoft?Windows?95/98/Me/NT/2000的操作系統環境中。 本指南覆蓋了VHDL和Verilog模擬仿真,但是你在學習過程中會發現對于單純的HDL設計工作而言,它是一個很有用的參考。ModelSim具備強 大的模擬仿真功能,在設計、編譯、仿真、測試、調試開發過程中,有一整套工具供你使用,而且操作起來極其靈活,可以通過菜單、快捷鍵和命令行的方式進行工 作。ModelSim的窗口管理界面讓用戶使用起來很方面,它能很好的與操作系統環境協調工作。ModelSim的一個很顯著的特點就是它具備命令行的操 作方式,類似于一個shell有很多操作指令供你使用,給人的感覺就像是工作在Unix環境下,這種命令行操作方式是基于Tcl/Tk的,其功能相當強 大,這需要在以后的實際應用中慢慢體會。
ModelSim的功能側重于編譯、仿真,不能指定編譯的器件,不具有編程下載能力。不象 Synplify和MAX+PLUS?II可以在編譯前選擇器件。而且ModelSim在時序仿真時無法編輯輸入波形,不象MAX+PLUS?II可以自 行設置輸入波形,仿真后自動產生輸出波形,而是需要在源文件中就確定輸入,如編寫測試臺程序來完成初始化、模塊輸入的工作,或者通過外部宏文件提供激勵。 這樣才可以看到仿真模塊的時序波形圖。另外對于Synplify來說,也只具有編譯能力,但是比MAX+PLUS?II可編譯的verilog的內容要 多,所以常常可以現在Synplify下編譯,生成編譯文件再送到MAX+PLUS?II中使用。
ModelSim還具有分析代碼的能力,可以看出不同的代碼段消耗資源的情況,從而可以對代碼進行改善,以提高其效率。
第二章????ModelSim的主要結構
ModelSim的主窗口(Main?window)包括菜單欄、工具欄、工作區和命令行操作區。
在工作區可以顯示Project?Tab、Library?Tab、Sim?Tab(顯示Load?Design、Hierarchical?Structure);在命令行操作區,可以用命令提示符的方式進行編譯、仿真設計,同時打開其他窗口。
在 菜單欄View下可以打開,source?window、list?window、wave?window、structure?window、 signal?window、dataflow?window、process?window、viarables?window等窗口,用來測試仿真、 調試仿真。由此也可以看出該軟件具有強大的仿真設計能力,它提供的工具很多。
在幫助菜單里有SE的幫助文件和Tcl的幫助文件,是學用ModelSim很好的幫手。
第三章????ModelSim的簡要使用方法
在這一章里通過一些課程來簡單介紹ModelSim的使用方法,更多的需要在實際應用中熟練和掌握。
第一課???Create?a?Project
1.????第一次打開ModelSim會出現Welcome?to?ModelSim對話框,選取Create?a?Project,或者選取File/New/Project,然后會打開Create?Project對話框。
2.????在Create?Project對話框中,填寫test作為Project?Name;選取路徑Project?Location作為Project文件的存儲目錄;保留Default?Library?Name設置為work。
3.????選取OK,會看到工作區出現Project?and?Library?Tab。
4.????下一步是添加包含設計單元的文件,在工作區的Project?page中,點擊鼠標右鍵,選取Add?File?to?Project。
5. ????在這次練習中我們加兩個文件,點擊Add?File?to?Project對話框中的Browse按鈕,打開ModelSim安裝路徑中的 example目錄,選取counter.v和tcounter.v,再選取Reference?from?current?location,然后點擊 OK。
6.????在工作區的Project?page中,單擊右鍵,選取Compile?All。
7.????兩個文件編譯了,鼠標點擊Library?Tab欄,將會看到兩個編譯了的設計單元列了出來??床坏骄鸵袻ibrary的工作域設為work。
8.????最后一不是導入一個設計單元,雙擊Library?Tab中的counter,將會出現Sim?Tab,其中顯示了counter設計單元的結構。也可以Design/Load?design來導入設計。
到這一步通常就開始運行仿真和分析,以及調試設計,不過這些工作在以后的課程中來完成。結束仿真選取Design?/?End?Simulation,結束Project選取File?/?Close?/?Project。
第二課???Basic?VHDL?Simulation
準備仿真
1.????為這次練習新建一個目錄,然后拷貝example目錄中所有的vhd文件到該目錄下。設置該目錄為當前工作目錄,這一步通過從該目錄調用ModelSim或是選取File/Change?Directory命令來完成。
2. ????在編譯任何HDL代碼前,要建立一個設計庫來存放編譯結果。選取Design?/?Create?a?New?Library生成一個新的設計 庫。確定選取Create:?a?new?library?and?a?logical?mapping?to?it,在Library?Name域中鍵 入work,然后選取OK。這就在當前目錄中建立了一個子目錄,即你的設計庫。ModelSim在這個目錄中保存了名為_info的特殊文件。
(?Prompt?:?vlib?work
vmap?work?work?)
3. ????選取工具欄里的Compile命令來編譯counter.vhd文件到新庫中。這將打開Compile?HDL?Source?Files對話 框。使用vcom命令是看不到的。從列表中選取counter.vhd再點擊Compile,完成后選取Done。可以編譯多個文件,按照設計的需要依次 選取進行編譯。
(?Prompt?:?vcom?counter.vhd?)
4.????選取工具欄里的Load?design按鈕,導入設計單元。Load?design對話框可以讓你選擇庫和頂級(?top-level?)設計單元來仿真,你也可以為仿真選取Simulation?Resolution限制。這次仿真運行,下述是缺省的顯示:
•?Simulator?Resolution:?default?(the?default?is?1?ns)
•?Library:?work
•?Design?Unit:?counter
???如果設計單元是一個實體,你可以點擊前面的加號,來瀏覽其關聯的結構。
???(?Prompt?:?vsim?counter?)
5.????選取counter,然后選擇Load接受設置。
6.????下面,選取View?/?All打開所有的窗口,關于窗口的描述,參閱ModelSim?User’s?Manual。
(?Prompt?:?view?*?)
7.????在Signals?window選取View/List/Signals?in?Region,這個命令顯示List?window中的頂級(?top-level?)信號。
???(?Prompt?:?add?list?/counter/*?)
8.????下步,通過從Signals?window選取View/Wave/Signals?in?Region添加頂級(?top-level?)信號到Wave?window。
???(?Prompt?:?add?wave?/counter/*?)
運行仿真
通過應用始終輸入激勵來開始仿真。
1.????點擊主窗口,在vsim提示符下敲如下面的命令:
???(?force?clk?1?50?,?0?100?–repeat?100?)
???(?MENU?:?Signals/Edit/Clock?)
???ModelSim解釋force命令如下:
????force?clk?to?the?value?1?at?50?ns?after?the?current?time
????then?to?0?at?100?ns?after?the?current?time
????repeat?this?cycle?every?100?ns
2.????現在你可以練習來自于主窗口或波形窗口工具條按鈕的兩個不同的Run功能。(Run功能在主窗口和波形窗口中定義,即這兩個窗口中有Run功能)。首先選取Run按鈕,運行完成之后選取Run?All。
Run.??運行仿真,在100ns后停止。
(PROMPT:?run?100)?(MENU:?Run?/?Run?100ns)
Run-All.??一直運行仿真,直到選取Break。
(PROMPT:?run?-all)?(MENU:?Run?/?Run?-All)
3.????選取主窗口或波形窗口的Break按鈕來中斷仿真,一旦仿真到達一個可接受的停止點,它就停止運行。
在源文件窗口中的箭頭指向下一條將被執行的語句。(如果暫停發生時,仿真沒在評測一個過程,則沒有箭頭顯示在源文件窗口上)。
下面,你將在18行的函數內部設置一個斷點。
4.????移動鼠標到源文件窗口,在18行上點擊設置斷點,可以看到緊挨著行號有一個紅點,可以用鼠標點擊切換斷點的使能與否,斷點禁止后看到是一個小的紅色的園環。可以在斷點上點擊鼠標右鍵,選取Remove?BreakPoint?18來取消斷點。
(?PROMPT?:?bp?counter.vhd?18?)
5.????選取Continue?Run按鈕恢復中斷了的運行,ModelSim會碰上斷點,通過源文件中的一個箭頭或是在主窗口中的一條中斷信息來顯示出來。
???(PROMPT:?run?-continue)?(MENU:?Run?/?Continue)
6.????點擊Step按鈕可以單步執行仿真,注意Variables?window中值的變化。如果你愿意可以持續點擊Step。
???(PROMPT:?run?-step)?(MENU:?Step)
7.????當你完成了,敲入以下命令結束仿真。
quit?-force
8.????命令沒有尋求確認就結束了ModelSim。
第三課???Basic?verilog?Simulation
1.????新建一個目錄,并設置該目錄為當前工作目錄,通過從該目錄調用ModelSim或是選取File/Change?Directory命令來完成。
2. ????拷貝example目錄中verilog文件到當前目錄下。在你編譯verilog文件前,你需要在新目錄下生成一個設計庫。如果你僅僅熟悉解釋 性verilog仿真器,諸如Cadence?Verilog-XL,那么對于你來說這是一個新的方法。因為ModelSim是一個編譯性Verilog 仿真器,對于編譯它需要一個目標設計庫。如果需要的話,ModelSim能夠編譯VHDL和Verilog代碼到同一個庫中。
3.????在編譯 任何HDL代碼前,要建立一個設計庫來存放編譯結果。選取Design?/?Create?a?New?Library生成一個新的設計庫。確定選取 Create:?a?new?library?and?a?logical?mapping?to?it,在Library?Name域中鍵入work, 然后選取OK。這就在當前目錄中建立了一個子目錄,即你的設計庫。ModelSim在這個目錄中保存了名為_info的特殊文件。
?(?Prompt?:?vlib?work
vmap?work?work?)
4.????下面你將編譯Verilog設計。
這 個設計例子由兩個Verilog源文件組成,每一個都包含一個唯一的模塊。文件counter.v包含一個名為counter的模塊,它執行一個簡單的八 位加法計數器。另一個文件tcounter.v是一個測試臺模塊(test_counter),通常用來校驗counter。在仿真下,你可以看到這兩個 文件,通過一個被測試臺例示了的模塊counter的一個簡單的實例(名為dut的實例),來層次化的設置了。稍候你將有機會看一下這個代碼的結構,現 在,你需要編譯兩個文件到work設計庫。
5.????通過選取工具條中的Compile按鈕來編譯兩個文件。
???(?PROMPT?:?vlog?counter.v?tcounter.v?)
???這就打開了Compile?HDL?Source?Files對話框。
???選取兩個文件后,選擇Compile,編譯完成后選取Done。
6.????選取工具條中的Load?Design按鈕開始仿真。
???(?PROMPT?:?vsim?test_counter?)
???Load?Design對話框允許你從指定的庫中選取一個設計單元仿真。你也可以
???為仿真選取Simulation?Resolution限制,缺省的庫是work,缺省的Simulation?Resolution是1ns。
7.????選取test_counter,點擊Load接受這些設置。
8.????通過在主窗口下的vsim提示符下敲入下述命令來調出Signals、List?and?Wave?window:
???view?signals?list?wave
???(MENU:?View/<window?name/)
9.????為了列示頂級(?top-level?)信號,移動鼠標到Signals?window,選取View/List/Signals?in?Region。
???(?Prompt?:?add?list?/test_counter/*?)
10.????現在向Wave?window添加信號。在Signals?window選取Edit/Select?All選擇三個信號,拖動三個信號到Wave?window的路徑名或是數值窗格的任一個中。
HDL條目也能夠從一個窗口拷貝到另一個窗口(或者是在Wave?and?List?window內部),通過Edit?/?Copy和Edit?/?Paste菜單命令。也能刪除選取的條目Edit?/?Delete。
11.????下面打開Source?window,選取View?/?Source
???(?Prompt?:?view?source?)
12.????導入設計的時候會在工作去開出一個新的Sim?Tab欄。這個Structure?Pane展示了設計的層次結構。你可以點即“+”(expand)或“-”(contract)來觀察。
13. ????點擊其中的Function?increment可以注意到其他窗口是怎么適當的自動更新的。明確地說,Source?window顯示了你在 Structure?window所選的層次水平的Verilog代碼.在這種方式下使用Structure?Pane類似于解釋性Verilog的范圍 命令?,F在,點擊Structure?Pane的頂層線,確定test_counter模塊顯示在Source?window。
運行仿真
1.????Run運行100ns,缺省設置。
???(PROMPT:?run?)?(MENU:?Run/Run?100ns)
2.????設置Run?Length為500ns,然后Run。
現在仿真運行了600ns,在工作取底部狀態欄可以看到這些信息。
3.????上個命令使仿真器前進了500ns,也可以設置仿真器推進的時間
run?@?3000
實際仿真器向前推進了2400ns(3000-600)
4.????選取主窗口Run?All。
???(PROMPT:?run?-all?)?(MENU:?Run/Run?-All)
5.????選取Break中斷運行。
看Source?window,察看中斷執行的語句。
調試仿真
1.????在List?window選取/test_counter/count。從List?window菜單條中選取?Prop?/?Signal?Props。Modify?Signal?Properties?(list)?對話框打開了。
為信號counter選取十進制(在Radix),相應的List?window的輸出也發生改變,成為十進制數,而不是缺省的二進制了。
2.????我們選取工作區Structure?Pane中的dut:counter,然后在counter.v中的30行(這里包含一個到Verilog功能增量的調用)設置斷點。
3.????選取Restart按鈕,重載設計組件和重置仿真時間為零。
???(PROMPT:?restart?)?(MENU:?File/Restart)
???確認Restart對話框中所有條目被選中,然后點擊Restart。
???例子中的Verilog代碼中19行有一個stop語句,如果不Restart的話,將會停
???在這一句上。
4.????選取Run?–All(主窗口),恢復執行仿真。中斷后看Source?window。
???(PROMPT:?run?-all?)?(MENU:?Run/Run?-All)
5.????正常的,當中斷到達后你對一個或多個信號的值感興趣,你有幾個選項可以檢測這些值。你能看顯示在Signals?window中的值;可以在Source?window中,在變量上點右鍵;或者使用examine命令。
examine?count
命令的結果是,值會輸出在主窗口。
6.????執行單步跳使命令Step,遍歷Verilog源函數。
7.????結束仿真的命令為:quit?–force。
第四課???Mixed?VHDL/verilog?simulation
準備仿真
1.????生成一個新的工作目錄,拷貝../examples/mixedhdl/下的*.vhd和*.v文件到新目錄中。設置為為當前工作目錄。運行軟件,如果Welcome對話框出現,選取Proceed?to?ModelSim。
2.????Select?Design/Create?a?New?Library
(PROMPT:vlib?work)
Type?Library?Name:work
Select?OK!
3.????編譯文件
(PROMPT?:?vlog?cache.v?memory.v?proc.v)
(PROMPT?:?vcom?util.vhd?set.vhd?top.vhd)
打開Compile?HDL?Source?Files對話框。?逐個編譯Verilog文件。
cache.v??memeory.v??proc.v
4.????依賴設計,VHDL的編譯次序是特定的。在這個例子中,top.vhd文件必須最后編譯。按照下面的順序編譯文件:
util.vhd??set.vhd?top.vhd
5.????編譯完成,點Done。
運行仿真
1.????選取Load?Design開始仿真。Load?Design對話框打開,選取top實體點擊Load。
(PROMPT?:?vsim?top)
2.????View/All,(PROMPT?:?view?*)
3.????add?list?*
add?wave?*
(Signals?MENU:?View/List/Signals?in?Region)
(Signals?MENU:?View/Wave/Signals?in?Region)
4.????觀察一下工作區的Structure?pane。注意設計中兩者的層次混合,VHDL級的用一個方框前綴指示,Verilog級的用一個圓形前綴指示。
5.????在Structure?pane中點擊模塊c:cache,它的源代碼出現在源文件窗口。
6.????用查找功能定位cache.v文件中cache_set的聲明。
Edit/Find。
找到了可以發現,cache_set是cache.v文件內例示了的VHDL實體。
7.????在Structure?window,點擊行“s0:cache_set(only)”。則Source?window顯示了cache_set實體的VHDL代碼。
8.????Quit?-force
第五課???Debugging?a?VHDL?simulation
準備仿真
1.????拷貝../example/下的gates.vhd,adder.vhd,testadder.vhd文件到新建的工作目錄,并定位為當前工作目錄。
2.????生成一個新庫:vlib?library_2。
3.????在命令行的方式下敲入以下命令將源文件編譯到新庫中
vcom?–work?library_2?gates.vhd?adder.vhd?testadder.vhd
4.????下一步是映射新庫到工作庫,可以編輯modelsim.ini文件來生成映射,或者用vmap命令生成一個邏輯庫名字來完成。
vmap?work?library_2
ModelSim為你修改modelsim.ini文件。
5.????選取Design/Load?Design,打開Load?Design對話框。
6.????確認simulation?resolution為缺省;在設計單元中選取名為test_adder_structural的配置;單擊Load接受設置。
???(PROMPT?:?vsim?–t?ns?work.test_adder_structural)
7.????打開所有的窗口。(PROMPT:View?*)(MENU:View/All)
8.????在Signals?window中選區所有信號Edit/Select?All然后拖到List?window中。
???(MENU:View/List/Signals?in?Region)?(PROMPT:add?list?*)
9.????同樣地,把信號加到Wave?window中。鍵入命令:add?wave?*
???(MENU:View/Wave/Signals?in?Region)(DRAG&DROP)
10.????在主工具條上的運行時間選擇器中,改變運行時間設置為1000ns。
???(MENU:Option/Simulation/Defaults)
運行調試仿真
1.????選取Run,運行仿真。(PROMPT:run)
主窗口中的一條消息將通報你有一個判斷錯誤。執行下面步驟查找錯誤。
2.????首先,改變仿真判斷選項。選取Option/Simulation。
3.????選取Assertions頁面。改變選擇為Break?on?Assertion?to?Error并點擊OK。這將使仿真停在HDL判斷語句上。
4.????選取Restart。(MENU:File/Restart)?(PROMPT:restart)
確定Restart對話框中所有條目被選,然后點擊Restart。
5.????選取Run??梢钥吹絊ource?window中的箭頭指向判斷語句。
???(MENU:Run/Run?1000?ns)?(PROMPT:run)
6.????在Variables?window中,你可以看到i=6。這表示仿真停留在測試模式環路的第六次重復中。
7.????點擊加號“+”展開名為test_patterns的變量。
8.????也要展開排列test_patterns(6)的第六次紀錄。
判斷表明了Signal?window中的?sum不等于Variables?window中的sum字段。輸入a,b和cin的和應該等于輸出sum。但是在測試向量內有一個錯誤。為了改正這個錯誤,你需要重仿真且修改測試向量的初始值。
9.????執行restart?–f命令
參數-f使ModelSim不出現確認對話框就重新仿真。
10.????在test?Process?window中選取?testbench?process更新?Variables?window。
11.????再次展開Variables?window中的test_patterns和test_patterns(6)。點擊變量名字,高亮顯示.sum紀錄,然后選取Edit/Change。
12.????把value中數值的最后四位(1000),替換為0111,并點擊Change。(這只是暫時編輯,你必須用文本編輯器永久地改變源代碼。)
13.????選取Run。
???(MENU:Run/Run?1?us)?(PROMPT:run)
???這樣,仿真運行時就不會報錯了。
改變new-line觸發
缺省的,對于列出信號的每一次變化一條新線顯示在List?window中。下面的步驟將改變觸發因而每100ns就列出這些值。
1.????在List?window中,選取Prop/Display?Props。
2.????在Triggers頁面完成這些步驟。
???•取消選取Trigger?On:Signals以禁止在信號上觸發
???•選取Trigger?On:Strobe以開啟strobe
???•在Strobe?Period域鍵入100
???•在First?Strobe?at域鍵入70
???•單擊OK接受設置
3.????最后一步將把信號a,b和sum改為十進制。選取Prop/Signal?Props,打開Modify?Signal?Properties(list)對話框。
4.????選取信號,改變其屬性。然后結束ModelSim,quit?–force。
第六課???Running?a?batch-mode?simulation
批處理模式仿真必須運行在DOS或UNIX提示符下。
1.????生成一個新目錄,設置成當前工作目錄。拷貝../examples/counter.vhd到該目錄下。
2.????生成一個新的設計庫:vlib?work
3.????映射庫:vmap?work?work
4.????編譯源文件:vcom?counter.vhd
5.????使用宏文件為計數器提供激勵。拷貝../example/stim.do文件到當前工作目錄中。
6.????生成批處理文件,內容為:
add?list?–decimal?*
do?stim.do
write?list?counter.lst
7.????執行下面的命令,運行批處理模式仿真:
vsim?–do?yourfile?–wlf?saved.wlf?counter
•在名為“counter”的設計單元調用vsim仿真器
•通過-wlf這個可選項通知仿真器在名為saved.wlf的日志文件中保存仿真結果
•運行yourfile指定:值以十進制的方式列示出來;執行名為stim.do的激勵;并將結果寫到名為counter.lst的文件中。缺省的設計名為counter。
8.????瀏覽仿真結果?vsim?–view?saved.wlf
9.????打開一些窗口?view?signals?list?wave
10.????在窗口中放置信號?add?wave?*
????????????????????????add?list?*
11.????運用Variables?windows實驗保存的仿真結果。完成了結束仿真:
quit?–f
有關批處理和命令行模式更多的信息,請參閱ModelSim?User’s?Manual。
第七課???Executing?Commands?at?startup
本課與第六課所介紹的工作于相同的目錄,也是以命令行方式操作。
1.????這里將用到宏文件(DO)提供啟動信息??截?./examples/startup.do到當前工作目錄。
2.????拷貝modeltech目錄下的modelsim.ini文件到當前工作目錄。然后編輯該文件,指定一個在設計導入之后被執行的命令。用notepad打開ini文件,取消下屬語句的注釋,它位于文件的[vsim]部分:(修改后保存)
Startup=do?startup.do
3.????瀏覽這個DO文件,可以發現它用了一個預定義變量$entity來為不同的設計在啟動時作不同的事情。
4.????鍵入以下指令指定將被仿真的頂級設計單元,開始仿真:vsim?counter
注意到沒有顯示對話框仿真器就導入了設計單元。對于一再地仿真同一個設計單元,這樣做是很便捷的。還可以注意到所有的窗口都打開了,這是因為命令view?*包括在啟動宏里面。
5.????結束ModelSim,執行quit?–f命令。
6.????在其他例子中是不需要startup.do文件的,所以用文本編輯器注釋掉modelsim.ini文件中的Startup這一行。
第八課???Finding?names?and?values
Finding?items?by?name?in?tree?windows
你可以使用各個窗口(List,Process,Signal,Source,Structure,Variables,and?Wave?window)中的查找對話框找尋你需要的HDL條目。Edit/Find
Searching?for?item?values?in?the?List?and?Wave?windows
你可以在List?and?Wave?windows中搜尋HDL條目的值。Edit/Search
你能夠為Signal?Name(s)定位值,搜尋基于以下的選項:
•Search?Type:Any?Transition搜尋選取信號的任何變化
•Search?Type:Rising?Edge搜尋選取信號的上升沿
•Search?Type:Falling?Edge搜尋選取信號的下降沿
•Search?Type:Search?for?Signal?Value
搜尋Value域中指定的值(符合VHDL?or?Verilog的數值格式)
•Search?Type:Search?for?Expression
搜尋評測一個布爾真值的Expression域中的表達式
表達式可以調用一個以上的信號,但是限制在紀錄于List?windows上的信號。表達式可以包括常量、變量和Tcl宏。如果沒有指定表達式,搜尋將返回一個錯誤。參閱ModelSim?Command?Reference以獲取更多關于表達式語法的信息。
•Search?Options:Match?Count
??你能夠搜尋關于值的第n個變化或者是第n個匹配。Match?Count指示了搜尋到的變化或匹配的數量。
•Search?Options:Ignore?Glitches
??忽略VHDL信號和Verilog網表中的零寬度的脈沖干擾。
搜尋的結果顯示在對話框的底部。
第四章????使用中的注意事項
1.????如果打開ModelSim,沒有出現Welcom?to?ModelSim對話框,可以在主窗口點擊Help?/?Enable?Welcome,則以后打開ModelSim就會出現該對話框。
2.????在工作區底部的狀態欄里會顯示一些有用的信息。
3.????操作哪個目錄中的文件一定要定位到該目錄,或者是設置為當前工作目錄。
4.????不能用UNIX或window命令來生成work子目錄,因為里面沒有_info文件,只能用菜單或vlib命令。
5.????斷點只能設置在可執行的行上,這些行以綠色行號指示
6.???? 在Basic?Verilog?Simulation一課里面,編譯兩個文件的次序是不重要的(不同于被編譯器指示生成的源碼的從屬性)。Verilog -Xl的用戶可能再次感到奇怪,他們了解設計單元之間的接口檢測或是編譯器指示的繼承關系上可能存在的問題。ModelSim推遲了這樣的檢測,直到設計 被導入。所以在這里,如果你選擇在tcounter.v之前或之后編譯counter.v不存在任何問題。
7.????一組Verilog文件可以以任意次序編譯,但是在一個混合VHDL/Verilog設計中,Verilog文件必須在VHDL文件值前編譯。
8.????force命令可以驅動clk,相當于給仿真初始化。
本指南是為 ModelSim5.5f版本編寫的,該版本運行于UNIX和Microsoft?Windows?95/98/Me/NT/2000的操作系統環境中。 本指南覆蓋了VHDL和Verilog模擬仿真,但是你在學習過程中會發現對于單純的HDL設計工作而言,它是一個很有用的參考。ModelSim具備強 大的模擬仿真功能,在設計、編譯、仿真、測試、調試開發過程中,有一整套工具供你使用,而且操作起來極其靈活,可以通過菜單、快捷鍵和命令行的方式進行工 作。ModelSim的窗口管理界面讓用戶使用起來很方面,它能很好的與操作系統環境協調工作。ModelSim的一個很顯著的特點就是它具備命令行的操 作方式,類似于一個shell有很多操作指令供你使用,給人的感覺就像是工作在Unix環境下,這種命令行操作方式是基于Tcl/Tk的,其功能相當強 大,這需要在以后的實際應用中慢慢體會。
ModelSim的功能側重于編譯、仿真,不能指定編譯的器件,不具有編程下載能力。不象 Synplify和MAX+PLUS?II可以在編譯前選擇器件。而且ModelSim在時序仿真時無法編輯輸入波形,不象MAX+PLUS?II可以自 行設置輸入波形,仿真后自動產生輸出波形,而是需要在源文件中就確定輸入,如編寫測試臺程序來完成初始化、模塊輸入的工作,或者通過外部宏文件提供激勵。 這樣才可以看到仿真模塊的時序波形圖。另外對于Synplify來說,也只具有編譯能力,但是比MAX+PLUS?II可編譯的verilog的內容要 多,所以常常可以現在Synplify下編譯,生成編譯文件再送到MAX+PLUS?II中使用。
ModelSim還具有分析代碼的能力,可以看出不同的代碼段消耗資源的情況,從而可以對代碼進行改善,以提高其效率。
第二章????ModelSim的主要結構
ModelSim的主窗口(Main?window)包括菜單欄、工具欄、工作區和命令行操作區。
在工作區可以顯示Project?Tab、Library?Tab、Sim?Tab(顯示Load?Design、Hierarchical?Structure);在命令行操作區,可以用命令提示符的方式進行編譯、仿真設計,同時打開其他窗口。
在 菜單欄View下可以打開,source?window、list?window、wave?window、structure?window、 signal?window、dataflow?window、process?window、viarables?window等窗口,用來測試仿真、 調試仿真。由此也可以看出該軟件具有強大的仿真設計能力,它提供的工具很多。
在幫助菜單里有SE的幫助文件和Tcl的幫助文件,是學用ModelSim很好的幫手。
第三章????ModelSim的簡要使用方法
在這一章里通過一些課程來簡單介紹ModelSim的使用方法,更多的需要在實際應用中熟練和掌握。
第一課???Create?a?Project
1.????第一次打開ModelSim會出現Welcome?to?ModelSim對話框,選取Create?a?Project,或者選取File/New/Project,然后會打開Create?Project對話框。
2.????在Create?Project對話框中,填寫test作為Project?Name;選取路徑Project?Location作為Project文件的存儲目錄;保留Default?Library?Name設置為work。
3.????選取OK,會看到工作區出現Project?and?Library?Tab。
4.????下一步是添加包含設計單元的文件,在工作區的Project?page中,點擊鼠標右鍵,選取Add?File?to?Project。
5. ????在這次練習中我們加兩個文件,點擊Add?File?to?Project對話框中的Browse按鈕,打開ModelSim安裝路徑中的 example目錄,選取counter.v和tcounter.v,再選取Reference?from?current?location,然后點擊 OK。
6.????在工作區的Project?page中,單擊右鍵,選取Compile?All。
7.????兩個文件編譯了,鼠標點擊Library?Tab欄,將會看到兩個編譯了的設計單元列了出來??床坏骄鸵袻ibrary的工作域設為work。
8.????最后一不是導入一個設計單元,雙擊Library?Tab中的counter,將會出現Sim?Tab,其中顯示了counter設計單元的結構。也可以Design/Load?design來導入設計。
到這一步通常就開始運行仿真和分析,以及調試設計,不過這些工作在以后的課程中來完成。結束仿真選取Design?/?End?Simulation,結束Project選取File?/?Close?/?Project。
第二課???Basic?VHDL?Simulation
準備仿真
1.????為這次練習新建一個目錄,然后拷貝example目錄中所有的vhd文件到該目錄下。設置該目錄為當前工作目錄,這一步通過從該目錄調用ModelSim或是選取File/Change?Directory命令來完成。
2. ????在編譯任何HDL代碼前,要建立一個設計庫來存放編譯結果。選取Design?/?Create?a?New?Library生成一個新的設計 庫。確定選取Create:?a?new?library?and?a?logical?mapping?to?it,在Library?Name域中鍵 入work,然后選取OK。這就在當前目錄中建立了一個子目錄,即你的設計庫。ModelSim在這個目錄中保存了名為_info的特殊文件。
(?Prompt?:?vlib?work
vmap?work?work?)
3. ????選取工具欄里的Compile命令來編譯counter.vhd文件到新庫中。這將打開Compile?HDL?Source?Files對話 框。使用vcom命令是看不到的。從列表中選取counter.vhd再點擊Compile,完成后選取Done。可以編譯多個文件,按照設計的需要依次 選取進行編譯。
(?Prompt?:?vcom?counter.vhd?)
4.????選取工具欄里的Load?design按鈕,導入設計單元。Load?design對話框可以讓你選擇庫和頂級(?top-level?)設計單元來仿真,你也可以為仿真選取Simulation?Resolution限制。這次仿真運行,下述是缺省的顯示:
•?Simulator?Resolution:?default?(the?default?is?1?ns)
•?Library:?work
•?Design?Unit:?counter
???如果設計單元是一個實體,你可以點擊前面的加號,來瀏覽其關聯的結構。
???(?Prompt?:?vsim?counter?)
5.????選取counter,然后選擇Load接受設置。
6.????下面,選取View?/?All打開所有的窗口,關于窗口的描述,參閱ModelSim?User’s?Manual。
(?Prompt?:?view?*?)
7.????在Signals?window選取View/List/Signals?in?Region,這個命令顯示List?window中的頂級(?top-level?)信號。
???(?Prompt?:?add?list?/counter/*?)
8.????下步,通過從Signals?window選取View/Wave/Signals?in?Region添加頂級(?top-level?)信號到Wave?window。
???(?Prompt?:?add?wave?/counter/*?)
運行仿真
通過應用始終輸入激勵來開始仿真。
1.????點擊主窗口,在vsim提示符下敲如下面的命令:
???(?force?clk?1?50?,?0?100?–repeat?100?)
???(?MENU?:?Signals/Edit/Clock?)
???ModelSim解釋force命令如下:
????force?clk?to?the?value?1?at?50?ns?after?the?current?time
????then?to?0?at?100?ns?after?the?current?time
????repeat?this?cycle?every?100?ns
2.????現在你可以練習來自于主窗口或波形窗口工具條按鈕的兩個不同的Run功能。(Run功能在主窗口和波形窗口中定義,即這兩個窗口中有Run功能)。首先選取Run按鈕,運行完成之后選取Run?All。
Run.??運行仿真,在100ns后停止。
(PROMPT:?run?100)?(MENU:?Run?/?Run?100ns)
Run-All.??一直運行仿真,直到選取Break。
(PROMPT:?run?-all)?(MENU:?Run?/?Run?-All)
3.????選取主窗口或波形窗口的Break按鈕來中斷仿真,一旦仿真到達一個可接受的停止點,它就停止運行。
在源文件窗口中的箭頭指向下一條將被執行的語句。(如果暫停發生時,仿真沒在評測一個過程,則沒有箭頭顯示在源文件窗口上)。
下面,你將在18行的函數內部設置一個斷點。
4.????移動鼠標到源文件窗口,在18行上點擊設置斷點,可以看到緊挨著行號有一個紅點,可以用鼠標點擊切換斷點的使能與否,斷點禁止后看到是一個小的紅色的園環。可以在斷點上點擊鼠標右鍵,選取Remove?BreakPoint?18來取消斷點。
(?PROMPT?:?bp?counter.vhd?18?)
5.????選取Continue?Run按鈕恢復中斷了的運行,ModelSim會碰上斷點,通過源文件中的一個箭頭或是在主窗口中的一條中斷信息來顯示出來。
???(PROMPT:?run?-continue)?(MENU:?Run?/?Continue)
6.????點擊Step按鈕可以單步執行仿真,注意Variables?window中值的變化。如果你愿意可以持續點擊Step。
???(PROMPT:?run?-step)?(MENU:?Step)
7.????當你完成了,敲入以下命令結束仿真。
quit?-force
8.????命令沒有尋求確認就結束了ModelSim。
第三課???Basic?verilog?Simulation
1.????新建一個目錄,并設置該目錄為當前工作目錄,通過從該目錄調用ModelSim或是選取File/Change?Directory命令來完成。
2. ????拷貝example目錄中verilog文件到當前目錄下。在你編譯verilog文件前,你需要在新目錄下生成一個設計庫。如果你僅僅熟悉解釋 性verilog仿真器,諸如Cadence?Verilog-XL,那么對于你來說這是一個新的方法。因為ModelSim是一個編譯性Verilog 仿真器,對于編譯它需要一個目標設計庫。如果需要的話,ModelSim能夠編譯VHDL和Verilog代碼到同一個庫中。
3.????在編譯 任何HDL代碼前,要建立一個設計庫來存放編譯結果。選取Design?/?Create?a?New?Library生成一個新的設計庫。確定選取 Create:?a?new?library?and?a?logical?mapping?to?it,在Library?Name域中鍵入work, 然后選取OK。這就在當前目錄中建立了一個子目錄,即你的設計庫。ModelSim在這個目錄中保存了名為_info的特殊文件。
?(?Prompt?:?vlib?work
vmap?work?work?)
4.????下面你將編譯Verilog設計。
這 個設計例子由兩個Verilog源文件組成,每一個都包含一個唯一的模塊。文件counter.v包含一個名為counter的模塊,它執行一個簡單的八 位加法計數器。另一個文件tcounter.v是一個測試臺模塊(test_counter),通常用來校驗counter。在仿真下,你可以看到這兩個 文件,通過一個被測試臺例示了的模塊counter的一個簡單的實例(名為dut的實例),來層次化的設置了。稍候你將有機會看一下這個代碼的結構,現 在,你需要編譯兩個文件到work設計庫。
5.????通過選取工具條中的Compile按鈕來編譯兩個文件。
???(?PROMPT?:?vlog?counter.v?tcounter.v?)
???這就打開了Compile?HDL?Source?Files對話框。
???選取兩個文件后,選擇Compile,編譯完成后選取Done。
6.????選取工具條中的Load?Design按鈕開始仿真。
???(?PROMPT?:?vsim?test_counter?)
???Load?Design對話框允許你從指定的庫中選取一個設計單元仿真。你也可以
???為仿真選取Simulation?Resolution限制,缺省的庫是work,缺省的Simulation?Resolution是1ns。
7.????選取test_counter,點擊Load接受這些設置。
8.????通過在主窗口下的vsim提示符下敲入下述命令來調出Signals、List?and?Wave?window:
???view?signals?list?wave
???(MENU:?View/<window?name/)
9.????為了列示頂級(?top-level?)信號,移動鼠標到Signals?window,選取View/List/Signals?in?Region。
???(?Prompt?:?add?list?/test_counter/*?)
10.????現在向Wave?window添加信號。在Signals?window選取Edit/Select?All選擇三個信號,拖動三個信號到Wave?window的路徑名或是數值窗格的任一個中。
HDL條目也能夠從一個窗口拷貝到另一個窗口(或者是在Wave?and?List?window內部),通過Edit?/?Copy和Edit?/?Paste菜單命令。也能刪除選取的條目Edit?/?Delete。
11.????下面打開Source?window,選取View?/?Source
???(?Prompt?:?view?source?)
12.????導入設計的時候會在工作去開出一個新的Sim?Tab欄。這個Structure?Pane展示了設計的層次結構。你可以點即“+”(expand)或“-”(contract)來觀察。
13. ????點擊其中的Function?increment可以注意到其他窗口是怎么適當的自動更新的。明確地說,Source?window顯示了你在 Structure?window所選的層次水平的Verilog代碼.在這種方式下使用Structure?Pane類似于解釋性Verilog的范圍 命令?,F在,點擊Structure?Pane的頂層線,確定test_counter模塊顯示在Source?window。
運行仿真
1.????Run運行100ns,缺省設置。
???(PROMPT:?run?)?(MENU:?Run/Run?100ns)
2.????設置Run?Length為500ns,然后Run。
現在仿真運行了600ns,在工作取底部狀態欄可以看到這些信息。
3.????上個命令使仿真器前進了500ns,也可以設置仿真器推進的時間
run?@?3000
實際仿真器向前推進了2400ns(3000-600)
4.????選取主窗口Run?All。
???(PROMPT:?run?-all?)?(MENU:?Run/Run?-All)
5.????選取Break中斷運行。
看Source?window,察看中斷執行的語句。
調試仿真
1.????在List?window選取/test_counter/count。從List?window菜單條中選取?Prop?/?Signal?Props。Modify?Signal?Properties?(list)?對話框打開了。
為信號counter選取十進制(在Radix),相應的List?window的輸出也發生改變,成為十進制數,而不是缺省的二進制了。
2.????我們選取工作區Structure?Pane中的dut:counter,然后在counter.v中的30行(這里包含一個到Verilog功能增量的調用)設置斷點。
3.????選取Restart按鈕,重載設計組件和重置仿真時間為零。
???(PROMPT:?restart?)?(MENU:?File/Restart)
???確認Restart對話框中所有條目被選中,然后點擊Restart。
???例子中的Verilog代碼中19行有一個stop語句,如果不Restart的話,將會停
???在這一句上。
4.????選取Run?–All(主窗口),恢復執行仿真。中斷后看Source?window。
???(PROMPT:?run?-all?)?(MENU:?Run/Run?-All)
5.????正常的,當中斷到達后你對一個或多個信號的值感興趣,你有幾個選項可以檢測這些值。你能看顯示在Signals?window中的值;可以在Source?window中,在變量上點右鍵;或者使用examine命令。
examine?count
命令的結果是,值會輸出在主窗口。
6.????執行單步跳使命令Step,遍歷Verilog源函數。
7.????結束仿真的命令為:quit?–force。
第四課???Mixed?VHDL/verilog?simulation
準備仿真
1.????生成一個新的工作目錄,拷貝../examples/mixedhdl/下的*.vhd和*.v文件到新目錄中。設置為為當前工作目錄。運行軟件,如果Welcome對話框出現,選取Proceed?to?ModelSim。
2.????Select?Design/Create?a?New?Library
(PROMPT:vlib?work)
Type?Library?Name:work
Select?OK!
3.????編譯文件
(PROMPT?:?vlog?cache.v?memory.v?proc.v)
(PROMPT?:?vcom?util.vhd?set.vhd?top.vhd)
打開Compile?HDL?Source?Files對話框。?逐個編譯Verilog文件。
cache.v??memeory.v??proc.v
4.????依賴設計,VHDL的編譯次序是特定的。在這個例子中,top.vhd文件必須最后編譯。按照下面的順序編譯文件:
util.vhd??set.vhd?top.vhd
5.????編譯完成,點Done。
運行仿真
1.????選取Load?Design開始仿真。Load?Design對話框打開,選取top實體點擊Load。
(PROMPT?:?vsim?top)
2.????View/All,(PROMPT?:?view?*)
3.????add?list?*
add?wave?*
(Signals?MENU:?View/List/Signals?in?Region)
(Signals?MENU:?View/Wave/Signals?in?Region)
4.????觀察一下工作區的Structure?pane。注意設計中兩者的層次混合,VHDL級的用一個方框前綴指示,Verilog級的用一個圓形前綴指示。
5.????在Structure?pane中點擊模塊c:cache,它的源代碼出現在源文件窗口。
6.????用查找功能定位cache.v文件中cache_set的聲明。
Edit/Find。
找到了可以發現,cache_set是cache.v文件內例示了的VHDL實體。
7.????在Structure?window,點擊行“s0:cache_set(only)”。則Source?window顯示了cache_set實體的VHDL代碼。
8.????Quit?-force
第五課???Debugging?a?VHDL?simulation
準備仿真
1.????拷貝../example/下的gates.vhd,adder.vhd,testadder.vhd文件到新建的工作目錄,并定位為當前工作目錄。
2.????生成一個新庫:vlib?library_2。
3.????在命令行的方式下敲入以下命令將源文件編譯到新庫中
vcom?–work?library_2?gates.vhd?adder.vhd?testadder.vhd
4.????下一步是映射新庫到工作庫,可以編輯modelsim.ini文件來生成映射,或者用vmap命令生成一個邏輯庫名字來完成。
vmap?work?library_2
ModelSim為你修改modelsim.ini文件。
5.????選取Design/Load?Design,打開Load?Design對話框。
6.????確認simulation?resolution為缺省;在設計單元中選取名為test_adder_structural的配置;單擊Load接受設置。
???(PROMPT?:?vsim?–t?ns?work.test_adder_structural)
7.????打開所有的窗口。(PROMPT:View?*)(MENU:View/All)
8.????在Signals?window中選區所有信號Edit/Select?All然后拖到List?window中。
???(MENU:View/List/Signals?in?Region)?(PROMPT:add?list?*)
9.????同樣地,把信號加到Wave?window中。鍵入命令:add?wave?*
???(MENU:View/Wave/Signals?in?Region)(DRAG&DROP)
10.????在主工具條上的運行時間選擇器中,改變運行時間設置為1000ns。
???(MENU:Option/Simulation/Defaults)
運行調試仿真
1.????選取Run,運行仿真。(PROMPT:run)
主窗口中的一條消息將通報你有一個判斷錯誤。執行下面步驟查找錯誤。
2.????首先,改變仿真判斷選項。選取Option/Simulation。
3.????選取Assertions頁面。改變選擇為Break?on?Assertion?to?Error并點擊OK。這將使仿真停在HDL判斷語句上。
4.????選取Restart。(MENU:File/Restart)?(PROMPT:restart)
確定Restart對話框中所有條目被選,然后點擊Restart。
5.????選取Run??梢钥吹絊ource?window中的箭頭指向判斷語句。
???(MENU:Run/Run?1000?ns)?(PROMPT:run)
6.????在Variables?window中,你可以看到i=6。這表示仿真停留在測試模式環路的第六次重復中。
7.????點擊加號“+”展開名為test_patterns的變量。
8.????也要展開排列test_patterns(6)的第六次紀錄。
判斷表明了Signal?window中的?sum不等于Variables?window中的sum字段。輸入a,b和cin的和應該等于輸出sum。但是在測試向量內有一個錯誤。為了改正這個錯誤,你需要重仿真且修改測試向量的初始值。
9.????執行restart?–f命令
參數-f使ModelSim不出現確認對話框就重新仿真。
10.????在test?Process?window中選取?testbench?process更新?Variables?window。
11.????再次展開Variables?window中的test_patterns和test_patterns(6)。點擊變量名字,高亮顯示.sum紀錄,然后選取Edit/Change。
12.????把value中數值的最后四位(1000),替換為0111,并點擊Change。(這只是暫時編輯,你必須用文本編輯器永久地改變源代碼。)
13.????選取Run。
???(MENU:Run/Run?1?us)?(PROMPT:run)
???這樣,仿真運行時就不會報錯了。
改變new-line觸發
缺省的,對于列出信號的每一次變化一條新線顯示在List?window中。下面的步驟將改變觸發因而每100ns就列出這些值。
1.????在List?window中,選取Prop/Display?Props。
2.????在Triggers頁面完成這些步驟。
???•取消選取Trigger?On:Signals以禁止在信號上觸發
???•選取Trigger?On:Strobe以開啟strobe
???•在Strobe?Period域鍵入100
???•在First?Strobe?at域鍵入70
???•單擊OK接受設置
3.????最后一步將把信號a,b和sum改為十進制。選取Prop/Signal?Props,打開Modify?Signal?Properties(list)對話框。
4.????選取信號,改變其屬性。然后結束ModelSim,quit?–force。
第六課???Running?a?batch-mode?simulation
批處理模式仿真必須運行在DOS或UNIX提示符下。
1.????生成一個新目錄,設置成當前工作目錄。拷貝../examples/counter.vhd到該目錄下。
2.????生成一個新的設計庫:vlib?work
3.????映射庫:vmap?work?work
4.????編譯源文件:vcom?counter.vhd
5.????使用宏文件為計數器提供激勵。拷貝../example/stim.do文件到當前工作目錄中。
6.????生成批處理文件,內容為:
add?list?–decimal?*
do?stim.do
write?list?counter.lst
7.????執行下面的命令,運行批處理模式仿真:
vsim?–do?yourfile?–wlf?saved.wlf?counter
•在名為“counter”的設計單元調用vsim仿真器
•通過-wlf這個可選項通知仿真器在名為saved.wlf的日志文件中保存仿真結果
•運行yourfile指定:值以十進制的方式列示出來;執行名為stim.do的激勵;并將結果寫到名為counter.lst的文件中。缺省的設計名為counter。
8.????瀏覽仿真結果?vsim?–view?saved.wlf
9.????打開一些窗口?view?signals?list?wave
10.????在窗口中放置信號?add?wave?*
????????????????????????add?list?*
11.????運用Variables?windows實驗保存的仿真結果。完成了結束仿真:
quit?–f
有關批處理和命令行模式更多的信息,請參閱ModelSim?User’s?Manual。
第七課???Executing?Commands?at?startup
本課與第六課所介紹的工作于相同的目錄,也是以命令行方式操作。
1.????這里將用到宏文件(DO)提供啟動信息??截?./examples/startup.do到當前工作目錄。
2.????拷貝modeltech目錄下的modelsim.ini文件到當前工作目錄。然后編輯該文件,指定一個在設計導入之后被執行的命令。用notepad打開ini文件,取消下屬語句的注釋,它位于文件的[vsim]部分:(修改后保存)
Startup=do?startup.do
3.????瀏覽這個DO文件,可以發現它用了一個預定義變量$entity來為不同的設計在啟動時作不同的事情。
4.????鍵入以下指令指定將被仿真的頂級設計單元,開始仿真:vsim?counter
注意到沒有顯示對話框仿真器就導入了設計單元。對于一再地仿真同一個設計單元,這樣做是很便捷的。還可以注意到所有的窗口都打開了,這是因為命令view?*包括在啟動宏里面。
5.????結束ModelSim,執行quit?–f命令。
6.????在其他例子中是不需要startup.do文件的,所以用文本編輯器注釋掉modelsim.ini文件中的Startup這一行。
第八課???Finding?names?and?values
Finding?items?by?name?in?tree?windows
你可以使用各個窗口(List,Process,Signal,Source,Structure,Variables,and?Wave?window)中的查找對話框找尋你需要的HDL條目。Edit/Find
Searching?for?item?values?in?the?List?and?Wave?windows
你可以在List?and?Wave?windows中搜尋HDL條目的值。Edit/Search
你能夠為Signal?Name(s)定位值,搜尋基于以下的選項:
•Search?Type:Any?Transition搜尋選取信號的任何變化
•Search?Type:Rising?Edge搜尋選取信號的上升沿
•Search?Type:Falling?Edge搜尋選取信號的下降沿
•Search?Type:Search?for?Signal?Value
搜尋Value域中指定的值(符合VHDL?or?Verilog的數值格式)
•Search?Type:Search?for?Expression
搜尋評測一個布爾真值的Expression域中的表達式
表達式可以調用一個以上的信號,但是限制在紀錄于List?windows上的信號。表達式可以包括常量、變量和Tcl宏。如果沒有指定表達式,搜尋將返回一個錯誤。參閱ModelSim?Command?Reference以獲取更多關于表達式語法的信息。
•Search?Options:Match?Count
??你能夠搜尋關于值的第n個變化或者是第n個匹配。Match?Count指示了搜尋到的變化或匹配的數量。
•Search?Options:Ignore?Glitches
??忽略VHDL信號和Verilog網表中的零寬度的脈沖干擾。
搜尋的結果顯示在對話框的底部。
第四章????使用中的注意事項
1.????如果打開ModelSim,沒有出現Welcom?to?ModelSim對話框,可以在主窗口點擊Help?/?Enable?Welcome,則以后打開ModelSim就會出現該對話框。
2.????在工作區底部的狀態欄里會顯示一些有用的信息。
3.????操作哪個目錄中的文件一定要定位到該目錄,或者是設置為當前工作目錄。
4.????不能用UNIX或window命令來生成work子目錄,因為里面沒有_info文件,只能用菜單或vlib命令。
5.????斷點只能設置在可執行的行上,這些行以綠色行號指示
6.???? 在Basic?Verilog?Simulation一課里面,編譯兩個文件的次序是不重要的(不同于被編譯器指示生成的源碼的從屬性)。Verilog -Xl的用戶可能再次感到奇怪,他們了解設計單元之間的接口檢測或是編譯器指示的繼承關系上可能存在的問題。ModelSim推遲了這樣的檢測,直到設計 被導入。所以在這里,如果你選擇在tcounter.v之前或之后編譯counter.v不存在任何問題。
7.????一組Verilog文件可以以任意次序編譯,但是在一個混合VHDL/Verilog設計中,Verilog文件必須在VHDL文件值前編譯。
8.????force命令可以驅動clk,相當于給仿真初始化。
總結
以上是生活随笔為你收集整理的ModelSim SE简明操作指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 别样的风景——韦应物《滁州西涧》赏析
- 下一篇: 计算机x线平扫对人健康有影响吗,X线检查