當前位置:首頁 » 編程軟體 » modelsim模擬腳本

modelsim模擬腳本

發布時間: 2022-03-13 17:08:56

⑴ 請教modelsim 腳本模擬 不優化的

$readmemb
可以直接讀取二進制文件

⑵ 用MODELSIM進行模擬時,如何調用和自己模塊相關的模擬庫

把你可能用到的器件庫用modelsim編譯好了,以後用到的時候就很方便了

⑶ 如何對多個文件進行MODELSIM模擬

可以將所有要編譯的所有文件的名字做一個list。
新建一個文本文檔,重命名為vflist

vflist內容例子如下(src為文件夾):
src/base_addr_chk.v
src/config_mux.v
src/glue.v
src/pargen.v
src/pci_top.v
src/retry_count.v
src/state_machine.v
tstbench/bkend_daemon.v
tstbench/pci_clk_reset.v
tstbench/pci_stim.v
tstbench/pci_tb.v

在modelsim中編譯的時候可使用如下命令 vlog -f vflist
或者將此命令寫在do文件里

如果只有幾個文件要編譯,也可以使用命令vlog a1.v b2.v c3.v

⑷ 如何使用bat文件和do文件生成不依賴路徑的modelsim模擬

一.DO文件的簡介和工作方式

DO文件是一次執行多條命令的腳本。這個腳本可以像帶有相關參數的一系列ModelSim命令一樣簡單,或者是帶有變數,執行條件等等的Tcl程序。可在GUI里或系統命令提示符後執行Do文件。
由於TCL腳本語言內容很多,本人是剛學不久,菜鳥一個。但是針對我們這門課程的話,有些基本常用的語法還是值得提一下的,方便大家一起學習交流,如果以下內容有什麼寫錯了,希望大家提出並批評,互相進步。
首先,我們如何建立DO文件呢?
方法挺多,一種是可以打開Modelsim,執行File/New/Source/Do命令,進入Do文件編輯方式,在編輯窗口輸入模擬批處理文件的代碼,以.do為擴展名保存文件。當然也可以在windows系統中新建一個記事本,在「另存為」的時候寫上.do的後綴名,也是一種方法。 調用方式是在Modelsim的Transcript窗口中使用指令:do filename.do,完成對設計的自動化模擬。

下面簡單講講模擬的步驟。首先我們要對一個設計進行模擬呢,我們一般需要進行以下幾個步驟:
①創建一個工程和工程庫;
②載入設計文件(包括你編寫好的testbench);
③編譯源文件;
④運行模擬,並查看結果;
⑤最後進行工程調試。
而do文件,就是把上述的步驟①---④用tcl腳本語言來編寫出來,讓Modelsim來運行該do文件宏命令,並自動執行模擬的步驟。這種好處也許在小設計中沒怎麼表現,但是如果在一個大的工程中,常常需要對一個設計單元進行反復的調試和模擬,但是模擬時的設置是不變的,這時如果使用了do文件,把模擬中使用到的命令都保存下來了,就可以節省大量的人力,提高了工作效率。

下面將對照一個簡單的例子counter.do,講一下我們常用的一些基本指令。
PS: do文件的注釋是由#開始的,但不可以在代碼行後面添加,只能另起一行。
正確的是:
vlib work
#新建一個work庫
錯誤的是:
vlib work #新建一個work庫

編寫名為counter.do的文件,其內容為下:
vlib work (對應模擬步驟①:新建work庫。該命令的作用是在當前目錄下建立一個work目錄,請注意不要直接在windows中新建一個work的文件夾,因為用操作系統建立的work文件夾並沒有ModelSim SE自動生成的_info文件。)
vmap work work(對應模擬步驟①:該命令的作用是將目前的邏輯工作庫work和實際工作庫work映射對應。也可以直接用指令「vmap work」表示將work庫映射到當前工作目錄下。)
vlog counter.v counter_tb.v (對應模擬步驟②③:編譯counter.v和counter_tb.v文件,默認編譯到work庫下。該命令的作用是編譯這些文件,要注意的是文件可以單獨分開編譯,但是一定要先編譯被調用的文件。假如是VHDL文件,只需要把指令vlog換成vcom即可。)
vsim work.counter_tb -t 1ns (對應模擬步驟④:模擬work庫中名為counter_tb的模塊,最小時間單位為1ns。)
add wave/counter_tb/ * (該命令的作用是將testbench文件camera_tb.v中模塊camera_tb下所有的信號變數加到波形文件中去,注意在「*」前要加空格。這時候你也可以看到wave文件被打開。當然也可以單個信號的添加,例如添加時鍾:add wave clk 等等。)
run 2000 (該命令的作用是運行2000個單位時間的模擬。也可以用run –all命令來一直模擬下去。)
這時候就可以在wave窗口文件中看到你的模擬結果。當然也可以觀察其它窗口的結果,用view *命令顯示 。view *命令可以觀察包括signals、wave、dataflow等窗口文件,也可以分別打開。例如用view signals來觀察信號變數。
以上就是do文件的一些基本TCL腳本語言的使用,寫得比較簡單,但是其實復雜的也就是在添加信號線那裡add wave 有比較多的參數設置而已,主要的指導模擬流程的指令還是這幾條。
編寫好DO文件之後,在Modelsim中,將工作目錄切換到counter.v、counter_tb.v和counter.do三個文件所在目錄下,然後在Transcript窗口中的命令行輸入 do counter.do即可。切換工作目錄的方法如下圖1,點擊Change Directory:

圖1

PS: 如果在模擬的時候要修改.do文件,需要現在modelsim里運行quit -sim,退出模擬,然後修改.do文件,再保存,然後再重新執行do filename.do指令即可。
小技巧Tips:
為了區分模擬波形窗口中的各種信號線,需要信號波形作設置,如不同信號線的顏色、顯示基數、顯示方式等要有區別,這時就需要在模擬波形窗口單獨對每一個信號線手動進行設置,這對於不斷修改源代碼然後再不斷地進行模擬來說,非常麻煩。
這里,我說一下有個簡單的自動生成這類個性化設置DO文件的方法。首先,我們需要先進行一次模擬,在波形窗口的時候先手動對需要的信號線進行一定的設置,如下圖2所示:

圖2

然後,點擊wave窗口左上角的save圖標,會出現一個保存DO文件的窗口,如圖3所示:

圖3
它的路徑Pathname表示Modelsim自動在當前的默認目錄下新建了一個wave.do的DO文件,我們可以自己修改保存的路徑和DO文件名。
接下來我們來看一下上面保存的wave.do文件,打開如下圖4所示:

圖4

由wave.do文件中,可以見到我們定義的那些不同顏色、不同顯示方式所用的TCL腳本語言,如add wave -color Yellow /freq_meter_tb/i1/freq_data表示讓該freq_data信號顯示黃色…如add wave -noupdate -radix decimal /freq_meter_tb/i1/div_coef 表示讓div_coef信號用十進制decimal來顯示…其他的信息可以對照自己的波形設置一一對應上,其他依次類推。
細心的同學會發現這個DO文件根本不完整,基本都是一些add wave,即是對每個信號的各種設置的TCL代碼而已。不錯,因為它缺少了我們之前所講的模擬步驟①②③④,那麼我們可以利用上面已學過的TCL語言來補完整它。
如在前面加上一下語句,使這個DO文件包括了模擬過程的完整指令,包括新建工作庫、編譯源文件、模擬testbench文件等:
vlib work
vmap work work
vlog freq_meter.v
vlog freq_meter_direct.v
vlog freq_meter_tb.v
新的DO文件如下所示:

圖5
至此,該DO文件才能用來實現較完整的自動化模擬。

二.互動式命令
通過在主窗口的命令窗口輸入命令來實現,具有更好的調試和交互功能,提供多種指令,既可以是單步指令,也可以構成批處理文件,用來控制編輯、編譯和模擬流程;
常見互動式命令如下:
1.force-repeat指令
指令格式:force 開始時間 開始電平值,結束電平值 忽略時間(即0電平保持時間) -repeat 周期
force clk 0 0,1 30 -repeat 100 表示強制clk從0時間單元開始,起始電平為0,結束電平為1,0電平保持時間為30個默認時間單元,周期為100個默認時間單元,占空比為70%。
指令功能:每隔一段的周期重復一定的force命令,用來產生時鍾信號,也可用來產生周期的輸入信號,如01010101,00110011等。
2.force指令
指令格式:force item_name value time,value time;item_name為埠信號或內部信號,支持通配符號,但只能匹配一個;value不能默認,time,可選項,支持時間單元;
force din 16#40900000 從當前時刻起給din賦值16進制40900000;
force bus 16#F @100ns 在100ns時刻給bus賦值16進制F;
force clr 1 100 經歷100個默認時間單元延遲後為clr賦值1;
force clr 1,0 100 表示clr賦值1後,經歷100個默認時間單元延遲後為clr賦值為0;
3.run指令
指令格式:run timesteps time_unit,timesteps時間步長,time_unit時間單元,可以是fs、ps、ns、us、ms、sec;
指令功能:運行(模擬)並指定時間及單元;
run 100, 表示運行100個默認時間單元;
run 2500ns, 表示運行2500ns;
run -all, 表示運行全過程;
run -continue, 表示繼續運行
4.force-cancel指令
指令格式:force-cancel period
指令功能:執行period周期時間後取消force命令;
force clk 0 0,1 30 -repeat 60-cancel 1000,表示強制clk從0時間單元開始,直到1000個時間單元結束;
5.view指令
指令格式:view 窗口名
指令功能:打開Modelsim的窗口
view souce,打開源代碼窗口;
view wave,打開波形窗口;
view list,打開列表窗口;
view varibles,打開變數窗口;
view signals,打開信號窗口;
view all,打開所有窗口;

⑸ 怎樣用modelsim做後模擬

建一個工程 file -> new -> project... 此時會彈出一個Creat Project對話框,輸入一個工程名,選擇保存路徑 (不要包含中文),其他默認就行了;
2.點OK後會彈出一個Add items to the Project,裡面有幾個可選項,應該很容易明白;
3.添加好文件後,點close把Add items to the Project對話框關閉,這時在左側的workspace的project窗口裡可以看到剛才添加的文件,雙擊可以打開這些文件進行編輯,編輯好後保存;
4.右擊剛才編輯好的文件compile -> compile select(或根據自己需要選其他項),如果沒有錯誤,則在底部的命令窗口可以看到編譯成功的消息(呈綠色),否則會出現出錯的消息(呈紅色),雙擊它會彈出一個更具體的窗口提示你出錯的地方.
5.修改所有錯誤直到編譯成功.這時可以在菜單欄選擇Simulation -> Start simulatio... 這時會彈出一個Start simulatio的對話框,在Design的標簽下你會看到有很多庫,展開work庫會看到剛才編譯成功的文件(如果有多個文件的話選擇一個你想模擬的,比如測試程序,這時底部的OK會由剛才的不可用變成可用的),然後把Opitimization選項下的Enable opitimization前復選取消(這樣可以保證過會兒所有的輸入輸出都可以看到,你可以試試不取消這項有何區別),然後點OK就行了.
6.選擇view -> Objects就可以看到你想模擬的各個量,選中它們並右擊Add to wave -> Selected signals,這時就會彈出一個波形模擬窗口.如果你的測試文件寫得沒問題的話就可以看到模擬波形,你也可以觀察底部的命令窗口察看相關信息.
7.如果沒寫測試文件的話,在波形模擬窗口右擊相關信號,選擇force...設置想模擬的值或clock...把該量設置為時鍾,然後點工具欄上的Run或Simulation菜單下的Run.

⑹ 在進行modelsim模擬時

不知道你說的直線什麼意思。
如果輸出是一個值不變,那是你設計的問題。
如果是可變的,只是沒有出來你想要的正弦。那是因為modesim是看數字波形的,需要自己設置一下,轉成模擬的顯示。

⑺ modelsim模擬代碼問題

這段代碼是我的一個教程上的,不會有錯的,可能是載入的時候出錯了,或者是你的版本和我教程中的版本不一致吧。或者你再檢查一下被測模塊。

⑻ modelsim編譯後模擬不通過

你編寫的程序里應該有個子程序吧?? mux??
你調用了mux這個子程序。。。但是工程里沒有這個文件。。。。

⑼ modelsim 模擬時,怎麼修改程序語句,不加入延遲信息(如圖所示)

模擬一般有3個步驟:
1.RTL前模擬,也就是常說的功能模擬,測試對象是你的RTL源代碼;
2.綜合後網表的功能模擬,就是綜合工具把代碼映射為網表之後對網表進行測試,要對網表進行功能測試,你的第一個處理是對了的,就是把$sdf_annotate這個函數注釋掉,第二步處理是在模擬時不要指定延時文件,modelsim的圖形界面是怎麼操作的我還真不大清楚,我都是跑腳本,舉個例子,我可以敲如下命令:vsim -L [對應具體FPGA器件的模擬庫] [testbench的名字];
3.時序模擬,這個好理解了,就是網表加上延時文件進行模擬,這個和第2種模擬在命令上的區別是:vsim -L [對應具體FPGA器件的模擬庫] [testbench的名字] /UUT=[所指定的延時文件],其中「/UUT=[所指定的延時文件]」意思就是將指定的延時文件應用到UUT(也就是你的待測試的模塊)這一層級,等同於於在圖形界面中指定延時文件這一操作。

熱點內容
win7ftp用戶名和密碼設置 發布:2025-01-22 17:46:48 瀏覽:220
三表聯查的sql語句 發布:2025-01-22 17:27:13 瀏覽:417
安卓怎麼解壓分卷壓縮 發布:2025-01-22 17:24:59 瀏覽:720
歐姆龍plc編程語言 發布:2025-01-22 17:21:48 瀏覽:395
和值編程 發布:2025-01-22 17:20:07 瀏覽:517
微信青少年模式獨立密碼是什麼 發布:2025-01-22 16:52:06 瀏覽:589
騰訊雲伺服器怎麼購買 發布:2025-01-22 16:45:01 瀏覽:630
天貓怎麼上傳視頻 發布:2025-01-22 16:40:02 瀏覽:727
安卓如何把抖音評論換成黑色 發布:2025-01-22 16:30:57 瀏覽:702
連接池Java 發布:2025-01-22 16:28:27 瀏覽:260