前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Vivado中实现ECO功能

在Vivado中实现ECO功能

作者头像
瓜大三哥
发布2018-02-26 10:41:40
3.1K0
发布2018-02-26 10:41:40
举报
文章被收录于专栏:瓜大三哥

应用场景:如何利用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的实现流程如下图所示:

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

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

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

修改属性

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

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

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

移动/交换cells

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

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

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

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

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

Show_objects [get_nets * -hier -top_net_of_hierarchical_group

-filter {ROUTE_STATUS!=ROUTED&&ROUTE_STATUS!=INIRASITE}]

手动布线

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

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

Add Probe

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

Vivado %addProbe inst_1/tmp_q[3] D9 LVCMOS18 my_probe_1

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

用户可以根据自己的需要扩展这个Tcl脚本,也可以仿照这个Tcl的写法来实现其他的ECO需求。例如文章开始举例时提到的一个将RAMB输出一级的FF拉出到fabric上实现的场景,基本的实现方法和思路也类似:先将RAMB的输出口REG的属性改为0,然后创建一个新的FF,将其输入与原本RAMB 输出驱动的cell 连接,并完成FF 的时钟和复位端的正确.接,然后选择合适的位置放置这个新的FF,最后针对新增加的nets 局部布线。

由此可见,用Tcl 来实现的ECO 虽然不及图形化界面来的简便直观,但是带给用户的却是最大化的自由。完全由用户来决定如何修改设计,那怕是在最后已经完成布局布线时序收敛的结果上,也能直接改变那些底层.元的连接关系,甚至是增减设计。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜大三哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是ECO?
  • ECO的应用场景和实现流程
  • 修改属性
  • 手动布线
  • Add Probe
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档