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

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

3天内不再提示

详细描述和解释GOF ECO每一个步骤的实现方法和注意事项

roborobo_0706 来源:NanDigit 作者:NanDigits中国 2022-11-07 14:39 次阅读

GOF ECO介绍

GOF ECO是一款芯片网表功能ECO的软件。在项目中后期或流片之后,发现逻辑功能有BUG或者设计需求有变更时,不需要重走“综合 -> DFT -> APR”的完整流程,利用GOF ECO即可自动分析新旧两个版本的差异,并对APR网表进行局部修改。GOF ECO不仅大大缩短了芯片ECO的Turn-around时间,还大大提升了芯片复杂逻辑ECO的成功率。

GOF ECO流程

ca32fc1a-5e53-11ed-a3b6-dac502259ad0.png

如上图所示,当我们设计(RTL)上有改动,并充分仿真验证确认功能正确后,就可以开始网表ECO工作了。大致分为以下几个步骤:

首先,我们需要收集老设计的文件,并确认文件的完整性和准确性。

其次,对设计重新做综合,得到重新综合的网表(这一步可选)。

再次,用GOF LEC分析新设计与老设计的差异,确认这些差异是否合理。

然后,用GOF ECO做网表的ECO,并调整ECO方案和约束来获得最佳结果。

最后,在后端工具里实现ECO Place和ECO Route,完成逻辑功能ECO。

下面将详细描述和解释每一个步骤的实现方法和注意事项。

一、准备工作

准备工作的目的?

这些文件通常来自于不同的部门或组,我们要确保ECO所需文件的准确性,防止用错文件版本,确保后续ECO工作正常开展。

需要准备哪些文件?

需要提前收集的文件如下:

老设计

老RTL

老综合网表

老DFT网表和DFT约束文件

老APR网表(我们的ECO目标)

并对老设计做逻辑等价性检查(LEC),来确保收集到的文件和版本是正确的:

RTL vs 综合网表

综合网表 vs DFT网表

DFT网表 vs APR网表

二、重新综合(可选)

这一步是可选的,但我们建议做,因为新RTL与老APR网表中间经过了很多次优化,这些优化使得网表结构发生了巨大的变化,而这些变化会加大逻辑功能ECO的难度和准确性。对于超大规模设计,重新综合一次需要两三天或者一周,这个时候我们建议可以先忽略这一步。

一般来说,这一步我们用原有的综合脚本重新跑一次即可。

三、一致性检查

逻辑一致性检查结果的正确性和合理性是保证网表ECO效果的前提。GOF ECO正是利用一致性检查的技术来分析两个设计的差异,来找到应该修理的地方。如果一致性检查有虚假的不等价,GOF ECO就很可能会做一些无用的修改,会或多或少影响补丁的大小和ECO的成功率。

用GOF做一致性检查的流程如下:

ca548c40-5e53-11ed-a3b6-dac502259ad0.png

下面是参考代码:

# gof_lec.pl
use strict;


# 读入lib库
read_library("art.5nm.lib");
read_library("sram.lib");
read_library("analog.lib");


# RTL流程
my $rtl_flow = 1;
if($rtl_flow){


    # 设置define和include
    set_define("SYNTHESIS");
    set_define("NO_SIM");
    set_inc_dirs("/project/nd900/vlib/include", "/project/nd900/IPS/include");


    # 读入老RTL
    my @rtl_old = ("ref0.sv", "ref1.sv", "ref2.sv");
    read_rtl('-ref', @rtl_old);


    # 读入新RTL
    my @rtl_new = ("imp0.sv", "imp1.sv", "imp2.sv");
    read_rtl('-imp', @rtl_new);


    # 设置顶层模块
    set_top("topmod");


    # 对比RTL
    rtl_compare;
}


# 读入重新综合的网表
read_design("-ref", "reference.gv");


# 读入老的APR网表
read_design("-imp", "implementation.gv");


# 设置顶层
set_top("topmod");


# 设置DFT约束
set_ignore_output("scan_out*");
set_pin_constant("scan_enable", 0);
set_pin_constant("scan_mode", 0);


# 做一致性检查
run_lec();

运行gof_lec.pl的脚本,分析不等价的点是否合理:

gof -run gof_lec.pl

先确认log里unmapped点是否合理。当设计里新加了dff或者输出端口,GOF LEC就会分析出这些新加的点并报出来。

如果有不合理的点报出来,就要debug找到原因:

首先,可以与formality或者conformal的LEC结果做对比,来排除用错文件、约束设置错误等问题。

然后,可以用GOF的电路图的方式来调试:

用start_gui来启动GUI

在网表里找到不等价的点,右击在电路图上显示

也可以按ctrl-g来快速加载

常见的电路图调试方法:

在电路图中显示老设计和新设计的fanin,查看fanin是否一样,这是最容易发现问题的地方

然后,同时选中两个设计的时钟pin或复位pin,查看两个设计的时钟和复位是否等价

再排查scan enable pin的设置

最后,逐步trace出两个设计的逻辑锥的电路,从后向前,寻找不等价的点。

ca6e25f6-5e53-11ed-a3b6-dac502259ad0.png

四、PreMask网表ECO

在确认一致性检查报出的不等价的点都是合理的情况下,就可以正式开始ECO了。

参考脚本如下:

# gof_eco.pl
use strict;


undo_eco(); #<-- 撤销之前的改动
setup_eco("eco20221102");  #<-- 设计ECO的名字,GOF ECO输出网表中新加的cell和连线会自动加上这个前缀


# 读入lib库
read_library("art.5nm.lib");
read_library("sram.lib");
read_library("analog.lib");


# RTL流程
my $rtl_flow = 1;
if($rtl_flow){


    # 设置define和include
    set_define("SYNTHESIS");
    set_define("NO_SIM");
    set_inc_dirs("/project/nd900/vlib/include", "/project/nd900/IPS/include");


    # 读入老RTL
    my @rtl_old = ("ref0.sv", "ref1.sv", "ref2.sv");
    read_rtl('-ref', @rtl_old);


    # 读入新RTL
    my @rtl_new = ("imp0.sv", "imp1.sv", "imp2.sv");
    read_rtl('-imp', @rtl_new);


    # 设置顶层模块
    set_top("topmod");


    # 对比RTL
    rtl_compare;
}


# 读入重新综合的网表
read_design("-ref", "reference.gv");


# 读入老的APR网表
read_design("-imp", "implementation.gv");


# 设置顶层
set_top("topmod");


# 设置DFT约束
set_ignore_output("scan_out*");
set_pin_constant("scan_enable", 0);
set_pin_constant("scan_mode", 0);


# 不需要再次做一致性检查
# run_lec();


# 执行ECO
fix_design(); 
report_eco();


# 确认eco后的等价性,如果等价,逻辑ECO就基本结束了
run_lec();


# 写出eco网表和脚本
write_verilog("eco.gv");
write_soce2("eco.tcl");

运行gof_lec.pl的脚本,分析不等价的点是否合理:

gof -run gof_eco.pl

前面大部分的设置与一致性检查的脚本是相同的,只是把最后run_lec()换成fix_design()。在fix_design的时候,GOF ECO会先自动做一次LEC,分析出不等价的点,然后对不等价的点做eco修改。

在ECO结束后,通过report_eco来确认改动大小,可以看到哪些模块增加了多少cell、删除了多少cell、改动多少根连线。我们需要根据ECO report来判断本次ECO的改动是否后端能够实现。

再通过run_lec()确认一下修改之后是否完全等价,以防止遇到一些特殊情况,GOF ECO没有能完全修复。当然,也需要用业界认可的LEC工具,如formality或者conformal,来确认最终的ECO是否正确。如果不等价,可以用GOF电路图的方式来进一步分析和解决。

最后,写出ECO网表和脚本。

五、PostMask网表ECO

当流片回来测试后发现有问题时,就需要进行PostMask ECO。这时只能利用提前放置Spare Cells来改金属层。与PreMask的流程区别如下:

#read_library
# read_design
# run_lec
#fix_design
my $postmask = 1;
if($postmask){


    # Postmask时读入def文件
    read_def("topmod.def");


    # 设置sparecell列表
    get_spare_cells("spr_1/spr_gate*");


    # 设置约束
    set_constraints("-num", "and<3,or<3");


    # 映射到sparecell
    map_spare_cells();


    # 查看ECO报告
    report_eco();
}


# 写出eco网表和脚本
write_verilog("eco.gv");
write_soce2("eco.tcl");

在做postmask常常遇到附近资源不够或者连线比较拥挤,这时可以调整set_constraints()的设置,多尝试几种方案。

六、后端工具里工作

后端工具里的操作和流程不属于这份入门教程的范围,但我们有一些有用的建议:

在PreMask ECO流程里,后端工具尽量可以让插入新的Cell,这样ECO时所有类型的stdcell都可以用,可以简化网表修改,也有利用于时序和DRC收敛。

在PostMask ECO时,应该尽可能地前后端工程师多沟通,一起确定最终的ECO方案。

在遇到资源紧张时,应当与客户、产品经理、项目经理等人员多沟通,给ECO条目排一排优先级,优先解决更重要的问题。并适当地放弃一些复杂的、困难的ECO。






审核编辑:刘清

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

    关注

    1

    文章

    377

    浏览量

    59077
  • DFT
    DFT
    +关注

    关注

    2

    文章

    219

    浏览量

    22471
  • GUI
    GUI
    +关注

    关注

    3

    文章

    611

    浏览量

    38813

原文标题:NanDigits GOF ECO入门教程

文章出处:【微信号:ExASIC,微信公众号:ExASIC】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32外部中断EXIT使用步骤是什么?有哪些注意事项

    STM32外部中断EXIT使用步骤是什么?有哪些注意事项
    发表于 11-17 07:21

    RTC实时时钟详细描述

    、RTC的概述RTC就是实时时钟,详细英文 Real Time Clock。二、详细描述1.使用2.中断配置注意事项三、程序设计)RTC
    发表于 01-13 07:05

    Proteus仿真单片机串口的注意事项和实物调试注意事项

    蓝牙的使用,Proteus仿真单片机串口的注意事项和实物调试注意事项。玩转单片机串口详细零基础版学习单片机、Proteus仿真单片机串口定要看,
    发表于 02-23 06:57

    光伏系统设计思路及注意事项

    光伏系统设计思路及注意事项:本文结合光伏系统设计过程中遇到的问题,总结光伏系统设计流程和设计思路,阐述了设计过程中每个步骤每一个细节需主要考虑的问题,并提
    发表于 06-08 11:56 53次下载

    摇表的接线和使用方法注意事项

    本文介绍摇表的接线和摇表使用方法及摇表注意事项
    发表于 01-28 09:33 1.9w次阅读

    TCL各机芯软件升级操作步骤注意事项

    TCL各机芯软件升级操作步骤注意事项
    发表于 09-06 15:02 18次下载

    stm32 fft库使用注意事项

    stm32 fft库使用方法注意事项
    发表于 11-02 10:55 0次下载

    PowerPCB到Allegro的转换步骤注意事项

    PowerPCB到Allegro的转换步骤注意事项
    发表于 02-15 15:17 0次下载

    全自动端子机操作步骤_注意事项及保养

    本文主要介绍了全自动端子机操作步骤注意事项及保养。
    发表于 06-05 08:00 0次下载

    EMC现场测试的一般步骤注意事项有哪些?

    emc现场测试的一般步骤注意事项有哪些?
    的头像 发表于 06-26 09:22 1647次阅读

    安全光幕选型方法以及注意事项

    安全光幕选型方法以及注意事项
    的头像 发表于 06-28 14:35 463次阅读
    安全光幕选型<b class='flag-5'>方法</b>以及<b class='flag-5'>注意事项</b>

    安全光幕选型方法以及注意事项

    安全光幕选型方法以及注意事项
    的头像 发表于 07-06 13:59 488次阅读
    安全光幕选型<b class='flag-5'>方法</b>以及<b class='flag-5'>注意事项</b>

    java中equals()方法注意事项

    会有不同的注意事项。在本文中,我们将详细讨论equals()方法注意事项,并解释如何正确使用它来比较两个对象。 首先,我们来看一下equa
    的头像 发表于 11-17 16:59 315次阅读

    测绝缘电阻的正确方法,有哪些步骤注意事项

    测绝缘电阻的正确方法,有哪些步骤注意事项 绝缘电阻测试是电气工程中常用的一项安全检测,用于评估电器设备或电气线路的绝缘性能。正确的绝缘电阻测试方法能够帮助提前发现潜在的电气故障,并采
    的头像 发表于 12-15 10:43 2216次阅读

    使用示波器探头的步骤、技巧和注意事项

    使用示波器探头的步骤、技巧和注意事项 示波器是一种用于测量电信号波形的仪器,通过连接示波器探头,可以将电压信号引入示波器进行测量。正确使用示波器探头是确保准确和安全测量的关键。本文将详细介绍
    的头像 发表于 01-17 11:32 784次阅读