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

    文章

    1715

    浏览量

    88455
  • 时序约束
    +关注

    关注

    1

    文章

    115

    浏览量

    13409
  • Vivado
    +关注

    关注

    19

    文章

    808

    浏览量

    66321
收藏 人收藏

    评论

    相关推荐

    每次Vivado编译的结果都一样吗

    tool inputs? 对大多数情况来说,Vivado编译的结果是一样的,但要保证下面的输入是一样的: Design sources Constraints Tcl scripts and command
    的头像 发表于 11-11 11:23 187次阅读
    每次<b class='flag-5'>Vivado</b>编译的结果都一样吗

    常用时序约束使用说明-v1

    为了防止约束失败,我们在Tcl输入框验证,没有告警或者错误说明约束的写法是正确的set_max_delay 5.00 -from [get_cells key2_detect_ins
    的头像 发表于 11-01 11:06 136次阅读

    Vivado使用小技巧

    有时我们对时序约束进行了一些调整,希望能够快速看到对应的时序报告,而又不希望重新布局布线。这时,我们可以打开布线后的dcp,直接在Vivado Tc
    的头像 发表于 10-24 15:08 209次阅读
    <b class='flag-5'>Vivado</b>使用小技巧

    华为设备的OSPF命令详解

    OSPF网络。这篇文章将详细介绍华为设备的OSPF命令,包括基本配置、路由策略、邻居关系和故障排除等方面,帮助读者全面了解和掌握这些命令
    的头像 发表于 08-12 18:13 1420次阅读

    深度解析FPGA时序约束

    建立时间和保持时间是FPGA时序约束两个最基本的概念,同样在芯片电路时序分析也存在。
    的头像 发表于 08-06 11:40 560次阅读
    深度解析FPGA<b class='flag-5'>中</b>的<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    SDRAM的active命令介绍

    在向SDRAM 的任何行发出 READ或 WRITE 命令之前,必须先打开该行。这是通过 ACTIVE 命令完成的。ACTIVE 命令的目的是打开或者说激活(active)bank
    的头像 发表于 07-29 09:53 398次阅读
    SDRAM<b class='flag-5'>中</b>的active<b class='flag-5'>命令</b>介绍

    FPGA 高级设计:时序分析和收敛

    Static Timing Analysis,简称 STA。它可以简单的定义为:设计者提出一些特定的时序要求(或者说是添加特定的时序约束),套用特定的时序模型,针对特定的电路进行分析。
    发表于 06-17 17:07

    Xilinx FPGA编程技巧之常用时序约束详解

    今天给大侠带来Xilinx FPGA编程技巧之常用时序约束详解,话不多说,上货。 基本的约束方法 为了保证成功的设计,所有路径的时序要求必须能够让执行工具获取。最普遍的三种路径以及
    发表于 05-06 15:51

    FPGA工程的时序约束实践案例

    详细的原时钟时序、数据路径时序、目标时钟时序的各延迟数据如下图所示。值得注意的是数据路径信息,其中包括Tco延迟和布线延迟,各级累加之后得到总的延迟时间。
    发表于 04-29 10:39 676次阅读
    FPGA工程的<b class='flag-5'>时序</b><b class='flag-5'>约束</b>实践案例

    时序约束实操

    添加约束的目的是为了告诉FPGA你的设计指标及运行情况。在上面的生成约束之后,在Result àxx.sdc中提供约束参考(请注意该文件不能直接添加到工程,需要热复制到别的指定目录或
    的头像 发表于 04-28 18:36 2190次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>约束</b>实操

    Xilinx FPGA编程技巧之常用时序约束详解

    ,这一约束降低工具的布线难度而又不会影响时序性能。这种约束通常用在有时钟使能控制的同步元件路径。 必须说明的是上图Enable信号的产生周期必须大于等于n*PERIOD,且每
    发表于 04-12 17:39

    时序电路的分类 时序电路的基本单元电路有哪些

    时序电路可以分为同步时序电路和异步时序电路。接下来,我们将详细讨论时序电路的分类以及其基本单元电路。 一、同步
    的头像 发表于 02-06 11:25 2337次阅读

    Vivado时序问题分析

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

    FPGA物理约束之布线约束

    IS_ROUTE_FIXED命令用于指定网络的所有布线进行固定约束。进入Implemented页面后,Netlist窗口如图1所示,其中Nets文件展开后可以看到工程中所有的布线网络。
    的头像 发表于 12-16 14:04 1139次阅读
    FPGA物理<b class='flag-5'>约束</b>之布线<b class='flag-5'>约束</b>

    SDC约束文件中常见的基础命令总结

    设计内部包含多个时钟,但是所有时钟都通过一个时钟源分频得到,这种是同步时钟,相位都是固定的。工具在分析时序时,会自动计算两时钟信号相邻最近的相位的时间差,作为STA检查的Require Time。
    的头像 发表于 12-04 12:21 1753次阅读
    SDC<b class='flag-5'>约束</b>文件中常见的基础<b class='flag-5'>命令</b>总结