1,为什么使用Modelsim仿真
FPGA调试过程中仿真是不可避免的一个环节,毕竟FPGA属于硬件,其编译速度远远慢于MCU的编译速度,如果像开发MCU那样调试简单代码还可以,复杂代码极为消耗时间,且大部分时间都消耗在等待编译完成的无效等待中。(笔者就是从事MCU相关工作,习惯编译之后先在硬件平台观察现象,然后硬件调试)。而使用Modelsim仿真之后查看波形,可以更深入的了解代码中出现的问题,同时只需要仿真出波形,不需要综合出实际的电路,所以编译速度极快。
2,为什么使用TCL语言仿真Modelsim
Modelsim GUI操作界面极为繁琐而且每次关闭工程之后都需要重复以上步骤重新建立工程(笔者尝试过使用Open project功能,但是失败了,还是需要重新建立工程,不知道是否是操作有误)。而使用TCL语言仿真可以避免这些繁琐的无意义的劳动,简化开发过程。
3,TCL语言基本语法
TCL语言是命令行时代的产物,基本语法遵循当时语法结构即
命令 参数,或者命令 参数1 参数2.
{}与“”的区别{},“”中间都是字符串,但两者不同{}中的内容不会发生转换即“转义\n换行”≠{转义\n换行},{}中唯一的例外是\表示当前语句没有结束,其他语句不会产生转义。
puts"\\n"表示显示字符\n,TCL只会做一次替换。
方括号为命令替换例如puts [expr "443 + 556"]方括号会替换为expr"..."的结果(方括号有点类似C语言中的小括号,以嵌套最中心的方括号开始执行,然后再执行外围方括号)。
在TCL语言中#为注释符号,因为TCL解释器总是认为一条命令应该以换行或者分号结束,其他的在同一行的都是参数,所以
set a 10 # 为错误注释
set a 10 ; #为正确注释
# set a 10 为正确注释,且整行都被注释掉了
4,学习模式
因为笔者学习TCL语言的目的仅仅是为了仿真Modelsim,从学学起,或者完全掌握TCL语言消耗时间过长,而且笔者的学习习惯更倾向于先使用,然后在使用的过程中查缺补漏,以实用为最终目的,所以学习模式为了解基本语法概念,然后根据网上现有的TCL语言仿真Modelsim脚本一边学习FPGA,一边根据自己的需求修改TCL脚本来仿真FPGA。