你的位置:EETOP 赛灵思(Xilinx) 社区 >> >> 全部 >> 详细内容

【Vivado使用误区与进阶】Tcl在Vivado中的应用

发布者:jackzhang 时间:2015-04-27 20:36:08

 Xilinx的新一代设计套件Vivado相比上一代产品ISE,在运行速度、算法优化和功能整合等很多方面都有了显著地改进。但是对初学者来说,新的约束语言XDC以及脚本语言Tcl的引入则成为了快速掌握Vivado使用技巧的最大障碍,以至于两年多后的今天,仍有很多用户缺乏升级到Vivado的信心。

 

        本文介绍了Tcl在Vivado中的基础应用,希望起到抛砖引玉的作用,指引使用者在短时间内快速掌握相关技巧,更好地发挥Vivado在FPGA设计中的优势。


Tcl的背景介绍和基础语法

 

        Tcl(读作tickle)诞生于80年代的加州大学伯克利分校,作为一种简单高效可移植性好的脚本语言,目前已经广泛应用在几乎所有的EDA工具中。Tcl 的最大特点就是其语法格式极其简单甚至可以说僵化,采用纯粹的 [命令 选项 参数] 形式,是名副其实的“工具命令语言”( 即Tcl的全称Tool Command Language)。

 

        实际上Tcl的功能可以很强大,用其编写的程序也可以很复杂,但要在Vivado或大部分其它EDA工具中使用,则只需掌握其中最基本的几个部分。

 

        注: 在以下示例中,% 表示Tcl的命令提示符,执行回车后,Tcl会在下一行输出命令执行结果。 // 后是作者所加注释,并不是例子的一部分。

 

设置变量

 

 

打印

 

 

        打印主要通过puts语句来执行,配合特殊符号,直接决定最终输出内容。


文件I/O

 

 

        可以看到Tcl对文件的操作也是通过设置变量,改变属性以及打印命令来进行的。上述写文件的例子中通过puts命令在my_file.txt文件中写入两行文字,分别为“Hello World!” 和myVar变量的值,然后在读文件操作中读取同一文件的内容。


控制流和循环命令

 

        Tcl语言中用于控制流程和循环的命令与C语言及其它高级语言中相似,包括if、while、for和foreach等等。

        

        具体使用可以参考如下示例:

 

 

子程序/过程

 

        Tcl中的子程序也叫做过程(Procedures),Tcl正是通过创建新的过程来增强其内建命令的能力,提供更强的扩展性。具体到Vivado的使用中,用户经常可以通过对一个个子程序/过程的创建来扩展或个性化Vivado的使用流程。

 

 

 

 

一些特殊符号

 

 

        

        Tcl语言的基本语法相对简单,但要熟练掌握仍需日常不断练习。Xilinx网站上有很多相关资料,这里推荐两个跟Tcl相关的文档 UG835 和 UG894 ,希望对大家学习Vivado和Tcl有所帮助。

 

 

在Vivado中使用Tcl定位目标

 

        在Vivado中使用Tcl最基本的场景就是对网表上的目标进行遍历、查找和定位,这也是对网表上的目标进行约束的基础。要掌握这些则首先需要理解Vivado对目标的分类。

 

目标的定义和定位

 

        如上图所示,设计顶层的I/O称作ports,其余底层模块或是门级网表上的元件端口都称作pins。而包括顶层在内的各级模块,blackbox以及门级元件,都称作cells。连线称作nets,加上XDC中定义的clocks,在Vivado中一共将网表文件中的目标定义为五类。要选取这五类目标,则需用相应的get_*命令,例如get_pins等等。

 

get_ports

 

        ports仅指顶层端口,所以get_ports的使用相对简单,可以配合通配符“* ”以及Tcl语言中处理list的命令一起使用。如下所示,


 

 

get_cells/get_nets

        

        不同于ports仅指顶层端口,要定位cells和nets则相对复杂,首先需要面对层次的问题。这里有个大背景需要明确:Vivado中Tcl/XDC对网表中目标的搜索是层次化的,也就是一次仅搜索一个指定的层次current_instance,缺省值为顶层。

 

        以下图所示设计来举例,若要搜索A(不含a1,a2)层次内的所有cells和名字中含有nt的nets, 有两种方法:

 

 

  

 

 

 

最新课程

  • 深入浅出玩儿转FPGA

    本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念

  • 从零开始大战FPGA基础篇

    本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“

  • Verilog基础及典型数字

    课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了