0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

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

3天内不再提示

Vivado时序约束中详细的Tcl命令

454398 来源:科学计算technomania 作者:猫叔 2020-11-16 15:07 次阅读

Vivado时序约束中Tcl命令的对象及属性

在前面的章节中,我们用了很多Tcl的指令,但有些指令并没有把所有的参数多列出来解释,这一节,我们就把约束中的Tcl指令详细讲一下。

我们前面讲到过get_pins和get_ports的区别,而且我们也用过get_cells、get_clocks和get_nets这几个指令,下面就通过一张图直观展现它们的区别。


get_clocks后面的对象是我们之前通过create_clocks或者create_generated_clocks创建的时钟,不在硬件上直接映射。

我们再来看下各个命令的属性。

1. port

我们可以通过Tcl脚本查看port的所有属性,比如上面的wave_gen工程中,有一个port是clk_pin_p,采用如下脚本:

set inst [get_ports clk_pin_p]
report_property $inst

显示如下:

get_ports的使用方法如下:

# 获取所有端口
get_ports *

# 获取名称中包含data的端口
get_ports *data*

# 获取所有输出端口
get_ports -filter {DIRECTION == OUT}

# 获取所有输入端口
all_inputs

# 获取输入端口中名字包含data的端口
get_ports -filter {DIRECTION == IN} *data*

# 获取总线端口
get_ports -filter {BUS_NAME != ""}

2. cell

按照上面的同样的方式,获取cell的property,如下:

get_cells的使用方法如下:

# 获取顶层模块
get_cells *

# 获取名称中包含字符gen的模块
get_cells *gen*

# 获取clk_gen_i0下的所有模块
get_cells clk_gen_i0/*

# 获取触发器为FDRE类型且名称中包含字符samp
get_cells -hier filter {REF_NAME == FDRE} *samp*

# 获取所有的时序单元逻辑
get_cells -hier -filter {IS_SEQUENTIAL == 1}

# 获取模块uart_rx_i0下两层的LUT3
get_cells -filter {REF_NAME == LUT3} *uart_tx_i0/*/*

3. pin

获取pin的property,如下:

get_pins的使用方法如下:

# 获取所有pins
get_pins *

# 获取名称中包含字符led的引脚
get_pins -hier -filter {NAME =~ *led*}

# 获取REF_PIN_NAME为led的引脚
get_pins -hier -filter {REF_PIN_NAME == led}

# 获取时钟引脚
get_pins -hier -filter {IS_CLOCK == 1}

# 获取名称中包含cmd_parse_i0的使能引脚
get_pins -filter {IS_ENABLE == 1} cmd_parse_i0/*/*

# 获取名称中包含字符cmd_parse_i0且为输入的引脚
get_pins -filter {DIRECTION == IN} cmd_parse_i0/*/*

4. net

获取pin的property,如下:

get_nets的使用方法如下:

# 获取所有nets
get_nets *

# 获取名称中包含字符send_resp_val的网线
get_nets -hier *send_resp_val*
get_nets -filter {NAME =~ *send_resp_val*} -hier

# 获取穿过边界的同一网线的所有部分
get_nets {resp_gen_i0/data4[0]} -segments

# 获取模块cmd_parse_i0下的所有网线
get_nets -filter {PARENT_CELL == cmd_parse_i0} -hier

# 获取模块cmd_parse_i0下的名称中包含字符arg_cnt[]的网线
get_nets -filter {PARENT_CELL == cmd_parse_i0} -hier *arg_cnt[*]

这5个tcl指令的常用选项如下表:

命令 -hierarchy -filter -of_objects -regexp -nocase
get_cells
get_nets
get_pins
get_ports
get_clocks

这5个Tcl命令对应的5个对象之间也有着密切的关系,下图所示的箭头的方向表示已知箭头末端对象可获取箭头指向的对象。


以wave_gen中的clk_gen_i0模块为例来说明上面的操作:

# 获取模块的输入引脚
get_pins -of [get_cells {clk_gen_i0/clk_core_i0}] -filter {DIRECTION == IN}

# 已知引脚名获取所在模块
get_cells -of [get_pins clk_gen_i0/clk_core_i0/clk_in1_n]

# 已知模块名获取与该模块相连的网线
get_nets -of [get_cells {clk_gen_i0/clk_core_i0}]

# 已知引脚名获取与该引脚相连的网线
get_nets -of [get_pins clk_gen_i0/clk_core_i0/clk_rx]

# 已知时钟引脚获取时钟引脚对应的时钟
get_clocks -of [get_pins clk_gen_i0/clk_core_i0/clk_rx]

需要注意的是:

① -hier不能和层次分隔符“/”同时使用,但“/”可出现在-filter中

② 可根据属性过滤查找目标对象

③ -filter中的属性为:“==”(相等)、“!=”(不相等)、"=~"(匹配)、"!~"(不匹配),若有多个表达式,其返回值为bool类型时,支持逻辑操作(&& ||)

编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TCL
    TCL
    +关注

    关注

    10

    文章

    1657

    浏览量

    87925
  • 时序约束
    +关注

    关注

    1

    文章

    111

    浏览量

    13349
  • Vivado
    +关注

    关注

    18

    文章

    789

    浏览量

    65091
收藏 人收藏

    评论

    相关推荐

    Vivado时序问题分析

    有些时候在写完代码之后呢,Vivado时序报红,Timing一栏有很多时序问题。
    的头像 发表于 01-05 10:18 382次阅读

    FPGA时序约束--基础理论篇

    FPGA开发过程,离不开时序约束,那么时序约束是什么?简单点说,FPGA芯片中的逻辑电路,从输入到输出所需要的时间,这个时间必须在设定的时
    发表于 11-15 17:41

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

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

    Vivado使用指南

    Vivado界面也有Add Source的快捷接口,如下图所示:进入Add Source界面后选择对应要添加的文件类型;Constraints:约束文件(含时序
    发表于 09-06 17:55

    FPGA I/O口时序约束讲解

    前面讲解了时序约束的理论知识FPGA时序约束理论篇,本章讲解时序约束实际使用。
    发表于 08-14 18:22 914次阅读
    FPGA I/O口<b class='flag-5'>时序</b><b class='flag-5'>约束</b>讲解

    Vivado的Implementation阶段约束报警告?

     'sys_clk'. [timing.xdc:37](63 more like this)   A:对于约束的问题,我们可以在Vivadotcl中先执行一下这些约束指令,如果有
    的头像 发表于 08-08 14:10 754次阅读

    浅谈时序设计和时序约束

      本文主要介绍了时序设计和时序约束
    的头像 发表于 07-04 14:43 778次阅读

    Vivado综合阶段什么约束生效?

    Vivado综合默认是timing driven模式,除了IO管脚等物理约束,建议添加必要的时序约束,有利于综合逻辑的优化,同时综合后的design里面可以评估
    的头像 发表于 07-03 09:03 437次阅读

    TCL 定制 Vivado 设计实现流程

    、输出的文件和 报告以及工程的输入源文件(包含约束文件)等。 如下右图所示,在 Vivado IDE 还可以一键式运行整个设计流程。这些预置的命令按钮就放置在工具最左边的侧栏:Flo
    发表于 06-28 19:34

    时序约束怎么用?时序约束到底是要干嘛?

    很多小伙伴开始学习时序约束的时候第一个疑惑就是标题,有的人可能会疑惑很久。不明白时序约束是什么作用,更不明白怎么用。
    的头像 发表于 06-28 15:10 938次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>约束</b>怎么用?<b class='flag-5'>时序</b><b class='flag-5'>约束</b>到底是要干嘛?

    如何在Vivado中添加时序约束呢?

    今天介绍一下,如何在Vivado中添加时序约束Vivado添加约束的方法有3种:xdc文件、时序
    的头像 发表于 06-26 15:21 2170次阅读
    如何在<b class='flag-5'>Vivado</b>中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>呢?

    如何在Vivado中添加时序约束

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了
    的头像 发表于 06-23 17:44 1371次阅读
    如何在<b class='flag-5'>Vivado</b>中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    FPGA时序约束之衍生时钟约束和时钟分组约束

    在FPGA设计中,时序约束对于电路性能和可靠性非常重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的主时钟
    发表于 06-12 17:29 1408次阅读

    FPGA主时钟约束详解 Vivado添加时序约束方法

    在FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的基础知识。
    发表于 06-06 18:27 6977次阅读
    FPGA主时钟<b class='flag-5'>约束</b>详解 <b class='flag-5'>Vivado</b>添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>方法

    TCL定制Vivado设计实现流程

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