在Vivado中实现ECO功能
关于Tcl在Vivado中的应用文章从Tcl的基本语法和在Vivado中的应用展开,继上篇《用Tcl定制Vivado设计实现流程》介绍了如何扩展甚至是定制FPGA设计实现流程后,引出了一个更细节的应用场景:如何利用Tcl在已完成布 什么是ECO
ECO指的是Engineering Change Order,即工程变更指令。目的是为了在设计的后期,快速灵活地做小范围修改,从而尽可能的保持已经验证
但与FPGA Editor不同,Vivado中的ECO并不是一个独立的界面或是一些特定的命令,要实现不同的ECO功
ECO的应用场景和实现流程
ECO的应用场景主要包含:修改cell属性、增减或移动cell、手动局部布线。还有一些需要多种操作配
针对不同的应用场景,Vivado中支持的ECO实现方式也略有区别。有些可以用图形界面实现,有些则只能
ECO的实现流程如下图所示:
第一步所指的Design通常是完全布局布线后的设计,如果是在工程模式下,可以直接在IDE中打开实现后
第二步就是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输出时钟的相移进行修改。对于这种应用,
移动/交换cells
移动/交换cells是对FF/LUT进行的ECO操作中最基本的一个场景,目前也只有这种情况可以通过图
具体操作方法也相当简便,要互换cells位置的情况下,只要在Device View上选中需要的那两个cells,如上图所示的两个FFs,然后右键调出菜单,选择Swap Locations即可。若要移动cells则更简单,直接在图中选中FF拖移到新的位置即可。
局部布线后一定要记得在Tcl Console中使用report_route_status命令检查布线情况,确保没有未完成布线(un
如果换个稍复杂些的Tcl命令配合图形化显示,更加直观的同时,也可以方便右键调出命令进行针对性的局部布
手动布线
手动布线是一种非常规的布线方式,一次只能针对一根net在图形化界面下进行。所谓手动布线,除了完全手动
在Device View中选择一根没有布线或是预先Unroute过的net(显示为红色高亮),右键调出菜单并选择En
复杂的ECO场景
篇幅过半,一直在铺垫,其实最有实践意义的ECO还没提到。相信大部分用户最怀念FPGA Editor中的一个功能就是probe了,如何快速地把一根内部信号连接到FPGA管脚上,无需重新布局
其实这样类似的功能在Vivado中一直支持,唯一的问题是暂时还没有图形化界面可以一键操作(相关开发工
Tcl操作命令
在UG835中把Vivado支持的Tcl命令按照Category分类,这些列于Netlist目录下的命令就是实现
通常涉及到增减cells的ECO基本分为三步实现:首先用create_cell / create_net 等创建相关cell和/或net,然后用disconnect_net / connect_net 等命令修正因为cell和net的改动而影响到的连接关系,最后用route_design加选项完成局部
不同的Vivado版本对此类ECO修改有稍许不同的限制,例如在2014.1之后的版本上,需要在改变c
具体操作上可以根据Vivado的提示或报错信息来改动具体的Tcl命令,但操作思路和可用的命令相差无几
Add Probe
这是一个在Vivaod上实现probe功能的Tcl脚本,已经写成了proc子程序,简单易懂。可以直接
该脚本已经在Vivado2014.3和2014.4上测试过,一次只能完成一个probe的添加,而且必
由此可见,用Tcl来实现的ECO虽然不及图形化界面来的简便直观,但是带给用户的却是最大化的自由。完全
ECO在Vivado上的发展
经过了两年多的发展,在Vivado上实现ECO已经有了多种方式,除了前面提到的图形化上那些可用的技巧
这个add_probe是在上述addProbe例子的基础上扩展而来,不仅可以新增probe,而且可以
此外,Tcl Store上还有很多其它好用的脚本,欢迎大家试用并反馈给我们宝贵意见。虽然里面关于ECO的脚本还很少
总体来说,ECO是一个比较大的命题,因为牵扯到的改动需求太多,其实也很难限制在一个GUI界面中实现。
Ally Zhou 2015-2-9 于 Xilinx San Jose |
|