1 Tcl在Vivado中的基础应用-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Tcl在Vivado中的基础应用

FPGA之家 来源:赛灵思中文社区 作者:赛灵思中文社区 2022-09-14 09:09 次阅读

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会在下一行输出命令执行结果。// 后是作者所加注释,并不是例子的一部分。

设置变量

abd3d41c-33c2-11ed-ba43-dac502259ad0.png

打印

ac0ed3fa-33c2-11ed-ba43-dac502259ad0.png

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


文件I/O

ac41da98-33c2-11ed-ba43-dac502259ad0.png

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


控制流和循环命令

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

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

ac620b4c-33c2-11ed-ba43-dac502259ad0.png

子程序/过程

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

ac9e77b2-33c2-11ed-ba43-dac502259ad0.png

一些特殊符号

acf1ffc2-33c2-11ed-ba43-dac502259ad0.png

ad7e15b6-33c2-11ed-ba43-dac502259ad0.png

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

在Vivado中使用Tcl定位目标

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

目标的定义和定位

adaf17c4-33c2-11ed-ba43-dac502259ad0.png

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

get_ports

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

add0e282-33c2-11ed-ba43-dac502259ad0.png

adedf1a6-33c2-11ed-ba43-dac502259ad0.png

get_cells/get_nets

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

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

ae4876ee-33c2-11ed-ba43-dac502259ad0.png

ae853be2-33c2-11ed-ba43-dac502259ad0.png

若要将搜索层次改为A+B+b1,则可以写一个循环,逐一用current_instance将搜索层次指向A,B和b1,再将搜索到的cells或nets合成一个list输出即可。

若要将搜索层次改为当前层次以及其下所有子层次,可以使用 -hierarchical (在Tcl中可以简写为-hier )。

aebd9aaa-33c2-11ed-ba43-dac502259ad0.png

在使用-hierarchical时有一点需要特别留意,即后面所跟的搜索条件仅指目标对象的名字,不能含有代表层次的“/” 。下面列出的写法便是一种常见的使用误区,并不能以此搜索到A及其下子层次内所有的cells。

aeef7232-33c2-11ed-ba43-dac502259ad0.png

get_pins

af0855e0-33c2-11ed-ba43-dac502259ad0.png

pins在Vivado数据库中有个独特的存在形式,即 / 。这里的“/”不表示层次,而是其名字的一部分,表示这个pin所属的实体。也就是说,在使用get_pins 配合-hier来查找pins时,“/”可以作为名字的一部分,出现在搜索条件内(注意与上述get_cells和get_nets的使用区别)。

af2bde98-33c2-11ed-ba43-dac502259ad0.png

目标之间的关系

Tcl在搜索网表中的目标时,除了上述根据名字条件直接搜索的方式,还可以利用目标间的关系,使用-of_objects(在Tcl中可以简写为-of)来间接搜索特定目标。Vivado中定义的五类目标间的关系如下页左图所示。

afd1c8a8-33c2-11ed-ba43-dac502259ad0.png

以上示右图的设计来举例,

b00f6c58-33c2-11ed-ba43-dac502259ad0.png

下图是一个更复杂的示例,涉及跨层次搜索。可以看到在get_pins时,要加上-leaf才能准确定位到门级元件(或blackbox)的端口q。另外,在实际操作中,使用get_nets和get_pins时,需要视情况而加上其它条件(-filter)才能准确找到下述例子中的cells (i2)。

b036d1f8-33c2-11ed-ba43-dac502259ad0.png

高级查找功能

在使用get_*命令查找网表中的目标时,除了名字这一直接条件,往往还需要辅以其它更复杂的条件判断,这就需要用到高级查找功能:-filter 结合Tcl支持的各种关系和逻辑运算符(==, !=, =~, !~, <=, >=, >, <, &&, ||)甚至是正则表达式来操作。

b068e3d2-33c2-11ed-ba43-dac502259ad0.png

在创建子程序时也常常用到-filter,例如下述get_p的子程序/过程就可以用来返回指定管脚的方向属性,告诉用户这是一个输入管脚还是一个输出管脚。

b098d5e2-33c2-11ed-ba43-dac502259ad0.png

Tcl在Vivado中的延伸应用

Tcl在Vivado中的应用还远不止上述所列,其它常用的功能包括使用预先写好的Tcl脚本来跑设计实现流程,创建高级约束(XDC不支持循环等高级Tcl语法)以及实现复杂的个性化设计流程等等。Tcl所带来的强大的可扩展性决定了其在版本控制、设计自动化流程等方面具有图形化界面不能比拟的优势。

Vivado在不断发展更新的过程中,还有很多新的功能,包括ECO、PR、HD Flow等等都是从Tcl脚本方式开始支持,然后再逐步放入图形化界面中实现。这也解释了为何高端FPGA用户和熟练的Vivado用户都更偏爱Tcl脚本。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    602957
  • TCL
    TCL
    +关注

    关注

    10

    文章

    1722

    浏览量

    88564
  • Vivado
    +关注

    关注

    19

    文章

    812

    浏览量

    66470

原文标题:一文读懂Tcl在Vivado中的应用

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何利用TclVivado实现定制化的FPGA设计流程?

    FPGA 的设计流程简单来讲,就是从源代码到比特流文件的实现过程。大体上跟 IC 设计流程类似,可以分为前端设计和后端设计。
    的头像 发表于 04-23 09:08 2163次阅读
    如何利用<b class='flag-5'>Tcl</b><b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>实现定制化的FPGA设计流程?

    VIVADO从此开始高亚军编著

    / 226第7章 TclVivado的应用 / 2277.1 VivadoTcl的支持
    发表于 10-21 18:24

    Vivado图形化界面IDE运行和调试Tcl命令

    。Xilinx公司从ISE工具的后期开始,工具引入了对tcl语言的支持。目前广泛使用的设计工具Vivado
    发表于 06-17 14:52

    TCL 定制 Vivado 设计实现流程

    今天推出Xilinx已发布的《Vivado使用误区与进阶》系列:用TCL定制Vivado设计实现流程。 上一篇《Tcl
    发表于 06-28 19:34

    Vivado设计之Tcl定制化的实现流程

    其实TclVivado还有很多延展应用,接下来我们就来讨论如何利用Tcl语言的灵活性和可扩展性,
    发表于 11-18 01:48 3605次阅读
    <b class='flag-5'>Vivado</b>设计之<b class='flag-5'>Tcl</b>定制化的实现流程

    Vivado下利用Tcl脚本对综合后的网表进行编辑过程

    ISE下,对综合后的网表进行编辑几乎是不可能的事情,但在Vivado下成为可能。VivadoTcl的支持,使得Tcl脚本
    发表于 11-18 03:16 7526次阅读
    <b class='flag-5'>在</b><b class='flag-5'>Vivado</b>下利用<b class='flag-5'>Tcl</b>脚本对综合后的网表进行编辑过程

    TclVivado的基础应用

    Vivado使用技巧的最大障碍,以至于两年多后的今天,仍有很多用户缺乏升级到Vivado的信心。本文介绍了TclVivado
    发表于 11-18 03:52 4938次阅读
    <b class='flag-5'>Tcl</b><b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>的基础应用

    Vivado使用误区与进阶——Vivado实现ECO功能

    关于TclVivado的应用文章从Tcl的基本语法和在Vivado
    发表于 11-18 18:26 5395次阅读
    <b class='flag-5'>Vivado</b>使用误区与进阶——<b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>实现ECO功能

    如何使用Tcl命令语言让Vivado HLS运作

    了解如何使用Tcl命令语言以批处理模式运行Vivado HLS并提高工作效率。 该视频演示了如何从现有的Vivado HLS设计轻松创建新的Tcl批处理脚本。
    的头像 发表于 11-20 06:06 3183次阅读

    TclVivado的基础应用及优势

    实际上Tcl的功能可以很强大,用其编写的程序也可以很复杂,但要在Vivado或大部分其它EDA工具中使用,则只需掌握其中最基本的几个部分
    的头像 发表于 07-24 16:52 3463次阅读
    <b class='flag-5'>Tcl</b><b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>的基础应用及优势

    FPGA设计TclVivado的基础应用

    ,还是从对使用者思路的要求,都是全新的;在运行速度、算法优化和功能整合等很多方面都有了显著地改进。但是对初学者来说,新的约束语言XDC以及脚本语言Tcl的引入则成为了快速掌握Vivado使用技巧的最大障碍,以至于两年多后的今天,仍有很多用户缺乏升级到
    的头像 发表于 11-17 17:32 2580次阅读

    TclVivado的应用

    Xilinx的新一代设计套件Vivado相比上一代产品 ISE,在运行速度、算法优化和功能整合等很多方面都有了显著地改进。但是对初学者来说,新的约束语言 XDC 以及脚本语言 Tcl 的引入则成为
    的头像 发表于 04-15 09:43 1470次阅读

    TCL定制Vivado设计实现流程

    今天推出Xilinx已发布的《Vivado使用误区与进阶》系列:用TCL定制Vivado设计实现流程。
    的头像 发表于 05-05 09:44 1069次阅读
    用<b class='flag-5'>TCL</b>定制<b class='flag-5'>Vivado</b>设计实现流程

    Vivado实现ECO功能

    关于 Tcl Vivado的应用文章从 Tcl 的基本语法和在 Vivado
    的头像 发表于 05-05 15:34 2666次阅读
    <b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>实现ECO功能

    Vivado设计套件Tcl命令参考指南

    德赢Vwin官网 网站提供《Vivado设计套件Tcl命令参考指南.pdf》资料免费下载
    发表于 09-14 10:23 1次下载
    <b class='flag-5'>Vivado</b>设计套件<b class='flag-5'>Tcl</b>命令参考指南