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

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

3天内不再提示

用TCL定制Vivado设计实现流程

FPGA技术江湖 来源:FPGA算法工程师 2023-05-05 09:44 次阅读

今天推出Xilinx已发布的《Vivado使用误区与进阶》系列:用TCL定制Vivado设计实现流程。

上一篇《Tcl在Vivado中的应用》介绍了Tcl的基本语法以及如何利用Tcl在Vivado中定位目标。其实Tcl在Vivado中还有很多延展应用,接下来我们就来讨论如何利用Tcl语言的灵活性和可扩展性,在Vivado中实现定制化的FPGA设计流程。

基本的 FPGA 设计实现流程

FPGA的设计流程简单来讲,就是从源代码到比特流文件的实现过程。大体上跟IC设计流程类似,可以分为前端设计和后端设计。其中前端设计是把源代码综合为对应的门级网表的过程,而后端设计则是把门级网表布局布线到芯片上最终实现的过程。

以下两图分别表示ISE和Vivado的基本设计流程:

e03ad8a6-eadb-11ed-90ce-dac502259ad0.png

ISE中设计实现的每一步都是相对独立的过程,数据模型各不相同,用户需要维护不同的输入文件,例如约束等,输出文件也不是标准网表格式,并且形式各异,导致整体运行时间过长,冗余文件较多。

Vivado中则统一了约束格式和数据模型,在设计实现的任何一个阶段都支持XDC约束,可以生成时序报告,在每一步都能输出包含有网表、约束以及布局布线信息(如果有)的设计检查点(DCP)文件,大大缩短了运行时间。

从使用方式上来讲,Vivado支持工程模式(Project Based Mode)和非工程模式(None Project Mode)两种,且都能通过Tcl脚本批处理运行,或是在Vivado图形化界面IDE中交互运行和调试。

工程模式

工程模式的关键优势在于可以通过在Vivado中创建工程的方式管理整个设计流程,包括工程文件的位置、阶段性关键报告的生成、重要数据的输出和存储等。

如下左图所示,用户建立了一个Vivado工程后,工具会自动创建相应的.xpr工程文件,并在工程文件所在的位置同层创建相应的几个目录,包括.cache、.data、.runs和.srcs等等(不同版本可能有稍许差异),分别用于存储运行工程过程中产生的数据、输出的文件和报告以及工程的输入源文件(包含约束文件)等。

如下右图所示,在Vivado IDE中还可以一键式运行整个设计流程。这些预置的命令按钮就放置在工具最左边的侧栏:Flow Navigator。不同按钮对应不同的实现过程,其中在后端实现阶段,还可以用右键调出详细分步命令,指引工具具体执行实现的哪一步。

e04d82b2-eadb-11ed-90ce-dac502259ad0.png

特别需要指出的是Flow Navigator只有在Vivado IDE中打开.xpr工程文件才会显示,如果打开的是设计检查点.dcp文件(不论是工程模式或是非工程模式产生的dcp)都不会显示这个侧栏。

非工程模式

非工程模式下,由于不会创建工程,用户就需要自己管理设计源文件和设计过程。源文件只能从当前位置访问,在设计实现过程中的每一步,数据和运行结果都存在于Vivado分配到的机器内存中,在用户不主动输出的情况下,不会存储到硬盘中。

简单来讲,非工程模式提供了一种类似ASIC设计的流程,用户拥有绝对的自由,可以完全掌控设计实现流程,但也需要用户对设计实现的过程和数据,尤其对文件输出和管理全权负责,包括何时、何地、输出怎样的文件等等。

使用非工程模式管理输入输出文件、进行设计实现都需要使用Tcl脚本,但这并不代表非工程模式不支持图形化界面。非工程模式下产生的.dcp文件一样可以在Vivdao IDE中打开,继而产生各种报告,进行交互式调试等各种在图形化下更便捷直观的操作。这是一个常见误区,就像很多人误认为工程模式下不支持Tcl脚本运行是一个道理。但两种模式支持的Tcl命令确实是完全不同的,使用起来也不能混淆。

e06b0bf2-eadb-11ed-90ce-dac502259ad0.png

下图所示是同一个设计(Vivado自带的Example Design)采用两种模式实现所需使用的不同脚本,更详细的内容可以在UG975和UG835中找到。需要注意的是,工程模式下的Tcl脚本更简洁,但并不是最底层的Tcl命令,实际执行一条相当于执行非工程模式下的数条Tcl命令。

e08074b0-eadb-11ed-90ce-dac502259ad0.png

Tcl对图形化的补充

相信对大部分FPGA工程设计人员来说,图形化界面仍旧是最熟悉的操作环境,也是设计实现的首选。在Xilinx推出全面支持Tcl的Vivado后,这一点依然没有改变,但我们要指出的是,即使是在图形化界面上跑设计,仍然可以充分利用Tcl的优势。在Vivado IDE上运行Tcl脚本主要有以下几个渠道。

Tcl Console

e0ae4304-eadb-11ed-90ce-dac502259ad0.png

Vivado IDE的最下方有一个Tcl Console,在运行过程中允许用户输入Tcl/XDC命令或是source预先写好的Tcl脚本,返回值会即时显示在这个对话框。

举例来说,设计调试过程中,需要将一些约束应用在某些网表目标上(具体可参照《Tcl在Vivado中的应用》所示),推荐的做法就是在IDE中打开.dcp然后在Tcl Console中输入相应的Tcl/XDC命令,验证返回值,碰到问题可以直接修改,直到找到正确合适的命令。然后可以记录这些命令,并存入XDC文件中以备下次实现时使用。

还有一种情况是,预先读入的XDC中有些约束需要修改,或是缺失了某些重要约束。不同于ISE中必须修改UCF重跑设计的做法,在Vivado中,我们可以充分利用Tcl/XDC的优势,在Tcl Console中输入新的Tcl/XDC,无需重跑设计,只要运行时序报告来验证。当然,如果能重跑设计,效果会更好,但是这种方法在早期设计阶段提供了一种快速进行交互式验证的可能,保证了更快地设计迭代,大大提升了效率。

另外,通过某些Tcl命令(例如show_objects、select_objects等等)的帮助,我们还可以利用Tcl Console与时序报告、RTL和门级网表以及布局布线后的网表之间进行交互调试,极大发挥Vivado IDE的优势。

Hook Scripts

Vivado IDE中内置了tcl.pre和tcl.post,用户可以在Synthesis和Implementation的设置窗口中找到。设计实现的每一步都有这样两个位置可供用户加入自己的Tcl脚本。

tcl.pre表示当前这步之前Vivado会主动source的Tcl脚本,tcl.post表示这步之后会source的脚本。

e0c4ee74-eadb-11ed-90ce-dac502259ad0.png

Tcl脚本必须事先写好,然后在上图所示的设置界面由用户使用弹出窗口指定到脚本所在位置。

这些就是所谓的“钩子”脚本,正是有了这样的脚本,我们才得以在图形化界面上既享有一键式执行的便利,又充分利用Tcl带来的扩展性。比较常见的使用场景是,在某个步骤后多产生几个特别的报告,或是在布线前再跑几次物理优化等。

Customer Commands

Vivado IDE中还有一个扩展功能,允许用户把事先创建好的Tcl脚本以定制化命令的方式加入图形化界面,成为一个按钮,方便快速执行。这个功能常常用来报告特定的时序信息、修改网表内容、实现ECO等等。

e0dcfa1e-eadb-11ed-90ce-dac502259ad0.png

用Tcl定制实现流程

综上所述,标准的FPGA设计实现流程完全可以通过Vivado IDE一键式执行,如果仅需要少量扩展,通过前述钩子脚本等几种方法也完全可以做到。若是这些方法都不能满足需求,还可以使用Tcl脚本来跑设计,从而实现设计流程的全定制。

:以下讨论的几种实现方案中仅包含后端实现具体步骤的区别,而且只列出非工程模式下对应的Tcl命令。

右图所示是Vivado中设计实现的基本流程,蓝色部分表示实现的基本步骤(尽管opt_design这一步理论上不是必选项,但仍强烈建议用户执行),对应Implementation的Default策略。黄色部分表示可选择执行的部分,不同的实现策略中配置不同。

这里不会讨论那些图形化界面中可选的策略,不同策略有何侧重,具体如何配置我们将在另外一篇关于Vivado策略选择的文章中详细描述。

我们要展示的是如何对设计流程进行改动来更好的满足设计需求,这些动作往往只能通过Tcl脚本来实现。

充分利用物理优化

物理优化即phys_opt_design是在后端通过复制、移动寄存器来降扇出和retiming,从而进行时序优化的重要手段,一般在布局和布线之间运行,从Vivado 2014.1开始,还支持布局后的物理优化。

很多用户会在Vivado中选中phys_opt_design,但往往不知道这一步其实可以运行多次,并且可以选择不同的directive来有侧重的优化时序。

比如,我们可以写这样一个Tcl脚本,在布局后,使用不同的directive或选项来跑多次物理优化,甚至可以再多运行一次物理优化,专门针对那些事先通过get_nets命令找到并定义为highfanout_nets的高扇出网络具体directive的含义可以通过UG835、UG904或phys_opt_design -help命令查询。

布局布线之间的多次物理优化不会恶化时序,但会增加额外的运行时间,也有可能出现时序完全没有得到优化的结果。布线后的物理优化有时候会恶化THS,所以请一定记得每一步后都运行report_timing_summary,并且通过write_checkpoint写出一个.dcp文件来保留阶段性结果。这一步的结果不理想就可以及时退回到上一步的.dcp继续进行。

e0fe8904-eadb-11ed-90ce-dac502259ad0.png

闭环设计流程

通常的FPGA设计流程是一个开环系统,从前到后依次执行。但Vivado中提供了一种可能,用户可以通过place_design -post_place_opt在已经完成布局布线的设计上再做一次布局布线,从而形成一个有了反馈信息的闭环系统。这次因为有了前一次布线后的真实连线延迟信息,布局的针对性更好,并且只会基于时序不满足的路径进行重布局而不会改变大部分已经存在的布局信息,之后的布线过程也是增量流程。

这一过程所需的运行时间较短,是一种很有针对性的时序优化方案。可以通过Tcl写一个循环多次迭代运行,但需留意每次的时序报告,若出现时序恶化就应及时停止。

e110b8e0-eadb-11ed-90ce-dac502259ad0.png

增量设计流程

Vivado中的增量设计也是一个不得不提的功能。当设计进行到后期,每次运行改动很小,在开始后端实现前读入的设计网表具有较高相似度的情况下,推荐使用Vivado的增量布局布线功能。

e123dbdc-eadb-11ed-90ce-dac502259ad0.png

如上图所示,运行增量流程的前提是有一个已经完成布局布线的.dcp文件,并以此用来作为新的布局布线的参考。

运行过程中,Vivado会重新利用已有的布局布线数据来缩短运行时间,并生成可预测的结果。当设计有95%以上的相似度时,增量布局布线的运行时间会比一般布局布线平均缩短2倍。若相似度低于80%,则使用增量布局布线只有很小的优势或者基本没有优势。

e13a6e6a-eadb-11ed-90ce-dac502259ad0.png

除了缩短运行时间外,增量布局布线对没有发生变化的设计部分造成的破坏也很小,因此能减少时序变化,最大限度保留时序结果,所以一般要求用做参考的.dcp文件必须是一个完全时序收敛的设计。

参考点.dcp文件可以在Vivado IDE的Implementation设置中指定,也可以在Tcl脚本中用read_checkpoint -incremental读入。特别需要指出的是,在工程模式中,如要在不新建一个impl实现的情况下使用上一次运行的结果作为参考点,必须将其另存到这次运行目录之外的位置,否则会因冲突而报错。

以上用Tcl定制Vivado设计实现流程的讨论就到这里,后面我将就Tcl使用场景,包括ECO流程等的更多细节进行展开。

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

    关注

    1629

    文章

    21742

    浏览量

    603534
  • Xilinx
    +关注

    关注

    71

    文章

    2167

    浏览量

    121466
  • TCL
    TCL
    +关注

    关注

    10

    文章

    1725

    浏览量

    88617
  • 时序
    +关注

    关注

    5

    文章

    388

    浏览量

    37337
  • Vivado
    +关注

    关注

    19

    文章

    812

    浏览量

    66571

原文标题:用 TCL 定制 Vivado 设计实现流程

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何利用TclVivado实现定制化的FPGA设计流程

    FPGA 的设计流程简单来讲,就是从源代码到比特流文件的实现过程。大体上跟 IC 设计流程类似,可以分为前端设计和后端设计。
    的头像 发表于 04-23 09:08 2176次阅读
    如何利用<b class='flag-5'>Tcl</b>在<b class='flag-5'>Vivado</b>中<b class='flag-5'>实现</b><b class='flag-5'>定制</b>化的FPGA设计<b class='flag-5'>流程</b>?

    VIVADO从此开始高亚军编著

    / 2327.2.2 网表对象及属性 / 2347.3 Tcl命令与网表视图的交互使用 / 2417.4 典型应用 / 2427.4.1 流程管理 / 2427.4.2 定制报告 / 2467.4.3 网表编辑 / 2497.
    发表于 10-21 18:24

    TCL 定制 Vivado 设计实现流程

    今天推出Xilinx已发布的《Vivado使用误区与进阶》系列:TCL定制Vivado设计实现
    发表于 06-28 19:34

    Vivado设计之Tcl定制化的实现流程

    其实TclVivado中还有很多延展应用,接下来我们就来讨论如何利用Tcl语言的灵活性和可扩展性,在Vivado实现
    发表于 11-18 01:48 3609次阅读
    <b class='flag-5'>Vivado</b>设计之<b class='flag-5'>Tcl</b><b class='flag-5'>定制</b>化的<b class='flag-5'>实现</b><b class='flag-5'>流程</b>

    TclVivado中的基础应用

    Xilinx的新一代设计套件Vivado相比上一代产品ISE,在运行速度、算法优化和功能整合等很多方面都有了显著地改进。但是对初学者来说,新的约束语言XDC以及脚本语言Tcl的引入则成为了快速掌握
    发表于 11-18 03:52 4944次阅读
    <b class='flag-5'>Tcl</b>在<b class='flag-5'>Vivado</b>中的基础应用

    Vivado使用误区与进阶——在Vivado实现ECO功能

    关于TclVivado中的应用文章从Tcl的基本语法和在Vivado中的应用展开,介绍了如何扩展甚至是定制FPGA设计
    发表于 11-18 18:26 5410次阅读
    <b class='flag-5'>Vivado</b>使用误区与进阶——在<b class='flag-5'>Vivado</b>中<b class='flag-5'>实现</b>ECO功能

    如何使用Tcl命令语言让Vivado HLS运作

    了解如何使用Tcl命令语言以批处理模式运行Vivado HLS并提高工作效率。 该视频演示了如何从现有的Vivado HLS设计轻松创建新的Tcl批处理脚本。
    的头像 发表于 11-20 06:06 3192次阅读

    Tcl定制Vivado设计流程详解

    工程模式的关键优势在于可以通过在Vivado 中创建工程的方式管理整个设计流程,包括工程文件的位置、阶段性关键报告的生成、重要数据的输出和存储等。
    的头像 发表于 07-24 17:30 4619次阅读
    <b class='flag-5'>用</b><b class='flag-5'>Tcl</b><b class='flag-5'>定制</b><b class='flag-5'>Vivado</b>设计<b class='flag-5'>流程</b>详解

    TclVivado中的基础应用及优势

    实际上Tcl的功能可以很强大,其编写的程序也可以很复杂,但要在Vivado或大部分其它EDA工具中使用,则只需掌握其中最基本的几个部分
    的头像 发表于 07-24 16:52 3469次阅读
    <b class='flag-5'>Tcl</b>在<b class='flag-5'>Vivado</b>中的基础应用及优势

    如何用Tcl实现Vivado设计流程介绍

    Vivado有两种工作模式:project模式和non-project模式。这两种模式都可以借助VivadoIDE或Tcl命令来运行。相比之下,VivadoIDE给project模式提供了更多的好处,而Tcl命令使得non-pr
    的头像 发表于 10-21 10:58 3657次阅读
    如何用<b class='flag-5'>Tcl</b><b class='flag-5'>实现</b><b class='flag-5'>Vivado</b>设计<b class='flag-5'>流程</b>介绍

    Tcl实现Vivado设计全流程

    设置芯片型号,设置源文件位置,设置生成文件位置,添加设计源文件,流程命令,生成网表文件,设计分析,生成bitstream文件。其中,流程命令是指综合、优化、布局、物理优化和布线。
    的头像 发表于 11-20 10:56 2130次阅读

    带大家一起体验一下Vivado的ECO流程

    这里带大家一起体验一下Vivado 的ECO流程,以vivado自带的Example Design为例, 直接TCL命令修改网表,在正常的
    的头像 发表于 11-29 11:04 4365次阅读
    带大家一起体验一下<b class='flag-5'>Vivado</b>的ECO<b class='flag-5'>流程</b>

    Vivado中常用TCL命令汇总

    Vivado是Xilinx推出的可编程逻辑设备(FPGA)软件开发工具套件,提供了许多TCL命令来简化流程和自动化开发。本文将介绍在Vivado中常用的
    的头像 发表于 04-13 10:20 3744次阅读

    Vivado实现ECO功能

    关于 TclVivado中的应用文章从 Tcl 的基本语法和在 Vivado 中的 应用展开,继上篇《
    的头像 发表于 05-05 15:34 2701次阅读
    在<b class='flag-5'>Vivado</b>中<b class='flag-5'>实现</b>ECO功能

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

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