NanDigits的GOF ECO支持用“重新综合的网表”来自动ECO“APR网表”的流程。
如下图,在这个流程下,用户修改RTL后只需要重新跑一下综合脚本,把重新综合的网表和之前一版的APR网表一起送进GOF ECO即可。GOF ECO会自动分析两个网表的差异,产生最小的Patch,并输出ECO脚本或ECO网表。后端工具,如Innovus、ICC/ICC2拿到ECO脚本或者ECO网表后,做ECO Route。
网表ECO流程
下面这个示例,演示了怎样根据“重新综合的网表(参考网表)”来自动修改“APR网表(实现网表)”,并让他们逻辑等价。具体来说,GOF ECO会检查参考网表和实现网表的顶层及其子模块的逻辑等价性,定位出不等价的点,然后产生最小门数的补丁,把补丁应用于实现网表,使之与参考网表等价。
自动ECO脚本示例(注意看注释):
use strict;
undo_eco; # 清除之前的ECO操作
setup_eco("eco_example"); # 设置ECO的名字
read_library("art.90nm.lib"); # 读入lib库
# 读入重新综合的网表
read_design("-ref", "reference.gv");
# 读入需要ECO的实现网表
read_design("-imp", "implementation.gv");
set_top("topmod"); # 设置顶层模块
set_ignore_output("TEST_SO*"); # 避免测试环路影响ECO
set_pin_constant("TEST_EN",0); # 避免修改到测试逻辑
# 设置高ECO等级,注释掉可以做快速试验
set_high_effort;
# 修复顶层和子模块
fix_design;
report_eco(); # 输出ECO报告
write_verilog("eco_verilog.v"); # 输出ECO后的Verilog网表
write_soce("eco_soce.tcl"); # 输出SOC Encounter格式的ECO Tcl脚本
exit; # 退出,或者注释掉此行进入互交调试
从Termial里运行上面的脚本:
gof -run auto_eco.pl
从ECO脚本可以看出,GOF ECO的流程非常简洁,“一个Button”搞定ECO。