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
    +关注

    关注

    11

    文章

    1794

    浏览量

    91058
  • 时序约束
    +关注

    关注

    1

    文章

    118

    浏览量

    13892
  • Vivado
    +关注

    关注

    19

    文章

    846

    浏览量

    70471
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Windows环境下用Vivado调试E203

    第一步 选择RTL文件 创建Vivado工程后,将e203_hbirdv2-masterrtle203下的所有Verilog文件加入工程; 此外还有fpgamcu200tsrc目录
    发表于 11-05 06:25

    开源RISC-V处理器(蜂鸟E203)学习(二)修改FPGA综合环境(移植到自己的Xilinx FPGA板卡)

    的板卡只有125M单端时钟,所以约束的修改如下图所示,为了避免混淆直接将时钟信号名都改了。 这里需要修改脚本,如图修改ip.tcl脚本,这个生成vivado的IP,添加如下两行脚本,配置
    发表于 10-31 08:46

    vivado时序分析相关经验

    vivado综合后时序为例主要是有两种原因导致: 1,太多的逻辑级 2,太高的扇出 分析时序违例的具体位置以及原因可以使用一些tcl命令方便
    发表于 10-30 06:58

    移植E203到Genesys2开发板时遇到时序问题的常见原因

    在移植E203到自己的Genesys2开发板时候遇到时序问题的常见原因 1.在vivado,连接的管脚的信号一般都会自动添加OBUF或IBUF。 但是对于inout类型的接口,不会主动添加
    发表于 10-29 07:04

    在Windows10上运行vivado使用tcl文件创建E203项目路径错误的问题

    先按照官方给的开源项目,e203_hbirdv2-masterfpgamcu200t目录下的Makefile内容手动创建vivado工程。 在调用.tcl文件的过程,每次进行到
    发表于 10-28 07:19

    win10环境下使用vivado生成.bit与.mcs文件

    到工程。 5.添加约束文件。将fpga目录下的constrs文件夹复制到工程,然后添加约束文件。 6.将fpga目录下的ip.tc
    发表于 10-27 08:25

    时序约束问题的解决办法

    在使用vivado对 Verilog 代码进行综合后,点击“SYNTHESIS”下的“Report Timing Summary”,可以查看综合后的时序报告,查看 Setup Time 和 Hold
    发表于 10-24 09:55

    关于综合保持时间约束不满足的问题

    1、将 nuclei-config.xdc 和 nuclei-master.xdc 加入到项目工程,综合得到时序约束报告如下: 保持时间约束不满足,分析原因,发现所有不满足均出现在
    发表于 10-24 07:42

    vcs和vivado联合仿真

    文档明确描述vivado2021.2版本对应VCS的版本是2020.12,由于license问题所以选择vcs2018的版本;虽然目前与官方的版本不匹配,但是不影响正常使用; 使用tcl界面
    发表于 10-24 07:28

    技术资讯 I Allegro 设计的走线约束设计

    本文要点在进行时序等长布线操作的时候,在布线操作的时候不管你是走蛇形线还是走折线,约束管理器会自动帮你计算长度、标偏差,通过精确控制走线长度,来实现信号的时序匹配。约束设计就是一套精准
    的头像 发表于 09-05 15:19 901次阅读
    技术资讯 I Allegro 设计<b class='flag-5'>中</b>的走线<b class='flag-5'>约束</b>设计

    Vivado无法选中开发板的常见原因及解决方法

    对应的器件信息和约束文件(XDC),大大简化工程初始化流程。然而,在某些情况下,我们可能会发现 Vivado 的界面无法选中目标开发板,导致只能手动选择器件。那么,遇到这种情况该如何处理呢?
    的头像 发表于 07-15 10:19 1389次阅读
    <b class='flag-5'>Vivado</b>无法选中开发板的常见原因及解决方法

    西门子再收购EDA公司 西门子宣布收购Excellicon公司 时序约束工具开发商

    精彩看点 此次收购将帮助系统级芯片 (SoC) 设计人员通过经市场检验的时序约束管理能力来加速设计,并提高功能约束和结构约束的正确性   西门子宣布 收购 Excellicon 公司
    的头像 发表于 05-20 19:04 1274次阅读
    西门子再收购EDA公司  西门子宣布收购Excellicon公司  <b class='flag-5'>时序</b><b class='flag-5'>约束</b>工具开发商

    FPGA时序约束之设置时钟组

    Vivado时序分析工具默认会分析设计中所有时钟相关的时序路径,除非时序约束
    的头像 发表于 04-23 09:50 967次阅读
    FPGA<b class='flag-5'>时序</b><b class='flag-5'>约束</b>之设置时钟组

    一文详解Vivado时序约束

    Vivado时序约束是保存在xdc文件,添加或创建设计的工程源文件后,需要创建xdc文件设置时序约束
    的头像 发表于 03-24 09:44 4385次阅读
    一文详解<b class='flag-5'>Vivado</b><b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    Vivado Tcl零基础入门与案例实战【高亚军编著】

    Vivado Tcl零基础入门与案例实战-高亚军编写
    发表于 01-14 11:13