目录
为什么写这篇文章?
我刚开始学习FPGA的时候,跟着网上的教程,一步步学习编写程序然后仿真查看仿真波形时,每次仿真时都要打开Modelsim新建工程,然后添加文件、编译文件、仿真、把变量添加到窗口这几个步骤,每次修改代码后,又要重新编译,重复之前的步骤,太麻烦了,浪费了大量的时间,人生苦短,我要走捷径,后面才发现每次点击Modelsim对应按钮时,实际上内部也是运行的相关的命令行。
modelsim仿真
Modelsim里实际上就是运行的TCL指令集。modelsim中需要执行的执行的指令写到.do文件中,然后输入命令 do (.do文件的名字).do,modelsim会逐行执行.do文件的指令,省去大量时间,可以说是一劳永逸。
仿真的步骤:
(1)创建库文件
(2)编译文件
(3)运行仿真
(4)调试
.do文件的任务就是把前三个过程执行完,第四个步骤就是自己进行代码调试。
在使用 modelsim 仿真时,我们还可以将每一步的操作写入一个 modelsim 可以识别的脚本文件中,在我们使用 modelsim 进行仿真时,只需要执行该脚本 文件即可。
Modelsim 可识别的脚本文件包括 tcl 文件,我们可以在 sim 文件夹 中新建一个 tcl 文件例如 run.tcl (新建一个run.do文件也是一样的,里面都是TCL指令集)
使用实例方法
直接运行命令
cd F:/fpga_project/ex1_jiaoben_fsm/sim //替换为自己工程下run.tcl的目录位置
do run.tcl
实例:
#需要编译的.v路径
#从上到下依次是:仿真文件、设计文件、顶层仿真文件模块名、顶层仿真文件下实例化后设计模块名
set file_name1 ./tb_ex1_fsm.v
set file_name2 ./../design/*.v
set tp_module_name tb_ex1_fsm
set module_name fsm_inst
#退出仿真,清空命令行
quit -sim
.main clear
#在根目录下建立库文件
vlib work
#编译Verilog文件
vlog $file_name1
vlog $file_name2
#启动仿真器
#注意这里tb_ex1_fsm是顶层仿真文件模块
vsim -voptargs=+acc work.{$tp_module_name}
#下面两行为了给变量取别名,方便查看波形,可以不用
#不取别名的话,大家使用时建议删除掉,不然会报错
virtual type {
{3'b001 IDLE}
{3'b010 ONE}
{3'b100 TWO}
} abc;
#这里state是模块下的信号名
virtual function {(abc)/tb_ex1_fsm/fsm_inst/state} new_state
#加信号
#fsm_inst是设计模块名字
add wave /{$tp_module_name}/fsm_inst/*
#运行时间
run 1us
Sublime新建模板方法
(1)
(2)在<![CDATA[ 这里填上自己的代码 ]]></content>
<tabTrigger>hello</tabTrigger> 触发命令
<scope>source.python</scope> 哪种类型的文件中触发该命令
(3)保存位置
C:\Users\PC\AppData\Roaming\Sublime Text 3\Packages\my_module_code