经过一周的学习,对Tcl已经有了大概的认识,虽然还不能很顺手地编写代码,但是已经基本能看懂大段的Tcl代码了。在第一节中,咱说过学习Tcl是为了更好地协助硬件开发,因此更深层次的东西咱也不学习了,学了如果不实践的话就会很快淡忘,这也是咱这几年学习的小经验:“实践就是最好的学习”。记得还在学校的时候,导师就会派各种活儿给咱,不管咱会不会,最开始咱主攻的可是FPGA,结果FPGA的活儿没有,单片机、ARM、DSP的小项目一大堆,这些也不大熟啊,只能硬着头皮学了,有压力了学习效率就提高了,几个项目下来从对单片机、DSP、ARM的初学到能轻松驾驭,慢慢地发现这些东西的基本概念都是互通的,只是开发平台不同而已。记得有一个单片机的小项目,真正开发的时间也就一星期,就这一星期学到的东西比在课堂中学到东西都多,咱可是学了一学期的单片机课,也不否认课堂上的知识给项目开发提供了基础,但是如果不实践,可能会像一艘迷失的船一直在海上漂浮,迷茫着,而实践好比沿岸的灯塔,只要向着这个灯塔,船就能成功上岸。 分享了一点小经验,下面进入正题,学了Tcl到是要看看它在硬件开发中有什么作用。先从QuartusII上下手,QuartusII对Tcl做了最大的支持,Tcl Scripting是QuartusII对Tcl的支持文档。第一节中介绍了在QuartusII中打开Tcl Console的方法,这几天学习发现,在QuartusII安装目录:c(或其它根目录下):\altera\11.0(或者其它版本)\quartus\bin\下有个tcl85.exe可执行文件,85表示Tcl开发环境是8.5版本,不同的QuartusII版本这个Tcl版本也有所不同,QuartusII 11.0中是Tcl 8.5,而QuartusII 8.1中是Tcl 8.4,版本不同支持的命令集也会不同,此处大家注意下。打开tcl85.exe后发现,这个是标准的Tcl开发环境,并不像Tcl Console支持Quartus命令集,有什么办法可以使这个标准环境调入Quartus命令集呢?带着这个疑问,咱仔细阅读了手册,发现有一个交互式模式(Interactive Mode),输入quartus_sh -s后就可以进入QuartusII Tcl Shell,如图1所示,当然打开QuartusII中的Tcl Console就直接进入QuartusII Tcl Shell了。 图1 在QuartusII Tcl Shell中可以直接调用QuartusII Tcl命令,这些命令分别集中在各个包(package)中,打开QuartusII Tcl Shell后不一定每个包都处于加载状态,输入help命令可以查看当前加载和未加载的包,如图2所示,图中加载的包有:device、misc和project。 图2 图2中列出的已加载和未加载的包还不是所有的包,完整的包应该还包括仿真、STA或其它作用相关包,其中所有包及各个包的作用如表1所示。可以通过load_package命令加载所需要的包。 表1
在QuartusII Tcl Shell琢磨了半天,试了很多命令,总结了一下,想到了两种利用Tcl协助FPGA开发的功能,由于咱所在部门的前辈都没用过Tcl,这协助方法只能自己想了,大家还有什么好功能就多多分享一下哈! (一)第一种功能:自动配置工程: 在FPGA开发中,可能针对同一个板子需要新建工程做不同测试,而每次新建工程时都需要选择器件,而调试之前需要分配管脚,一次不要紧,多次就烦了。而通过Tcl仅需敲几个命令或者点几下鼠标就搞定了。在project包中有几个命令,可以完成这些配置,如图3中的Tcl代码,利用set_global_assignment设置了family、device等关于器件和QuartusII软件的配置,利用set_location_assignment分配了管脚。更多的相关命令可以查看相关包的帮助信息。 图3 将这些代码保存成*.tcl文件,其中有两种方法通过Tcl导入配置: 1. 打开QuartusII软件,新建工程,无需选择器件,都按照默认配置来,将保存的*.tcl文件拷贝到新建工程目录下,然后在菜单Tools里打开Tcl Script,如图4所示,在Project下有个*.tcl文件,选定它,然后点击右侧的RUN就能执行这个*.tcl文件了,这鼠标一点就瞬间配置完成了。 图4 2. 打开QuartusII软件,新建工程,无需选择器件,都按照默认配置来,将保存的*.tcl文件拷贝到新建工程目录下,然后在View->Utility Windows中打开Tcl Console,然后输入source *.tcl命令就可以调用Tcl文件,这样只输了一个命令就瞬间配置完成了。 (二)第二种功能:自动编译 在有些规模大的FPGA开发中,可能编译工程一次需要一个小时或者更长时间,都能趁这个空闲出去吃一顿饭了。如果需要编译好几个这样的工程,那人就不能走开,这就比较尴尬了,而Tcl能帮助咱自动完成这些编译工作,无需手动操作。在flow包中包含了几个命令,可以控制工程的编译流程,如图5所示: 图5 其中cd命令是将当前工作目录转为需要打开工程所在目录,关于Tcl的文件操作在后续的《TCL学习小记》中再做学习分享;project_open命令打开需要编译的工程;execute_flow –compile命令编译工程,它包括Analysis and synthesis、Fitter、Assembler和Timing Analyzer操作;通过project_close关闭当前工程,然后编译下一个工程。当然我这个代码写的比较简单,真正需要测试时还需要考虑工程打开错误、工程编译出错等一些问题,这些都需要加入相应的错误判断程序;或者是需要将Analysis and synthesis、Fitter、Assembler和Timing Analyzer操作分开执行,在不同操作间加入不同assignment,然后打印report,这些功能都可以通过Tcl命令实现。 应该还有更多的功能或者说测试方法,大家多多分享…… |
|