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功能来加速工程实现。
转自eetop
原文链接 Vivado中巧用Tcl命令的使用方法
更多相关阅读
2022芯片设计的趋势:验证重于设计、Chiplet、上云... | 专访西门子EDA全球副总裁凌琳
单个端口读取多个按钮
利用硬件SPI控制WS2812
提高电路板EMC能力PCB设计和布线方法
更多IC设计技术干货请关注IC设计技术专栏。