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仿真时让状态机波形显示状态的名字
   

 

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