本文转载自:<span id="profileBt"><a href="https://mp.weixin.qq.com/s/65MqPoFc0rj-fQbsZBT8DA">瓜大三哥微信公众号</a></span&…;
ECO 指的是 Engineering Change Order ,即工程变更指令。目的是为了在设计的后期,快速灵活地做小范围修改,从而尽可能的保持已经验证的功能和时序。ECO 是从 IC 设计领域继承而来,Vivado上 的 ECO 便相当于 ISE 上的 FPGA Editor。
1.ECO的用途
<li>修改 ILA 或者 VIO 的调试探针</li>
<li>将一个内部网络路由到外部探针</li>
<li>修复逻辑错误等</li>
2.ECO 流程
打开已经实现的设计,修改网表后,如果设计未完全布局,请运行“增量布局”。否则,可以直接跳至增量布线。然后可以保存更改到新的检查点并编写新的编程和调试探针文件,打开 硬件管理器对设备进行编程。
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180278-1.p…; alt=""></center>
3.ECO 工程实例
在 vivado 中一个工程在生成 bit 流过程中会在 implementation 阶段产生三个 dcp 文件,分别是 *_opt.dcp, *_place.dcp, *_route.dcp;如果工程需要添加一些 cell ,可以在*_place.dcp中添加,如果需要固定布线,只是微调某些net,则使用*_route.dcp。
3.1 修改 ila 信号
本次实例采用*_route.dcp。
3.1.1 断开 net
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180321-2.p…; alt=""></center>
<pre>disconnect_net -net u_ila_0_axis_rx_tlast -objects [list {u_ila_0/probe8}]</pre>
<li>u_ila_0_axis_rx_tlast 的 net 名</li>
<li>Objects 后面的 pin 脚</li>
该命令是为了将某一 net 断开
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180322-3.p…; alt=""></center>
3.1.2 连接新的net
<pre>connect_net -hierarchical -net {u_ila_0_axis_rx_tdata[47]} -objects [list {u_ila_0/probe8}]</pre>
该命令是为了将某一 net 连接到某一 object
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180335-4.p…; alt=""></center>
3.1.3 将原来的 net 布线 unroute
<pre>route_design -unroute -net [get_nets u_ila_0_axis_rx_tlast]</pre>
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180337-5.p…; alt=""></center>
3.1.4 重新 route 新的 net
<pre>route_design -net [get_nets {u_ila_0_axis_rx_tdata[47]}]</pre>
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180338-6.p…; alt=""></center>
3.1.5 重新 route 新的 net
<pre>route_design -net [get_nets {u_ila_0_axis_rx_tdata[47]}]</pre>
查看布线状态
<pre>report_route_status</pre>
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180339-7.p…; alt=""></center>
3.1.5 生成 bit 流
<pre>write_bitstream aurora_test_route.bit -force</pre>
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180341-8.p…; alt=""></center>
3.2 将内部网络布线到另一个cell
本次实例采用*_place.dcp。
3.2.1 断开 net
<pre>disconnect_net -net u_ila_0_axis_rx_tlast -objects [list {u_ila_0/probe8}]</pre>
3.2.2 创建 cell
<pre>startgroup
create_cell -reference LUT1 {LUT1}
set_property init 2'h3 [get_cells { {LUT1}}]
endgroup
create_cell -reference VCC {VCC}</pre>
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180342-9.p…; alt=""></center>
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180344-10…; alt=""></center>
3.2.3 创建 net
<pre>startgroup
create_net {LUT1_IO}
LUT1_IO
connect_net -hierarchical -net {LUT1_IO} -objects [list {LUT1/I0}]
endgroup</pre>
<pre>
startgroup
create_net {LUT1_O}
LUT1_O
connect_net -hierarchical -net {LUT1_O} -objects [list {LUT1/O}]
endgroup</pre>
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180345-11…; alt=""></center>
3.2.4 连接 net
将LUT1的输入连接到 VCC ,输出连接到 ila 的 probe8。
<pre>connect_net -hierarchical -net {LUT1_IO} -objects [list {VCC/P}]
connect_net -hierarchical -net {LUT1_O} -objects [list {u_ila_0/probe8}]</pre>
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180346-12…; alt=""></center>
3.2.5 implementation & bitstream
<pre>
place_design
route_design
write_bitstream aurora_test_place.bit -force</pre>
<center><img src="http://xilinx.eetrend.com/files/2021-04/wen_zhang_/100091895-180348-13…; alt=""></center>
4.参考文献
1.《ug904-Vivado Design Suite User Guide P-143:Vivado ECO Flow》
<pre>chrome-extension://ibllepbpahcoppkjjllbabhnigcbffpi/https://www.xilinx.com/support/documentation/sw_manuals/xilinx2016_1/ug… </pre>
2.《ug835- Vivado Design Suite Tcl Command Reference Guide》
<pre>chrome-extension://ibllepbpahcoppkjjllbabhnigcbffpi/https://www.xilinx.com/support/documentation/sw_manuals/xilinx2012_2/ug…;