之前听说过一句话,没有修过ECO的人生是不完整的。最近就给我整得再次完整了。。。。。。
最近赶项目,RTL freeze之后,后仿发现出了bug(还好拦下来了,不然头更大),于是做了一次function ECO,记录下流程。。。。项目还是delay了。。。。。永远记得checklist一定得过!!!!
RTL freeze就是说,从今天起,大家谁也不能再修改RTL了。RTL freeze是一个分水岭。在freeze之前,你仿真也好,看代码也好,FPGA验证也好,发现的任何bug,都可以通过修改RTL的方式进行直接更正。但是freeze之后,被freeze的RTL将会进行综合,STA,然后送给后端人员,做floor plan,电源综合,时钟综合,布局布线等等。这些后端流程都是极其耗时的,而且通常不可逆的。
闲话扯完了,下面进入正题。
Conformal是Cadence家的一款形式验证驱动的等效、低功耗和ECO解决方案,使用可为用户提供独立的等效性检查解决方案,支持从RTL到P&R的最终网表验证设计。要做ECO的话需要Conformal ECO XL 或 GXL license。目前主要大厂都用它做ECO。(S家的formality主要是我不知道如何自动生成ECO脚本,不过去年好像出了视频,年后抽空学习一下。。。。)
ECO的介绍就不多提了,见:
数字后端——ECO_沧海一升的博客-CSDN博客对ECO(engineering change order)进行简单介绍https://blog.csdn.net/qq_21842097/article/details/121717450 Conformal支持Flattened ECO Flow和Hierarchical ECO Flow。这里主要说明Flattened ECO Flow,这也是官方推荐的。Flattened下,工具会将 ECO 分析重点放在从平面比较中确定的非等效关键点上,且更容易设置,所有 ECO 补丁都可以用一个命令创建。
FLOW如下:
1、使用 SET ECO OPTION -flat 命令(setup mode)指定运行 FEF 流:
SET FLATTEN MODEL -ECO
SET FLATTEN MODEL -ENABLE_ANALYZE_HIER_COMPARE
它还会自动将以下选项添加到 ANALYZE HIER_COMPARE 命令
-CONstraints
-NOEXact_pin_match
-FUNCTION_Pin_mapping
-INPUT_OUTPUT_Pin_equivalence
-THRESHOLD 0 //便于工具确定所有模块边界
2、为ANALYZE HIER_COMPARE命令增加额外指令。
3、使用 ADD COMPARE POINTS -all 和 COMPARE 命令开始flatten设计之间的比较。 这里主要是确定非一致性的关键点。
4、使用 COMPARE ECO HIERARCHY 命令根据模块边界(由步骤 1 确定)将非一致性点(在步骤 2 中确定)分解为其子模块。
5、使用 ANALYZE ECO -hierarchical 命令创建所有必要的patches。
6、分别使用 APPLY PATCH 和 OPTIMIZE PATCH 命令应用和优化patches。
下面主要说下function ECO(pre-mask)的流程,这次我跑的就是这个,只能说不幸中的万幸吧。。。 流程如下:
1、将旧 RTL 与旧网表进行比较。应该结果是等价的,这里需要通过添加扫描约束来禁用扫描。
2、综合修改后的RTL。一般来说用与创建旧网表相同的综合工具、版本和脚本。 尽量减少任何更改。
3、将新 RTL 与新网表进行比较。应该结果是等价的。
4、将旧 RTL 与新 RTL 进行比较。结果是不等价的。这里需要注意的是,新的RTL读入为Golden design,旧的RTL读入为Revised design。
5、比较旧网表和新网表。
6、使用旧网表和新网表创建 ECO patch文件。在验证了第 5 步中的所有非等价点都是由功能更改引起的之后,使用 Conformal 为每个非等价模块创建一个patch文件。 在此步骤中使用的任何 ADD ECO PIN 命令也必须用于第 7 步和第 8 步。如果在创建 ECO patch 文件期间进行了任何展平,则必须对第 7 步和第 8 步执行相同的展平。
7、应用patch并写出 ECO 网表。在分析所有 ECO 模块后使用patch文件创建 ECO 网表,然后写出尚未映射或优化的网表。
8、优化补丁。这一步有点类似综合。
9、ECO网表进行等价性检查。一致性检查必不可少。
还是看脚本比较直接。ANALYZE ECO 命令会为每个非等价模块创建patch文件。 patch文件定义了一个patch模块并包含将改变设计功能的更改。 patch模块名称是附加了 _eco 的原始非等价模块名称。我这里主要是对比了两个网表,然后进行处理:
set log file eco.log -replaceset flatten model -eco
set flatten model -gated_clock
set flatten model -enable_analyze_hier_compareread library xxx.lib -replace -libertyread design r2.v -golden -replace
read design r1.v -revised -replace
//===================================
//等价的写法
//set x conversion e -both
//read design r1.v -golden -replace
//read design r2.v -revised -replace
//===================================report design data
report black boxuniquify -all -nolibrary -revised
add module attribute mod* -eco_module -noflatten -bothset system mode lec
analyze hier -eco_aware
add compare point -all
compare
compare eco hierarchy
analyze eco patch.v -preserve_clock -replace -hierarchical
//analyze 有-ecopin_dofile选项来增加eco pins,这次没用到set system mode setup
apply patch -golden -keephierarchy -auto
optimize_patch -workdir <working_directory> \-library <lib_file_list> \-sdc <sdc_filename> \-instancenaming “ECOinst_%d” \-netnaming “ECOnet_%d” \-sequentialnaming “ECOreg_%s” \-synexec “genus” \-verbose
report eco changes -script -file xxx.script -replace
write eco design -newfile eco.v -replace -report ECOprelogics.rpt