注意,不建议使用Modelsim进行代码编辑!易乱码。
软件界面:
下图是基本界面,左边是库和工程;右边是Transcript用于显示信息及输入命令。其他界面在使用到相应功能时会自动出现,如Memory List、Wave等,当然也可以从菜单栏的View中主动点出。
通过Transcript可以学习如何写do脚本命令!
仿真使用:
仿真使用分成大体上分成使用do脚本和使用gui界面(鼠标点击)两种,但是实际上熟练之后就无所谓了,完全可以混合,怎么方便怎么来。
do脚本的语法和tcl相似,而tcl是较常用的脚本拓展名,因此可以参考tcl脚本,甚至可以直接将后缀改为tcl,更加方便。
二、使用脚本进行仿真
1.常用脚本命令
勤用vmap,大大加快仿真速度
次序 | 作用 | 命令 | 示例 | 必要性 |
---|---|---|---|---|
1 | 建立库(工程) | vlib | if ![file exists work] {vlib work} | 必要 |
2 | 映射库 | vmap | vmap cctt_lib path/cctt_lib | 非必要,常用 |
3 | 编译 | vlog | vlog testbench.v | 必要 |
4 | 仿真 | vsim | vsim -t 1ns -novopt -L altera_lib work.testbench | 必要 |
4+ | 添加待绘信号 | add wave | add wave /testbench/* | 非必要 |
4+ | 执行其他脚本 | do | do wave.do | 非必要 |
最后 | 运行 | run | run 200us | 非必要 |
2.完整示例脚本文件
所有的脚本命令及其格式,都可以通过在GUI中执行相应的操作来寻找。
# 使用“#”标识注释,注释只能为行注释!!!
# 清屏
.main clear
# 工程
# modelsim的Library窗口中如果不存在work库,则新建一个work库
# 如果手动建立库其实就不需要执行vlib了
if [file exists work] {
vdel -all
}
# 建立库
vlib work
# 将其他不用修改的.v文件先行编译所得的library映射到Modelsim软件Library目录中
# 对于有多个.v文件的ip核例化,用此方法可以大大加快modelsim运行时间
# 与添加到modelsim.ini对比,需要用时才添加,
vmap cctt_lib ip/cctt_lib
# 设置基础路径;
# set的作用类似于define,只是别名,属于简单地等价作用;
# 通过set设置目录的别名,可以简化后续vlog命令中路径的书写,而且方便统一更改;
# 注意此处的路径中为“/”,而在windows的文件资源管理器中则为“\”;
# 引用set所定义的常量时使用“$”符号
set PrjPath D:/modelsimtest
set path1 .. # 对于路径,两个点".."代表上层目录(一层)
set path2 ../.. # 理同上,代表上上层目录(两层)
set path3 "d:/A B/目录" # 对于中文目录和目录中含有空格的路径,必须使用双引号
# 编译
# 注意编译时,越深层的模块需要写在越前,如ip例化文件等;
# 而越靠近顶层的文件则需要写在越后;
# 否则,会因为被例化模块不存在而报错
vlog $PrjPath/ip/fifo/abcd.v
vlog $path1/ip/ram/abcd.v
vlog $path1/port/abcd.v
vlog $path1/port/abcd.v
vlog $path2/src/port/abcd.v
vlog $path2/src/abcd.v
vlog $path2/abcd.v
vlog $path2/src/port/abcd.v
# 编译path3目录下的所有.v文件
vlog $path3/*.v
# 编译与本do脚本同目录的所有.v文件
vlog *.v
# 启动仿真
# -t 1ns:设置最小时间单位为纳秒
# -novopt:无优化
# -L:添加xilinx_lib和altera_lib两个ip库
# 如果工程中例化了ip核,则此处必须添加所例化的ip核所在的库
# 一种比较简单的方法是直接将altera或xilinx中的所有ip例化到一个库中
# work.仿真的模块名
# pcie_lib是上文用vmap映射过来的临时库
vsim -t 1ns -novopt -L xilinx_lib -L altera_lib -L cctt_lib work.testbench
# 添加波形
# 注意,在使用do wave.do时,如果模块中的信号发生了变化(如减少)则可能会报错;
# 如果模块中的信号添加了,则不会绘制新出现的信号;
do wave.do # 执行先前保存的wave.do文件
add wave /testbench/gen_case/* # 添加gen_case模块中的所有reg和net信号
# 设置默认格式
radix -hex
# 最大运行时间
# run all
run 500us
3.使用bat脚本快速打开modelsim执行tcl\do脚本
- 在同目录下新建txt文件,内容:
::打开Modelsim并执行do sim.tcl
vsim -do sim.tcl
- 保存然后更改后缀名为.bat
- 双击bat即可自动打开modelsim并执行
do sim.tcl
- 相当于:自己手动打开modelsim,然后在Transcript中执行:
cd d:/xxx(你的工程目录) #更改路径
do sim.tcl
4.一点心得
其实可以直接建立一个空的modelsim工程,然后双击打开工程,然后在Transcript中执行do sim.tcl
,好处是在modelsim中的project窗口中能够看到各个模块,在对.v
文件进行小改时,不需要重新执行整个sim.tcl,直接重新compile,然后重新run。特别是在工程比较大的时候,能省很多时间,而且Modelsim软件也不会“剧烈变化”。