经过一周的学习,对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
包名 |
功能 |
backannotate |
Back annotate assignments |
chip_planner |
Identify and modify resource usage and routing with the Chip Editor |
database_manager |
Manage version-compatible database files |
device |
Get device and family information from the device database |
flow |
Compile a project, run command-line executables and other common flows |
incremental compilation |
Manipulate design partitions and LogicLock regions, and settings related to incremental compilation |
insystem_memory_edit |
Read and edit memory contents in Altera devices |
insystem_source_probe |
interact with the In-System Sources and Probes tool in an Altera device |
jtag |
Control the JTAG chain |
logic_analyzer_interface |
Query and modify the logic analyzer interface output pin state |
misc |
Perform miscellaneous tasks such as enabling natural bus naming, package loading, and message posting |
project |
Create and manage projects and revisions, make any project assignments including timing assignments |
rapid_recompile |
Manipulate Quartus II Rapid Recompile features |
report |
Get information from report tables, create custom reports |
rtl |
Traversing and querying the RTL netlist of your design |
sdc |
Specifies constraints and exceptions to the TimeQuest Timing Analyzer |
sdc_ext |
Altera-specific SDC commands |
simulator |
Configure and perform simulations |
sta |
Contains the set of Tcl functions for obtaining advanced information from the Quartus II TimeQuest Timing Analyzer |
stp |
Run the SignalTap II Logic Analyzer |
在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命令实现。
应该还有更多的功能或者说测试方法,大家多多分享……
用户547145 2014-9-22 18:08
用户377235 2014-9-22 18:04
Hoki 2014-4-11 13:37
用户1739054 2014-4-10 15:34
Hoki 2014-4-10 12:59
用户1739054 2014-4-10 10:43
Hoki 2014-4-9 19:33
用户1739054 2014-4-9 16:55
用户1739054 2014-4-9 16:51
Hoki 2014-4-9 15:57