Tcl In QuartusII
2014-04-30 16:49
323 查看
经过一周的学习,对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命令实现。
应该还有更多的功能或者说测试方法,大家多多分享……
分享了一点小经验,下面进入正题,学了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 |
(一)第一种功能:自动配置工程:
在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命令实现。
应该还有更多的功能或者说测试方法,大家多多分享……
相关文章推荐
- QT---线程间通信
- PB与各种数据库连接
- 快用苹果助手的免流量活动,你造?
- 秒杀倒计时文件
- C++的那些事:你真的了解引用吗
- 常用css属性查询表
- C++的那些事:函数全解析
- 商学院关注:社会对技能人才需求不断扩大
- 转】学习ZigBee入门-2
- 【算法】第 n 小数 nth_element
- PB6.5调用Web Service的办法
- cocos2d-x3.0 PageView
- 用C#实现C/S模式下软件自动在线升级
- SpringMVC同名参数属性简单解决方案obj.property
- 黑马程序员-Java文件复制代码
- 定制您的“微信/来往/易信和微博”的原创内容
- SqlServer_批量替换某字段值所包含的某字符串;
- Windows下安装Hadoop
- 插件
- object c @synthesize 自动生成setter,getter方法