本篇主要介绍一下conformal ECO的flow。
ECO 可以分成下面两种:
pre_mask ECO
指的是在chip mask 没有制作完成时ECO, 工具会假设标准单元库中的所有的cell 有可以用于实现ECO。post-mask ECO
指的是chip mask 已经制作完成, 工具会指定spare cell 来完成ECO
spare cell 顾名思义就是备用的cell, 用于function ECO 和 metal change用的, 通常在PR阶段插入, 并且有指定的物理位置和timing 要求。
输入文件的要求
- 必需的文件包括, 网表, def, lef 文件等:
- 这些文件是recommend。
Flattened ECO flow
Flattned ECO是Conformal 比较推荐的Flow。
设置ECO mode
1
2set_flatten_mode -eco
set_flatten_mode -enable_analyze_hier_compare使用analyze hier 提供额外的选项, 比如:
1
2
3
4
5
6analyze hier -do_file eco_log.do \
-ECOaware \
-CONSTranints -NOEXact_pin_match \
-FUNCTION_Pin_mapping \
-INPUT_OUTPUT_Pin_equivalence \
-verbose -usage -replace开始比较flattened design
1
2add compare points -all
compare使用下面的命令将non-equivalent point 分解到sub module
1 | compare eco hierarchy |
- 使用下面的命令创建必要的patch
1 | analyze eco -hierarchical \ |
- apply patch and optimize patch
1 | apply patch -auto |
premask ECO flow
premask ECO flow 一般包含下面几个步骤:
- 比较旧的RTL 和旧的netlist, 这一步的比较结果应该是等价的。 可以添加一些约束,来关闭scan。
比如:
1 | add pin constraints 0 scan_enable -golden |
- 综合新版本的RTL。 需要注意的是: 尽量使用相同版本的DC, 综合tcl脚本
- 比较新版的RTL和新版的netlist, 这一步应该是等价的。
- 比较旧版的RTL和新版本的RTL, 这一步比较应该是非等价的。应该注意下面几点:
- X conversion 的设置: 新版RTL应该是‘Don’t care’; 旧版的RTL是’E’ , 在使用read design 命令时, 这样的设置已经是默认的了。
- 不要使用dynamic 的比较方式;
- 用vim -diff 查看一下RTL有哪些改动, LEC 的比较结果应该和RTL的改动是吻合的。
- 比较旧版本的netlist 和新版本的netlist。 no-equivalent module应该和第4步中是吻合的。
- 使用旧版的netlist 和新版本的netlist 创建ECO path file。
- apply patch, 并且产生ECO 网表。
- 使用 [optimize patch] 命令:
- 读入 SDC、 capacitance table、 和LEF文件, 见上面的命令;
- 映射和优化ECO patch file
- 检查ECO netlist
premask ECO flow 如下图所示:
postmask ECO flow
postmask 的flow 和premask类似, 只不过是在apply patch 之前要指定spare cell。