目錄
前言
本文對.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仿真時讓狀態機波形顯示狀態的名字 | |