分享

Tcl In QuartusII

 喜爱清心 2016-10-25

         经过一周的学习,对Tcl已经有了大概的认识,虽然还不能很顺手地编写代码,但是已经基本能看懂大段的Tcl代码了。在第一节中,咱说过学习Tcl是为了更好地协助硬件开发,因此更深层次的东西咱也不学习了,学了如果不实践的话就会很快淡忘,这也是咱这几年学习的小经验:“实践就是最好的学习”。记得还在学校的时候,导师就会派各种活儿给咱,不管咱会不会,最开始咱主攻的可是FPGA,结果FPGA的活儿没有,单片机、ARMDSP的小项目一大堆,这些也不大熟啊,只能硬着头皮学了,有压力了学习效率就提高了,几个项目下来从对单片机、DSPARM的初学到能轻松驾驭,慢慢地发现这些东西的基本概念都是互通的,只是开发平台不同而已。记得有一个单片机的小项目,真正开发的时间也就一星期,就这一星期学到的东西比在课堂中学到东西都多,咱可是学了一学期的单片机课,也不否认课堂上的知识给项目开发提供了基础,但是如果不实践,可能会像一艘迷失的船一直在海上漂浮,迷茫着,而实践好比沿岸的灯塔,只要向着这个灯塔,船就能成功上岸。

         分享了一点小经验,下面进入正题,学了Tcl到是要看看它在硬件开发中有什么作用。先从QuartusII上下手,QuartusIITcl做了最大的支持,Tcl ScriptingQuartusIITcl的支持文档。第一节中介绍了在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所示,图中加载的包有:devicemiscproject

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设置了familydevice等关于器件和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 synthesisFitterAssemblerTiming Analyzer操作;通过project_close关闭当前工程,然后编译下一个工程。当然我这个代码写的比较简单,真正需要测试时还需要考虑工程打开错误、工程编译出错等一些问题,这些都需要加入相应的错误判断程序;或者是需要将Analysis and synthesisFitterAssemblerTiming Analyzer操作分开执行,在不同操作间加入不同assignment,然后打印report,这些功能都可以通过Tcl命令实现。

         应该还有更多的功能或者说测试方法,大家多多分享……

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多