modelsim do文件簡介

目錄

前言

Modelsim指令介紹

步驟一:創建run_wave.do

步驟二:打開Modelsim

步驟三:do  run_wave.do

步驟4:run_sim.bat

補充介紹

參考


 

前言

本文對.do文件進行整理介紹,並在後文引用  “  bitrocco   的一篇博文做補充介紹。

經驗之言:

事例:

SIM文件夾下:test_model.v是RTL代碼(需要被仿真的文件),test_model_2019.v是備份的歷史代碼(不是想仿真的文件)。由於編譯指令是編譯SIM文件夾下的所有.v文件,從而若test_model_2019.v存在邏輯錯誤、而test_model.v中沒有,則會導致一種現象,modelsim的波形與test_model.v邏輯描述不一樣。該問題可能是由於test_model_2019.v文件影響導致,因爲兩個文件的模塊名一致,從而導致modelsim編譯文件的時候,使用了錯誤的文件。

 

 

 

 

Modelsim指令介紹

指令 功能
vlib    work 建庫:在當前工作目錄下建立一個 work 工作庫
vmap  work work 映射:將目前的邏輯工作庫work和實際工作庫work映射對應
vlog    "./*.v" 編譯:編譯當前路徑文件夾裏的所有後綴爲.v的文件
vlog    ../IP/*.V 編譯:編譯上一級路徑裏IP文件夾下的所有後綴爲.v的文件
vlog    -work  work  ./../design/*.v 編譯:"- work" 參數用來具體指定將 verilog 源代碼編譯到哪個庫中,缺省編譯到 work 庫。
vcom 編譯:編譯 vhdl 源代碼
vsim    tb_top 啓動仿真器 :(tb_top測試文件頂層)

vsim   -常用參數

-novopt :仿真優化選項

-t         : 指定仿真的時間分辨率(缺省爲 ns)

-c         :讓 vism 工作在命令行模式

-l          :輸出 log 文件

-L         :指定工作邏輯庫

-wav      :創建波形文件

-do        :開始仿真後運行 tcl 腳本

work.**  :指定仿真的 top module,“ ** ”需要指定tb頂層的文件名非模塊名

run  1us 運行仿真:
run  常用參數

  *<時間單位 >  ; 指定運行時間 (run  1us)

@<數量>         ; 運行仿真到 "數量 "個單位時間

-all                  ; 指定一直運行仿真

-continue         ; 繼續已停止的仿真

add wave 添加信號到波形文件
add wave  常用參數

-format : 顯示格式(logic等)

-color   : 波形的顏色

-divider : 添加一個分割線,通常按功能模塊分割

-radix   : 數值顯示形式(binary, ascii , decimal, octal, hex)

-group  : 信號分組顯示

 

quit    -sim

退出當前仿真

.main  clear

清輸出窗口
view   wave 打開波形窗口
view   structure                    打開structure窗口   
view   signals                      打開信號窗口

modelsim波形常用顏色:

波形顏色 名稱
淺藍 cyan
blue
yellow
pink
green

modelsim觀察常用進制:

進制 radix
二進制 binary
八進制 octal
十進制 decimal
十六進制 hexadecimal
有符號數  
無符號數 unsigned
阿斯科碼 ascii

工程文件夾說明

rtl   存放RTL代碼
  00_xilinx_ip 存放Xilinx IP
  01_use_ip 存放user IP
sim   存放SIM文件,存放rum_sim.bat文件。將modelsim工作路徑調整到該文件夾。
  log 存放log文件
  cov 存放cov文件,仿真覆蓋率文件
  sim_model 存放仿真模型文件
 

tb_pattern

存放仿真頂層文件tb_top
  wave 存放wlf波形文件
  wave_do 存放run_wave.do文件
  work  

 

步驟一:創建run_wave.do

在ISE與modelsim關聯好之後,modelsim裏就會有“ xilinxcorelib, simprim,unimacro, unisim  ” 這四個仿真庫,-L 即是指定這四個邏輯庫的過程。

步驟3,work.testbench_top, “testbench_top”是tb的模塊名,而非.v文件的文件名,注意兩者名稱存在不同。

步驟5,添加模塊信號,都是模塊名而非.v文件的文件名。兩者名稱可能存在不同。

下面是一種示例的 run_wave.do 文件的示例:

#================================================================
# Clear
#================================================================

# 退出當前仿真
quit  -sim
 
# 清輸出窗口
.main clear


#================================================================
# Create work library
#================================================================
# It will create a "work" folder in current folder

# 創建本地庫
vlib work

# 將邏輯庫名映射庫路徑
vmap work work


#================================================================
# Compile IPcore
#================================================================
# Add File path and Compile them

vlog    ../../xilinx_ip/*.V
vlog    ./*.V


#================================================================
# Compile RTL
#================================================================

# 編譯當前目錄下的所有v文件
vlog    ./*.v

# 編譯上一級目錄下的所有v文件
vlog    ../*.V


#================================================================
# Start the emulator(啓動仿真器)
#================================================================

#方式一:
vsim -L xilinxcorelib -L simprim -L unimacro -L unisim -voptargs=+acc work.tb_top

#方式二:
vsim -novopt -t 1ps  -c  -L simprim -L unimacro -L unisim  -l ./log/report.log  -wav ./wave/tb.wlf   -voptargs=+acc work.tb_top

#方式三:添加quartus仿真庫
#vsim -novopt -t 1ps  -c  -L altera_lnsim_ver -L altera_mf_ver -L altera_ver -L cycloneii_ver -L lpm_ver -L sgate_ver -l ./log/report.log  -wav ./wave/tb.wlf   -voptargs=+acc work.TB


#================================================================
# Set the window types
#================================================================

view wave
view structure
view signals


#================================================================
# Add watch wave 
# color : green   cyan      yellow       pink   violet   orchid  gray40 
# radix : binary  unsigned  hexadecimal  
# 建議:常量/寄存器的值波形使用gray40;數據總線cyan;FSM pink;控制信號yellow/pink;其他信號green
#================================================================

add wave -noupdate -divider (TB_TOP)
add wave -noupdate -color green     -format Logic -radix unsigned -group {TB_TOP}         /TB_TOP/*


#================================================================
# run
#================================================================
.main clear

run 10us

 

run_wave.do 文件裏,參考下面代碼,modelsim仿真時讓狀態機波形顯示狀態的名字

 #1、使用ModelSim的 virtual type 命令定義一個新的枚舉類型(FSM_TYPE)。注意:狀態變量之間需要一個空格
 virtual type { {0x00 IDLE} {0x01 S0} {0x02 S1} } FSM_TYPE
 
 #2、將需要顯示的信號(/simple_fsm_tb/u_simple_fsm/curr_state,注意信號在wave窗口中的完整名字)進行類型轉換,轉換成一個新的信號(state1)
 virtual function {(FSM_TYPE)/simple_fsm_tb/u_simple_fsm/curr_state} state1

 
#3、將新的信號加入到wave窗口中
 add wave -color pink /simple_fsm_tb/u_simple_fsm/state1

#4、添加原波形
 add wave -color pink /simple_fsm_tb/u_simple_fsm/curr_state

 

 

 

步驟二:打開Modelsim

寫好上面 run_wave.do 文件後,打開modelsim軟件,將工作路徑指定到 run_wave.do  所在的文件路徑。

file--change directory

步驟三:do  run_wave.do

常用指令 功能
do   run_wave.do 運行當前路徑下的run_wave.do文件
do  XX/run_wave.do 運行當前路徑下XX文件夾下的run_wave.do文件
do  ../XX/run_wave.do 運行上一級文件路徑下XX文件夾下的run_wave.do文件

在下面指令窗口中,輸入"do XX/run_wave.do",do即執行,中間有一個空格,XX/run_wave.do即當前路徑下XX文件夾裏run_wave.do文件。即執行該路徑下XX文件夾裏run_wave.do文件。

在輸入“do XX/run_wave.do”指令時,可以採用“Tab鍵”補全功能!

 

步驟4:run_sim.bat

可以寫一個.bat文件,內容有兩行 cd ##此處填寫路徑## vsim -do file.do 這樣保存後雙擊這個.bat文件就可以啓動運行ModelSim了。

創建文件run_sim.bat文件,輸入下面兩行代碼。

第一行:指定run_wave.do所在的決對路徑,即在文件夾wave_do裏面;

第二行:打開modelsim軟件,運行run_wave.do文件。

cd  C:/Users/sim/wave_do
vsim -do run_wave.do

 如果要運行wave_do文件夾下子文件夾裏的程序,可參考:

cd C:/Users/sim/wave_do
vsim -do do/compile.do -do do/tb.do

 上述指令第二行執行動作是

  • 打開modelsimSE軟件,
  • 執行該文件夾下子文件do文件夾裏的compile.do文件;
  • 順序執行該文件夾下子文件do文件夾裏的tb.do文件

 

如果遇到點擊bat,ModelSimSE打不開的情況,首先檢查環境變量MGLS_LICENSE_FILE設置的路徑對不對;

其次檢查環境變量裏PATH路徑下是否含有ModelSimSE.exe的安裝路徑,或該路徑是否存在。不存在添加上即可。

注:

如果運行bat出現錯誤,刪掉第一行,保留第二行。再次運行bat。

如果,再次執行步驟4出問題的話,可忽略步驟4。採用步驟3啓動modelsim進行仿真即可。

 

 

補充介紹

 

下文轉載自博文: https://www.cnblogs.com/bitrocco/p/9576505.html

 

# 退出當前仿真
quit  -sim

# 清輸出窗口
.main clear

# 創建本地庫
# You must use vlib rather than operating system commands to creat a library directory or index file.
vlib  ./work
vlib  ./altera_lib

# 將邏輯庫名映射庫路徑
vmap  work        ./work
vmap  alt_lib     ./altera_lib

# 編譯 verilog 源代碼
# 其中的 "- work" 參數用來具體指定將 verilog 源代碼編譯到哪個庫中,缺省編譯到 work 庫
vlog  -work  alt_lib     ./altera_mf.v
vlog  -work  alt_lib     ./../quartus_prj/ipcore_dir/pll_1.v
vlog  -work  work        ./../design/*.v
vlog  -work  work        ./tb_ipcore_pll.v

# 啓動仿真器
vsim  -voptargs=+acc  -L alt_lib  -L work  work.tb_ipcore_pll

# 添加波形
add   wave   tb_ipcore_pll/*

# 執行仿真
run   1us
# ========================================================================
vsim    -t ns -voptargs=+acc  -L design -L base_space base_space.*.v
#       -t    運行仿真的精度是 ns
#       -L    鏈接庫關鍵字
# ========================================================================

# ========================================================================
# ---- 虛擬信號 ----
virtual type {
{01 IDLE}
{02 A}
{04 B}
{08 C}
{16 D}
{32 E}
} vir_new_signal

virtual function {
(vir_new_signal)tb_seq_det/seq_det_inst/state
} new_state

add  wave  tb_seq_det/seq_det_inst/new_state
# ========================================================================

quit   -sim
.main  clear

vlib   ./lib/
vlib   ./lib/work/
vmap   work ./lib/work/

vlog   -work  work  ./tb_shift_reg.v
vlog   -work  work  ./../design/shift_reg.v

vsim   -voptargs=+acc  work.tb_shift_reg

add    wave  tb_shift_reg/clk
add    wave  tb_shift_reg/rst_n
add    wave  tb_shift_reg/mem1x16
add    wave  tb_shift_reg/i_30
add    wave  tb_shift_reg/i_data
add    wave  tb_shift_reg/shift_reg_inst/shift_reg
add    wave  tb_shift_reg/shift_reg_inst/s_cnt
add    wave  tb_shift_reg/shift_reg_inst/s_flag
add    wave  tb_shift_reg/shift_reg_inst/s_flag_delay
add    wave  tb_shift_reg/shift_reg_inst/o_data
add    wave  tb_shift_reg/o_data

run    10us

# ========================================================================
# ---- 後仿真 ----
quit   -sim
.main  clear

vlib   ./lib/
vlib   ./lib/work/
vlib   ./lib/altera_lib/
vmap   work ./lib/work/
vmap   altera_lib ./lib/altera_lib/

vlog   -work  work          ./tb_seq_det.v
vlog   -work  work          ./../design/*.vo
vlog   -work  altera_lib    ./altera_lib/*.v

vsim   -t ns -sdfmax tb_seq_det/seq_det_inst=seq_det_v.sdo -voptargs=+acc -L altera_lib work.tb_seq_det

add     wave  tb_seq_det/*

run    10us
# ========================================================================

 

 

 

 

 

參考

1、作者 博文
  Modelsim自動化仿真之do文件書寫
  modelsim仿真時讓狀態機波形顯示狀態的名字
   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章