我们从2011年坚守至今,只想做存粹的技术论坛,记录你的技术足迹,有空就回来看看。  由于网站在外面,点击附件后可能要20秒才弹出下载,请耐心等待,勿重复点击

 找回密码
 立即注册
搜索
查看: 660|回复: 2

[技术文章] Vivado中巧用Tcl命令简介

[复制链接]

该用户从未签到

16

主题

30

回帖

2

积分

二级逆天

积分
2

社区居民终身成就奖

发表于 2022-3-2 14:18:15 | 显示全部楼层 |阅读模式
Tcl——ToolCommand Language,诞生于80年代的加州大学伯克利分校,作为一种简单高效可移植性好的脚本语言,一种基于字符串的命令语言,目前已经广泛应用在几乎所有的EDA工具中。
Xilinx公司从ISE工具的后期开始,在工具中引入了对tcl语言的支持。在目前广泛使用的设计工具Vivado中,更是集成了tcl解释器,实现了对tcl很好的支持,同时也大大提高了编译及布局布线效率。
Vivado支持工程模式(ProjectBased Mode)和非工程模式(NoneProject Mode)两种,且都能通过Tcl脚本批处理运行。工程模式主要是在Vivado图形化界面IDE中运行和调试,Vivado工具可自动管理设计流程和设计数据,各种数据都比较直观。非工程模式是一直内存编译流程,所有步骤都需要开发者手动编辑脚本,命令和参数,这样的模式开发者对设计流程有完全的掌控力。
目前,更多的人使用的是工程模式,今天我们就基于工程模式介绍几个Tcl命令的使用方法。
读取trace length
在硬件设计,尤其是高速接口设计(ddr等接口)中,硬件工程师需要充分考虑线长,除了外部走线之外,芯片管脚到内部的线长也需要考虑。
fpga工程师可以在vivado的Tcl Console中执行tcl命令,生成对应器件的trace length文件提供给硬件工程师。
具体命令如下:
link_design -part

write_csv
第一个命令为链接具体的芯片型号,第二个命令为导出tracelength的csv文件。
7系列和Ultrascale/Ultrascale+的型号指定有细微区别,具体如下:
link_design -part xc7k160tfbg676
link_design -part xcku040-sfva784-1-c
提高编译效率
不管是综合(Synthesis)还是实现(Implementation)阶段,Vivado都支持多线程编译。默认情况下,Windows/Linux操作系统,综合阶段的线程数均为2。而在实现阶段,Windows系统的默认线程数为2,Linux操作系统的默认线程数为8。这就是很多时候,使用Linux系统比Windows系统的编译效率高的原因之一。
我们可以通过get_param命令进行目前使用线程数的确认,具体命令见下图蓝色部分。


我们可以通过set_param命令设定期望的线程数,具体命令见下图蓝色部分。

笔者在Windows系统中尝试,实现部分的运行时间有一定缩短。
帮助处理不方便处理的部分
有时使用Xilinx自带的IP,只有网表文件,无法修改IP内部的代码。在实现(Implementation)过程中,发现某资源占用过多,导致无法通过,我们可以考虑使用tcl命令,remove多余的资源。
下面的例子中,例化了两个axi_chip2chip的IP,这个IP中使用了idelayctrl。例化两个IP的时,bank33/35中既有axi_c2c_1的IO,也有axi_c2c_2的IO,一个clock region中只有一个idelayctrl的资源,这就导致了IDELAYCTRL_GROUP的冲突。Vivado实现以后会报如下错误:

因为我们无法在代码中修改idelayctrl的内容,所以我们只能通过Project Setting中添加钩子脚本(HookScript)的方式,将其中一个idelayctrl删除。
具体的方法如下:
1. 先将xdc中的idelayctrl等内容删除。
2. 然后编辑好一个Tcl脚本,脚本文件内部命令如下:
###========================================###
remove_cell u_c2c_fp1/inst/master_fpga_gen.axi_chip2chip_master_phy_inst/master_sio_phy.axi_chip2chip_sio_input_inst/idelayctrl_gen.IDELAYCTRL_inst
set_logic_one [get_pinsu_c2c_fp1/inst/master_fpga_gen.axi_chip2chip_master_phy_inst/axi_chip2chip_phy_init_inst/channel_up]
###=======================================###
remove_cell命令是将对应的一个idelayctrl删除。
set_logic_one是为了保证idelayctrl的输出有效。
3. 最后将上面的Tcl脚本在init_design的tcl.post或opt_design的tcl.pre中指定,使之有效(如下图所示)。


在Vivado的图形界面中,综合(Synthesis)和实现(Implementation)阶段的每个子步骤都可以添加Tcl脚本。
其中tcl.pre表示在子阶段之前需要执行的Tcl脚本,tcl.post表示在子阶段之后需要执行的Tcl脚本。
通过上面的内容,我们可以看到如果我们在工作中使用Tcl命令/脚本,可以实现工程模式设计中,图形化界面不方便实现的功能。本文对Tcl部分做一些抛砖引玉的简介,希望大家能灵活使用Tcl功能来加速工程实现。
参考文档:UG835、UG894
Tcl-Store参考链接:https://github.com/Xilinx/Xilinx ... linx-Tcl-Store-Home
回复

使用道具 举报

  • TA的每日心情
    慵懒
    2024-6-14 16:03
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    0

    主题

    1万

    回帖

    7618

    积分

    二级逆天

    积分
    7618

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2022-3-3 17:15:00 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    43

    主题

    4664

    回帖

    3736

    积分

    二级逆天

    积分
    3736

    社区居民忠实会员社区劳模原创达人终身成就奖优秀斑竹奖特殊贡献奖原创先锋奖

    QQ
    发表于 2023-7-6 09:11:59 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    平平安安
    TOP
    快速回复 返回顶部 返回列表