歡迎您光臨本站 登入註冊首頁

ModelSim SE操作指南

admin @ 2014-03-26 , reply:0

概述

第一章介 紹本指南是為ModelSim5.5f版本編寫的,該版本運行於UNIX和MicrosoftWindows95/98/Me/NT/2000的操作系統環境中。本指南覆蓋了VHDL和Ver……

第一章 介  紹

本指南是為 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欄,將會看到兩個編譯了的設計單元列了出來。看不到就要把Library的工作域設為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的範圍命令。現在,點擊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。可以看到Source 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頁面完成這些步驟。
   &#8226;取消選取Trigger On:Signals以禁止在信號上觸發
   &#8226;選取Trigger On:Strobe以開啟strobe
   &#8226;在Strobe Period域鍵入100
   &#8226;在First Strobe at域鍵入70
   &#8226;單擊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
&#8226;在名為“counter”的設計單元調用vsim模擬器
&#8226;通過-wlf這個可選項通知模擬器在名為saved.wlf的日誌文件中保存模擬結果
&#8226;運行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,相當於給模擬初始化。


[admin via 研發互助社區 ] ModelSim SE操作指南已經有10070次圍觀

http://cocdig.com/docs/show-post-43326.html