1. 程式人生 > >Modelsim中.do指令碼語言基本介紹

Modelsim中.do指令碼語言基本介紹

轉載自:http://www.cnblogs.com/LJWJL/archive/2013/01/14/simulation.html

網上的關於DO檔案的編寫好像資料不多,比較雜,所以本人總結一下常用的簡單語法,方便大家檢視。其實本人也剛接觸DO檔案沒多久,有紕漏很正常,歡迎指正批評,互相學習。PS:寫得有點亂

  還有一個值得注意的是 我在看到這篇文章的時候我正在模擬一個verilog檔案,檔案中呼叫了一個ROM , 但是我怎麼模擬 rom的輸出檔案都有問題, 經過一個QQ好友的指點,我發現竟然是我 QUARTUS 下考過來的庫檔案 有問題, 自此提醒遇到過此問題 但還沒有解決的同學。。

一.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.do指令碼語言基本介紹

轉載自:http://www.cnblogs.com/LJWJL/archive/2013/01/14/simulation.html 網上的關於DO檔案的編寫好像資料不多,比較雜,所以本人總結一下常用的簡單語法,方便大家檢視。其實本人也剛接觸DO檔案沒多久,有紕漏很正

go語言基本介紹

imp Python一 格式 解壓 單行 clas sum ret 輕量 Golang發展歷史 1. 誕生歷史a. 誕生與2006年1月2號下午15點4分5秒b. 2009發布並正式開源c. 2012年第一個正式版本Go 1.0發布d. 截至到2017年8月24號Go 1.

Shell 指令碼語言基本知識

Shell的帖子 精http://www.w2bc.com/article/223184 1. 在shell指令碼的開頭往往有一句話來定義使用哪種sh直譯器來解釋指令碼。目前研發送測的shell指

iOS執行緒的基本介紹(OC)

一:pthread:基於C 二:NSThread:基於OC 三:GCD:基於C 四:NSOperation:對GCD面向物件的包裝 (一):GCD基本操作:六種任務執行模式 - (void)touchesBegan:(NSSet<UI

Android N 設置語言列表介紹

列表 1-1 用戶 圖1 .cn 出現 oid 點擊 and Android N上語言列表與N之前有很大變化,進入語言列表,可看到如圖1所示,圖中上面的框框是系統用戶所選擇的語言(Android N上用戶可以選擇好幾種語言,排在第一個是系統的語言), 下面的框框是一個添加語

C語言在linux內核do while(0)妙用之法

pos turn jsb world div fprintf cpp efault code 為什麽說do while(0) 妙?由於它的確就是妙,並且在linux內核中實現是相當的妙,我們來看看內核中的相關代碼: #define db_error(fmt, ..

Modelsim使用TCL腳本編寫do文件實現自動化仿真

簡單 ilo warning truct 語言 .com tps fpga 仿真 通常我們使用Modelsim進行仿真,是通過圖形界面點點點來進行操作,殊不知Modelsim完美支持TCL腳本語言及批處理命令do文件。簡單來說就是從你修改完代碼後到你重新編

指令碼語言基本語法

第一個 Lua 程式 互動式程式設計 Lua 提供了互動式程式設計模式。我們可以在命令列中輸入程式並立即檢視效果。 Lua 互動式程式設計模式可以通過命令 lua -i 或 lua 來啟用: $ lua -i $ Lua 5.3.0 Copyright (C) 1994-2015

Linux 下 expect 指令碼語言互動處理常用命令

Linux 下 expect 指令碼語言中互動處理常用命令 Linux 下 expect 指令碼語言中互動處理常用命令 1. #!/usr/bin/expect 告訴作業系統腳本里的程式碼使用那一個 shell 來執行。這裡的 expect 其實和 Linux 下的 bash、win

Vivado HLS的TCL命令介面(指令碼語言)(高階綜合)(FPGA)

前言:這個例項源於賽靈思的官方HLS手冊——(UG871),展示瞭如何基於已存在的Vivado HLS工程來建立一個TCL指令碼命令和如何應用TCL介面(已存在的工程為"lab1",使用TCL新建立的工程為“lab2”),軟體版本2013.4和2017.4均親測有效。 一、步驟1:

SQLvarchar和nvarchar的基本介紹及其區別

SQL中varchar和nvarchar的基本介紹及其區別   varchar(n) 長度為 n 個位元組的可變長度且非 Unicode 的字元資料。n 必須是一個介於 1 和 8,000 之間的數值。儲存大小為輸入資料的位元組的實際長度,而不是 n 個位元組。 nvarchar(n)

Java語言的類的基本結構

1. 什麼是類? 類是Java程式的基本組成單位,定義了物件的屬性和方法。是具有相同屬性和行為物件的集合。 2. 物件的實質:屬性+行為。 **3. 類的基本結構:**屬性,方法,構造方法,內部類,塊。==屬性是對資料的描述,方法是對物件的行為。構造方法用於例項化物件[^1]。 4. 方法過

Java原生解析JavaScript指令碼語言

前言 由於一些需求,現在需要在Java中解析字串,做一些簡單的算數運算和邏輯運算,那麼最先想的是模板引擎這個東西,但是Java中的模板引擎是針對View層的,也就是JSP的,在Service層中使用不是太方便,因此選用了原生的JavaScript指令碼解析引擎。實際上Jav

JavaWeb-jsp書寫java語言三種指令碼元素的區別

<%! %> 在這指令碼中書寫java程式碼被生成java檔案的成員位置上。 可以寫屬性,方法,類 作用:是用來進行宣告的。 <% %&g

深度學習基於tensorflow_slim進行復雜模型訓練一之tensorflow_slim基本介紹

最近在進行微表情識別,但是目前沒有查到比較有效的模型方式,考慮使用inception_v3的模型進行開發,但是該模的構造過程比較複雜,訓練更是麻煩,因此考慮基於tensorflow_slim的模組進行二次訓練,首先介紹一下關於tensorflow_slim的基本模組。 tensorflow_

如何理解Linux Shell和基本Shell指令碼語言

 理解Linux Shell: shell:一個命令列直譯器,通過執行命令或指令碼,幫助使用者與作業系統打交道。 process:程序,使用者執行的任務是程序,但程序不只是任務。 file:檔案放在硬碟上,包含使用者所有的資料。 x-windows(又稱windows):Linux的一種模式,使螢幕

ROSlaunch file基本介紹

一 launch file 介紹 在執行ros程式時我們往往需要在不同終端啟動多個不同的節點,這會讓人有些沮喪。幸運的是,ROS 提供了一個同時啟動節點管理器(master)和多個節點的途徑,即使用啟動檔案(launch file)。事實上,在 ROS 功能包

Java的基礎----StringBuffer的介紹基本操作

Java提供StringBuffer類實現對字串內容進行的動態修改。 StringBuffer類提供3種構造方法: 1)StringBuffer() 2)StringBuffer(int length) 3)StringBuffer(String s) 基本操作1:新增操作

modelsim模擬 do檔案的寫法技巧

Modelsim之 DO檔案簡介          網上的關於DO檔案的編寫好像資料不多,比較雜,所以本人總結一下常用的簡單語法,方便大家檢視。其實本人也剛接觸DO檔案沒多久,有紕漏很正常,歡迎指正批評,互相學習。PS:寫得有點亂   還有一個值得注意的是 我在看到這篇文章的時候我正在模擬一個verilog

JavaScript指令碼語言介紹並實現第一個Hello World程式

1.JavaScript是Web頁面中的一種指令碼程式語言,也是一種通用的、跨平臺的、基於物件和事件驅動並具有安全性的指令碼語言,具有與Java類似的語法。它不需要進行編譯,而是直接嵌入在HTML頁面中,把靜態頁面轉變成支援使用者互動並響應相應事件的動態頁面,JavaS