1. 程式人生 > >modelsim模擬中 do檔案的寫法技巧

modelsim模擬中 do檔案的寫法技巧

Modelsim之 DO檔案簡介

         網上的關於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檔案寫法技巧

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

QTPRO檔案寫法的詳細介紹 Pro檔案變數詳細說明

學習Qt時,發現有些知識看了不經常用就忘了,以下是書本上寫的一些關於qmake的相關知識,自己看後,打算把一些經常用到的記下來,整理整理。   Qt程式一般使用Qt提供的qmake工具來編譯。 qmake工具可以使用與平臺無關的.pro檔案生成與平臺相關的makefile。該工具包含了呼叫Qt

QTPRO檔案寫法的詳細介紹,很有用,很重要!

在QT中,有一個工具qmake可以生成一個makefile檔案,它是由.pro檔案生成而來的,.pro檔案的寫法如下: 1. 註釋 從“#”開始,到這一行結束。 2.模板變數告訴qmake為這個應用程式生成哪種makefile。下面是可供使用的選擇: TEMPLATE = app

java下載檔案寫法之一

沒什麼想說的。。。。。。。。@RequestMapping(value="download",method = RequestMethod.GET) public void downloadFileAction(HttpServletRequest request,Http

搭建Modelsim SE模擬環境-使用do檔案模擬

本章我們介紹模擬環境搭建是基於Modelsim SE的。Modelsim有很多版本,比如說Modelsim-Altera,但是筆者還是建議大家使用Modelsim-SE,Modelsim-Altera實際是針對Altera 的OEM版本,它事先將Altera的一些IP核模擬

quartusii 使用ModelSim do檔案實現模擬(Verilog)

QuartusII從9.1之後的版本都已經取消了內部自帶的模擬器,都需要藉助第三方模擬軟體比如Modelsim才能實現模擬。一般在進行程式碼編寫的時候,如果結合功能模擬,可以很快的驗證程式碼實現的邏輯是否滿足要求。所以熟練使用Modelsim也是邏輯工程師必須掌握的一個技能。由於Modelsim可以支援命令

Modelsim模擬tcl指令碼與wave.do檔案

onerror {resume} quietly WaveActivateNextPane {} 0 add wave -noupdate -format Logic -radix binary /testbench/clk_200 add wave -noupdate -format Logic -ra

Modelsim 模擬時,在do檔案新增編譯某個檔案的語句

    -y ../ecp3 +libext+.v\               //這句用於編譯ecp3資料夾中的.v檔案,如果模擬時找不到該資料夾,路徑新增詳細。 +incdir+ ../models/mem  \               //開啟某資料夾。 修

利用do檔案方式進行modelsim模擬

舉例的工程是一個加法器,待測試功能模組是add.v,測試激勵是tb_add.v,do檔案是tb.do下面直接附上主要步驟:(1)首先新建資料夾,如sim_add,在該資料夾下再新建3個資料夾,分別是:sim、tb、srcsim:modelsim的工程檔案存放,如tb.dotb:測試激勵檔案存放,如tb_add

MyBatisxml檔案模糊查詢的寫法

資料庫中某表的一個欄位為name,我需要對它進行模糊查詢的時候使用了下面的方法,解決了這個問題。 <select id="findList" resultType="DwfxGzysxl"> SELECT <include refid="d

mybatis 一對多,多對多等關係xml檔案sql的寫法以及快取、延遲載入的配置寫法

高階功能https://blog.csdn.net/dfsaggsd/article/details/50555583 對映關係 一對一對映 SQL語句:使用者訂單查詢 SELECT  orders.*,   USER.username,  

githubREADME.md檔案寫法解析

本文解決了往github的readme檔案中換行、插圖、加url連結的問題,寫的相當詳細。 自從開始玩GitHub以來,就越來越感覺它有愛。最近對它的README.md檔案頗為感興趣。便寫下這貼,幫助更多的還不會編寫README檔案的同學們。 README檔案字尾名為md。md是markdown的縮寫

modelsimdo檔案

首先我們要對一個設計進行模擬呢,我們一般需要進行以下幾個步驟: ①建立一個工程和工程庫; ②載入設計檔案(包括你編寫好的testbench); ③編譯原始檔; ④執行模擬,並檢視結果; ⑤最後進行工程除錯。         而do檔案,就是把上述的步驟①---④

PHP檔案載入和常量的語法以及指令式寫法

指令式寫法::# 指令式語法就是將開始 ‘’{‘’換成 “:” 將結束 “}”換成 “end + if,,,for,,foreach.....”<?php header('content-type:text/html;charset=utf-8'); /

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

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

ie下載檔案的檔名為“download.do”的解決辦法

   最近在一個專案的維護中,發現ie中下載檔案的時候,下載框中的檔名為“download.do”。檔案型別識別不了。儲存後改了檔案字尾是能夠看到內容的。說明下載流資料那邊是沒有問題的。    但是查看了程式碼後,發現和其他畫面的下載寫法是一樣的。唯一的區別一個是直接用的se

ModelsimDO檔案簡介

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

Java面試題---用IO流模擬剪下檔案功能(把一檔案所有的檔案剪下到指定目錄

Java面試題---用IO流模擬剪下檔案功能 import java.io.File; import java.io.FileInputStream; import java.io.FileOutpu

ns2:無線網路模擬與有線模擬結果(.tr檔案)每個資料的含義

1. 無線模擬資料:s 0.502978909 _0_ AGT --- 6 cbr 1000 [0 0 0 0] ------- [0:0 1:0 32 0] [6] 0 0 r 0.502978909 _0_ RTR --- 6 cbr 1000 [0 0 0 0]

mybatissql寫法技巧小總結

最近有個兄弟在搞mybatis,問我怎麼寫sql ,說簡單一點mybatis就是寫原生sql,官方都說了 mybatis 的動態sql語句是基於OGNL表示式的。可以方便的在 sql 語句中實現某些邏輯. 總體說來mybatis 動態SQL 語句主要有以下幾類:1. if