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

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

3天内不再提示

在Vivado中实现ECO功能

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

本篇是Xilinx已发布的《Vivado使用误区与进阶》系列:在Vivado中实现ECO功能。

关于Tcl在Vivado中的应用文章从Tcl的基本语法和在Vivado中的应用展开,继上篇《用Tcl定制Vivado设计实现流程》介绍了如何扩展甚至是定制FPGA设计实现流程后,引出了一个更细节的应用场景:如何利用Tcl在已完成布局布线的设计上对网表或是布局布线进行局部编辑,从而在最短时间内,以最小的代价完成个别的设计改动需求。

什么是ECO

ECO指的是Engineering Change Order,即工程变更指令。目的是为了在设计的后期,快速灵活地做小范围修改,从而尽可能的保持已经验证的功能和时序。ECO的叫法算是从IC设计领域继承而来,其应用在FPGA设计上尚属首次,但这种做法其实在以往的FPGA设计上已被广泛采用。简单来说,ECO便相当于ISE上的FPGA Editor。

但与FPGA Editor不同,Vivado中的ECO并不是一个独立的界面或是一些特定的命令,要实现不同的ECO功能需要使用不同的方式。

ECO的应用场景和实现流程

ECO的应用场景主要包含:修改cell属性、增减或移动cell、手动局部布线。还有一些需要多种操作配合的复杂场景,例如把RAM(或DSP)的输出寄存器放入/拉出RAMB(或DSP48)内部,或是把设计内部信号接到I/O上作调试probe用等等。

针对不同的应用场景,Vivado中支持的ECO实现方式也略有区别。有些可以用图形界面实现,有些则只能使用Tcl命令。但通常可以在图形化界面上实现的操作,都可以改用一条或数条Tcl命令来实现。

ECO的实现流程如下图所示:

4420ccfc-eb15-11ed-90ce-dac502259ad0.png

第一步所指的Design通常是完全布局布线后的设计,如果是在工程模式下,可以直接在IDE中打开实现后的设计,若是仅有DCP文件,不论是工程模式或是非工程模式产生的DCP,都可以用open_checkpoint命令打开。

第二步就是ECO的意义所在,我们在布局布线后的设计上进行各种操作,然后仅对改动的部分进行局部布局/布线而无需整体重跑设计,节约大量时间的同时也不会破坏已经收敛的时序。

第三步就是产生可供下载的bit文件了,此时必须在Tcl Console中或是Tcl模式下直接输入命令产生bit文件,而不能使用IDE上的“Generate Bitstream”按钮。原因是后者读到的还是ECO前已经完成布局布线的原始设计,生成的bit文件自然也无法使用。

修改属性

绝大部分的属性修改都能通过IDE界面完成,如下图所示。

4429134e-eb15-11ed-90ce-dac502259ad0.png

比如要修改寄存器的初值INIT或是LUT的真值表,用户只需在Vivado IDE中打开布局布线后的设计(Implemented Design),在Device View中找到并选中这个FF/LUT,接着在其左侧的Cell Properties视图中选择需要修改的属性,直接修改即可。

除了对FF/LUT的操作外,很多时候我们需要对MMCM/PLL输出时钟的相移进行修改。对于这种应用,用户也无需重新产生MMCM/PLL,与上述方法类似,可以在布局布线后的Device View上直接修改。

44374946-eb15-11ed-90ce-dac502259ad0.png

移动/交换cells

移动/交换cells是对FF/LUT进行的ECO操作中最基本的一个场景,目前也只有这种情况可以通过图形化实现。如要删减cells等则只能通过Tcl命令来进行。

444440e2-eb15-11ed-90ce-dac502259ad0.png

具体操作方法也相当简便,要互换cells位置的情况下,只要在Device View上选中需要的那两个cells,如上图所示的两个FFs,然后右键调出菜单,选择Swap Locations即可。若要移动cells则更简单,直接在图中选中FF拖移到新的位置即可。

当用户移动或改变了cells的位置后会发现与其连接的nets变成了黄色高亮显示,表示这些nets需要重新布线。这时候需要做的就是在图中选中这些nets然后右键调出菜单,选择Route进行局部布线。

444d4a34-eb15-11ed-90ce-dac502259ad0.png

局部布线后一定要记得在Tcl Console中使用report_route_status命令检查布线情况,确保没有未完成布线(unrouted)或是部分未完成布线(partial routed)的nets存在。给这个命令加上选项则可以报告出更细致的结果,如下图所示。

445751f0-eb15-11ed-90ce-dac502259ad0.png

如果换个稍复杂些的Tcl命令配合图形化显示,更加直观的同时,也可以方便右键调出命令进行针对性的局部布线。

4460c258-eb15-11ed-90ce-dac502259ad0.png

手动布线

手动布线是一种非常规的布线方式,一次只能针对一根net在图形化界面下进行。所谓手动布线,除了完全手动一个节点一个节点的选择外,也支持工具自动选择资源来布线。通常我们并不建议全手动的方式,Vivado是时序驱动的工具,所以其自动选择的布线结果已经是遵循了时序约束下的最佳选择。

在Device View中选择一根没有布线或是预先Unroute过的net(显示为红色高亮),右键调出菜单并选择Enter Assign Routing Mode…便可进入手动布线模式。

4473bad4-eb15-11ed-90ce-dac502259ad0.png

复杂的ECO场景

篇幅过半,一直在铺垫,其实最有实践意义的ECO还没提到。相信大部分用户最怀念FPGA Editor中的一个功能就是probe了,如何快速地把一根内部信号连接到FPGA管脚上,无需重新布局布线,直接更新bit文件后下载调试。曾经数次被客户问及,很多人还为Vivado中不支持这样的做法而深表遗憾。

其实这样类似的功能在Vivado中一直支持,唯一的问题是暂时还没有图形化界面可以一键操作(相关开发工作已经在进行中)。但受益于Tcl的灵活多变,我们可以更有针对性地实现probe功能,效率也更高。

Tcl操作命令

在UG835中把Vivado支持的Tcl命令按照Category分类,这些列于Netlist目录下的命令就是实现ECO需要用到的那些。

通常涉及到增减cells的ECO基本分为三步实现:首先用create_cell / create_net等创建相关cell和/或net,然后用disconnect_net / connect_net等命令修正因为cell和net的改动而影响到的连接关系,最后用route_design加选项完成局部布线。

不同的Vivado版本对此类ECO修改有稍许不同的限制,例如在2014.1之后的版本上,需要在改变cell的连接关系前先用unplace_cell将cell从当前的布局位置上释放,在完成新的连接关系后,再用place_cell放到新的布局位置上。

具体操作上可以根据Vivado的提示或报错信息来改动具体的Tcl命令,但操作思路和可用的命令相差无几。

447d9568-eb15-11ed-90ce-dac502259ad0.png

Add Probe

这是一个在Vivaod上实现probe功能的Tcl脚本,已经写成了proc子程序,简单易懂。可以直接调用,也可以做成Vivado的嵌入式扩展命令。调用其生成probe只需先source这个脚本,然后按照如下所示在Tcl Console中输入命令即可。

44876c1e-eb15-11ed-90ce-dac502259ad0.png

该脚本已经在Vivado2014.3和2014.4上测试过,一次只能完成一个probe的添加,而且必须按照上述顺序输入信号名,管脚位置,电平标准和probe名。因为不具备预检功能,可能会碰到一些报错信息而导致无法继续。例如选择的信号是只存在于SLICE内部的INTRASITE时,则无法拉出到管脚。再比如输入命令时拼错了电平标准等,也会造成Tcl已经部分修改Vivado数据库而无法继续的问题。此时只能关闭已经打开的DCP并选择不保存而重新来过。

449eedee-eb15-11ed-90ce-dac502259ad0.png

ECO在Vivado上的发展

经过了两年多的发展,在Vivado上实现ECO已经有了多种方式,除了前面提到的图形化上那些可用的技巧,还有用户自定义的Tcl命令和脚本等。随着Xilinx Tcl Store的推出,用户可以像在App Store中下载使用app一样下载使用Tcl脚本,简化了Tcl在Vivado上应用的同时,进一步扩展了Tcl的深入、精细化使用,其中就包括Tcl在ECO上的应用。

目前Vivado 2014.4版本上新增了很多有用的脚本。安装好Vivado后,只需打开Tcl Store,找到Debug Utilities,点击Install稍等片刻,即可看到一个add_probe的Tcl proc被安装到了你的Vivado中。

44a6b42a-eb15-11ed-90ce-dac502259ad0.png

这个add_probe是在上述addProbe例子的基础上扩展而来,不仅可以新增probe,而且可以改变现有probe连接的信号。此外,这个脚本采用了argument写法,点击程序可以看help,所以不一定要按照顺序输入信号、电平标准等选项,输错也没有问题。另外增加了预检和纠错功能,碰到问题会报错退出而不会改变Vivado数据库,效率更高。

此外,Tcl Store上还有很多其它好用的脚本,欢迎大家试用并反馈给我们宝贵意见。虽然里面关于ECO的脚本还很少,但我们一直在补充。此外Tcl Store是一个基于GitHub的完全开源的环境,当然也欢迎大家上传自己手中有用的Tcl脚本,对其进行补充。

总体来说,ECO是一个比较大的命题,因为牵扯到的改动需求太多,其实也很难限制在一个GUI界面中实现。这篇文章的目的就是为了让大家对在FPGA上实现ECO有个基本的认识,梳理看似复杂无序的流程,所谓观一叶而知秋,窥一斑而见全豹,希望能带给更多用户信心,用好Vivado其实一点都不难。

审核编辑:汤梓红

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

    关注

    1602

    文章

    21320

    浏览量

    593201
  • IC设计
    +关注

    关注

    37

    文章

    1264

    浏览量

    102957
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119373
  • ECO
    ECO
    +关注

    关注

    0

    文章

    51

    浏览量

    14774
  • Vivado
    +关注

    关注

    18

    文章

    790

    浏览量

    65101

原文标题:在 Vivado 中实现 ECO 功能

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

收藏 人收藏

    评论

    相关推荐

    从DeepSleep模式过渡到活动模式时,IMO和ECO时钟唤醒过程是如何运行的呢?

    我正在使用 CYT2B95。 我主动模式下使用 ECO 作为 FLL/PLL 参考时钟。 从 DeepSleep 模式过渡到活动模式时,IMO 和 ECO 时钟唤醒过程
    发表于 01-24 07:52

    保存模块Vivado的位置

    我们的设计Vivado实现结果因运行而异。我们想要从“最佳”实现锁定两个模块的放置信息。
    发表于 10-18 14:36

    V6 FPGA可以ECO功能吗?

    你好V6 FPGA可以ECO功能吗?例如:输入时钟添加逆变器?以上来自于谷歌翻译以下为原文Hi V6 FPGA can ECO function? e.g: input clock add inverter?
    发表于 11-13 14:20

    vivado是否有像Logic Lock这样的功能

    大家好,感谢您的关注。 (这是我论坛上的第一个主题〜)我已经了解到Quartus II具有Logic Lock功能,这对于组的设计人员来说非常方便,并且还具有时序优化功能。我对
    发表于 05-20 14:32

    用 TCL 定制 Vivado 设计实现流程

    迭代运行,但需留意每次的时序报告,若出现时序恶化就应及时停止。 增量设计流程 Vivado 的增量设计也是一个不得不提的功能。当设计进行到后期,每次运行改动很小,开始后端
    发表于 06-28 19:34

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

    关于Tcl在Vivado中的应用文章从Tcl的基本语法和在Vivado中的应用展开,介绍了如何扩展甚至是定制FPGA设计实现流程后,引出了一个更细节的应用场景:如何利用Tcl在已完成布局布线
    发表于 11-18 18:26 5038次阅读
    <b class='flag-5'>Vivado</b>使用误区与进阶——在<b class='flag-5'>Vivado</b>中<b class='flag-5'>实现</b><b class='flag-5'>ECO</b><b class='flag-5'>功能</b>

    eco模式的好处以及坏处_eco模式会引起积碳是真的吗

    现在很多车辆都配置了ECO模式的节油功能,通过调节发动机和变速箱的工作来主动实现节油效果的,那么eco模式开着好处和坏处都有什么?eco模式
    发表于 12-14 10:22 7w次阅读
    <b class='flag-5'>eco</b>模式的好处以及坏处_<b class='flag-5'>eco</b>模式会引起积碳是真的吗

    如何在Vivado中执行工程变更命令 (ECO)

    了解如何在Vivado中执行工程变更单(ECO)。 本视频将向您介绍ECO的常见用例,我们推荐的完成ECO的流程,优势和局限性,并将演示功能
    的头像 发表于 11-21 06:40 4721次阅读
    如何在<b class='flag-5'>Vivado</b>中执行工程变更命令 (<b class='flag-5'>ECO</b>)

    使用ECO进行调试有哪些好处

    了解使用Vivado 2016.1中引入的ECO流程进行调试的好处,以及在ECO布局中替换ILA调试探针所需的步骤。
    的头像 发表于 11-29 06:01 3358次阅读
    使用<b class='flag-5'>ECO</b>进行调试有哪些好处

    关于Vivado 2019.1的Dashboard功能详解

    关于Vivado Dashboard的功能可阅读这篇文章(Vivado 2018.3这个Gadget你用了吗)Vivado 2019.1的Dashboard
    的头像 发表于 06-12 14:49 7764次阅读
    关于<b class='flag-5'>Vivado</b> 2019.1的Dashboard<b class='flag-5'>功能</b>详解

    一起体验VivadoECO流程

    带大家一起体验一下VivadoECO流程,以vivado自带的Example Design为例, 直接用TCL命令修改网表,在正常的寄存器路径之间加一级LUT。 1. 打开Vivado
    的头像 发表于 10-26 09:45 3429次阅读
    一起体验<b class='flag-5'>Vivado</b> 的<b class='flag-5'>ECO</b>流程

    带大家一起体验一下VivadoECO流程

    这里带大家一起体验一下VivadoECO流程,以vivado自带的Example Design为例, 直接用TCL命令修改网表,在正常的寄存器路径之间加一级LUT。
    的头像 发表于 11-29 11:04 3921次阅读
    带大家一起体验一下<b class='flag-5'>Vivado</b>的<b class='flag-5'>ECO</b>流程

    详解Xilinx FPGA的ECO功能

    ECO 指的是 Engineering Change Order ,即工程变更指令。目的是为了在设计的后期,快速灵活地做小范围修改,从而尽可能的保持已经验证的功能和时序。ECO 是从 IC 设计领域继承而来,
    的头像 发表于 08-02 09:18 3076次阅读
    详解Xilinx FPGA的<b class='flag-5'>ECO</b><b class='flag-5'>功能</b>

    什么是DFT友好的功能ECO呢?

    DFT是确保芯片在制造过程中具有可测试性的一种技术。DFT友好的ECO是指在进行ECO时, 不会破坏芯片的DFT功能或降低DFT覆盖率的设计方法。
    的头像 发表于 03-06 14:47 1493次阅读

    什么是ECOECO的应用场景和实现流程

    ECO指的是 Engineering Change Order ,即工程变更指令。目的是为了在设计的后期,快速灵活地做小范围修改,从而尽可能的保持已经验证的功能和时序。
    的头像 发表于 04-23 09:06 3044次阅读
    什么是<b class='flag-5'>ECO</b>?<b class='flag-5'>ECO</b>的应用场景和<b class='flag-5'>实现</b>流程