1. 本章目标
本节主要练习 Innovus 中的 placement 流程:
1 | 导入设计与 floorplan |
核心目标:
- 跑通 placement;
- 理解 placement 前读入 scan DEF 的作用;
- 学会查看 placement 后的 density / routing overflow;
- 掌握 scan chain DEF 的读入与写出;
- 掌握保存与恢复设计的方法。
2. 导入设计和 Floorplan
前面 lab 已经完成过设计和 floorplan 的导入,本节是在已有设计基础上继续做 placement。
导入完成后的界面示意如下:
3. 查看 Place Mode
加载好设计和 floorplan 后,先查看当前 placement 设置。
命令
1 | getPlaceMode |
作用:
查看当前 Innovus 中所有 placement 相关设置。
工具会输出当前的 place mode 参数:
其中很多选项是工具默认值,不需要全部背下来,常用选项在项目中慢慢积累即可。
例如:
1 | place_global_timing_effort = medium |
表示工具在 global placement 阶段优化 timing 的力度是中等。
如果设计 timing 较紧,可以考虑提高优化强度:
1 | setPlaceMode -place_global_timing_effort high |
4. Scan DEF 读入
如果综合或 DFT 阶段写出了 scan chain 的 DEF 文件,可以在 placement 前读入。
命令
1 | defIn scan_input.def |
作用:
在 placement 前读入 scan chain 信息,让 Innovus 知道 scan chain 的结构和顺序。
示意图:
5. Scan 与 Scan DEF 简要理解
5.1 Scan 是什么?
scan 是 DFT(Design For Test,可测性设计)中的技术,用于提高芯片制造后的可测试性。
普通寄存器加入 scan 功能后,可以被串成扫描链:
1 | scan_in → scan flop1 → scan flop2 → scan flop3 → scan_out |
这样测试机可以:
- 通过
scan_in控制内部寄存器状态; - 通过
scan_out观察内部寄存器结果。
5.2 Scan Chain 的两个核心能力
| 能力 | 含义 |
|---|---|
| 可控性 Controllability | 通过 scan_in 控制内部寄存器 |
| 可观测性 Observability | 通过 scan_out 读出内部寄存器 |
测试流程可以简单理解为:
1 | 1. 打开 scan enable,进入 scan 模式 |
5.3 Scan DEF 是什么?
scan_input.def 是一个保存 scan chain 信息的 DEF 文件。
它主要记录:
- 设计中有几条 scan chain;
- 每条 scan chain 的入口
scan_in; - 每条 scan chain 的出口
scan_out; - 每条 scan chain 经过哪些 scan flop;
- scan flop 的连接顺序;
- 哪些 segment 可以 reorder,哪些顺序固定。
5.4 为什么 placement 前要读入 Scan DEF?
Placement 阶段会决定 standard cell 和 scan flop 的物理位置。
如果提前读入 scan DEF,Innovus 就可以知道:
1 | 哪些 flop 属于同一条 scan chain; |
这样工具可以在摆放时优化 scan 线:
- 减少 scan 线长度;
- 减少 scan 线来回穿越芯片;
- 降低 routing congestion;
- 改善后续 routing 质量;
- 便于后续 scan chain reorder。
6. scan_input.def 常见字段
6.1 SCANCHAINS
1 | SCANCHAINS 2 ; |
表示设计中有 2 条 scan chain。
6.2 START PIN
1 | + START PIN scan_in_1 |
表示该 scan chain 的输入端口是 scan_in_1。
6.3 STOP PIN
1 | + STOP PIN scan_out_1 ; |
表示该 scan chain 的输出端口是 scan_out_1。
6.4 ( IN SI ) ( OUT Q )
1 | DTMF_INST/SPI_INST/bit_cnt_reg_0 ( IN SI ) ( OUT Q ) |
含义:
| 字段 | 说明 |
|---|---|
DTMF_INST/SPI_INST/bit_cnt_reg_0 |
scan flop 实例名 |
IN SI |
scan 输入端是 SI |
OUT Q |
scan 输出端是 Q |
可以理解为:
1 | 前一个 scan cell 的 Q → 当前 scan cell 的 SI |
6.5 FLOATING 和 ORDERED
| 关键字 | 含义 |
|---|---|
FLOATING |
scan cell 顺序可以由后端工具根据物理位置优化 |
ORDERED |
scan cell 顺序已经指定,工具应尽量保持 |
7. 写出 Scan Chain DEF 文件
如果需要从当前 Innovus / Encounter 数据库中写出 scan chain 信息,可以使用:
1 | defOutBySection -noNets -noComps -scanChains scan.def |
参数含义:
| 参数 | 作用 |
|---|---|
defOutBySection |
按 DEF section 导出内容 |
-noNets |
不导出普通 net |
-noComps |
不导出普通 component / cell |
-scanChains |
只导出 scan chain 信息 |
scan.def |
输出文件名 |
该命令生成的不是完整 DEF,而是只包含 SCANCHAINS 信息的 DEF 片段。
8. 执行 Placement
命令
1 | place_opt_design |
作用:
执行 placement,并在 placement 阶段做一定的 timing / congestion 优化。
执行完成后,可以从 log 中查看 placement 结果,例如 density、routing overflow 等。
Placement 后示意图:
9. 查看 Scan Chain 连接
可以在图形界面中高亮 scan chain:
1 | Place → Display → Scan Chain |
选择某条 scan chain,例如 scan1,工具会显示扫描链连接路径。
示意图:
作用:
- 查看 scan chain 是否连接正确;
- 观察 scan chain 是否绕线过长;
- 判断是否需要 scan chain reorder;
- 观察 scan chain 对 congestion 的影响。
10. Placement 结果分析
示例结果:
1 | Density: 48.590% |
10.1 Density
1 | Density: 48.590% |
表示布局密度 / 单元利用率约为 48.59%。
可以理解为:
1 | 标准单元面积 / 可放置区域面积 = 48.590% |
这个密度不算高,说明当前 placement 比较宽松,后续 routing、buffer 插入、CTS 和 ECO 还有一定空间。
10.2 Routing Overflow
1 | Routing Overflow: 0.02% H and 0.01% V |
Routing Overflow 表示布线资源不够用的比例。
简单理解:
1 | 需要走的线数量 > 可用 routing track 数量 |
就会产生 overflow。
10.3 H 和 V 的区别
| 符号 | 含义 | 对应方向 |
|---|---|---|
H |
Horizontal | 水平方向布线资源 |
V |
Vertical | 垂直方向布线资源 |
示意:
1 | H:水平方向 |
示例中:
1 | 0.02% H and 0.01% V |
说明横向和纵向布线资源都只有极少量溢出,congestion 很轻,整体 placement 结果比较健康。
相关界面示意:
11. Track / Routing Grid 笔记
11.1 Track 是什么?
track 可以理解为后端布线轨道。
后端 route 时,金属线不是随便画在任意位置,而是尽量沿着工艺规定好的 routing track 走。
1 | Horizontal tracks: |
11.2 Track 和 H / V Overflow 的关系
| 方向 | 含义 |
|---|---|
H overflow |
水平方向 routing track 不够用 |
V overflow |
垂直方向 routing track 不够用 |
如果某个方向 overflow 很高,说明该方向布线资源紧张。
11.3 Track 和 Placement Row 的区别
| 概念 | 作用 |
|---|---|
| Placement Row | 给 standard cell 摆放用 |
| Routing Track | 给 metal wire 布线用 |
简单理解:
1 | placement row:放 cell 的行 |
11.4 Macro 附近为什么容易拥塞?
RAM / SRAM / hard macro 通常会占用或阻挡部分 metal layer,导致其周围布线资源减少。
因此 macro 附近要重点关注:
- routing channel 是否足够;
- H / V overflow 是否明显;
- blockages 是否设置合理;
- pin access 是否困难。
12. 保存和恢复设计
12.1 保存设计
1 | saveDesign place_Opt.inn |
作用:
保存当前 Innovus 数据库,便于后续继续从该阶段恢复。
保存示意:
12.2 恢复设计
如果后续想恢复到该阶段,可以使用 restore 功能重新加载保存的设计数据库。
恢复示意:
13. 常用命令汇总
| 命令 | 作用 |
|---|---|
getPlaceMode |
查看当前 placement 设置 |
setPlaceMode -place_global_timing_effort high |
提高 placement timing 优化力度 |
defIn scan_input.def |
读入 scan chain DEF |
place_opt_design |
执行 placement 和优化 |
defOutBySection -noNets -noComps -scanChains scan.def |
写出 scan chain DEF |
saveDesign place_Opt.inn |
保存当前设计数据库 |
14. 一句话总结
本节主要完成 Innovus placement 流程:在导入设计和 floorplan 后,先查看 place mode,再在 placement 前读入 scan_input.def,使工具能够考虑 scan chain 结构并优化 scan 线。执行 place_opt_design 后,需要重点查看 density 和 routing overflow。示例中 density 为 48.590%,routing overflow 仅为 0.02% H 和 0.01% V,说明当前布局拥塞很轻,placement 结果较健康。