本章节目的是load进一个floorplan,跑通一个placement并完成post-placement的timing优化
导入设计和floorplan
这步之前的lab已经做过了,大家再按照下面的步骤再练习巩固下。
加载好设计和floorplan后,我们先获取下当前的placeMode,命令如下。
getPlaceMode
输入以上命令后,工具会输出当前的所有place mode。
这些变量很多都是工具默认值,而且这些变量不需要我们都背下来,需要在做项目过程中不断熟悉积累一些常用的选项。
这里比如place_global_timing_effort选项是medium,代表工具优化时序的力度是中等力度。如果对于timing比较紧的设计,我们可以通过setPlaceMode来给这个选项设上high值。
Scan def读入
如果综合有写出scan chain的def文件,在place之前我们可以读入scan chain的def来进一步优化congestion。
命令: defIn scan_input.def (innovus是通过defIn来读入这部分信息的)
Scan DEF 读入笔记
1. Scan Chain 是什么?
Scan Chain 是 DFT(Design For Test,可测性设计)中用于芯片测试的一种结构。
普通寄存器在加入 scan 功能后,会被串成一条或多条扫描链:
1 | scan_in → scan flop1 → scan flop2 → scan flop3 → scan_out |
这样测试时可以把测试数据一位一位扫入芯片内部,再从 scan_out 扫出来,用于检查芯片内部逻辑是否正常。
2. Scan DEF 是什么?
scan_input.def 是保存 scan chain 信息的 DEF 文件。
它通常包含:
| 内容 | 说明 |
|---|---|
| scan chain 数量 | 设计中有几条扫描链 |
| scan flop 列表 | 哪些寄存器属于 scan chain |
| scan chain 顺序 | scan flop 之间的连接顺序 |
| scan_in / scan_out | 扫描链的输入和输出端 |
| scan 相关约束 | 工具优化时需要参考的信息 |
简单理解:
Scan DEF 记录的是扫描链结构和扫描寄存器连接顺序。
3. 为什么要在 placement 前读入 Scan DEF?
Placement 阶段会决定 standard cell 和 scan flop 的物理位置。
如果在 placement 前读入 scan DEF,Innovus 就能知道:
1 | 哪些寄存器属于同一条 scan chain; |
这样工具可以在摆放时考虑 scan chain 的物理连接关系,从而优化 scan chain 的走线。
4. 读入 Scan DEF 的作用
读入 scan DEF 后,工具可以进一步优化:
| 作用 | 说明 |
|---|---|
| 减少 scan 线长度 | 避免 scan flop 之间距离太远 |
| 减少绕线 | 降低 scan 线来回穿越芯片的情况 |
| 优化 scan chain 物理顺序 | 让扫描链顺序更符合实际摆放位置 |
| 降低 congestion | 减少后续 routing 阶段的布线拥塞 |
| 提高后端实现质量 | 让 scan 相关连线更容易布通 |
5. 为什么能优化 congestion?
如果 scan chain 顺序不合理,可能出现:
1 | 左边 flop → 右边 flop → 左边 flop → 右边 flop |
这样 scan 线会在芯片中来回穿越,容易造成布线拥塞。
读入 scan DEF 后,工具可以结合物理位置优化成类似:
1 | 左边 flop → 左边 flop → 右边 flop → 右边 flop |
这样 scan 线更短,交叉更少,routing congestion 也会降低。
6. Innovus 中读入 Scan DEF 的命令
命令格式:
1 | defIn scan_input.def |
含义:
使用 Innovus 的
defIn命令读入scan_input.def文件。
其中:
| 部分 | 含义 |
|---|---|
defIn |
Innovus 中读入 DEF 文件的命令 |
scan_input.def |
综合或 DFT 工具生成的 scan chain DEF 文件 |
7. 什么时候需要读入 Scan DEF?
| 场景 | 是否需要 |
|---|---|
综合 / DFT 后生成了 scan_input.def |
建议读入 |
| 设计中有 scan chain | 建议读入 |
| 需要做 scan chain reorder | 建议读入 |
| 需要降低 scan 线布线拥塞 | 建议读入 |
| 设计没有 scan chain | 不需要 |
| Lab 没有提供 scan DEF | 可以跳过 |
| 只是普通功能设计,不涉及 DFT | 一般不用管 |
8. 简单总结
Scan DEF 记录了扫描链中 scan flop 的连接关系和顺序。
在 placement 之前读入:
1 | defIn scan_input.def |
可以让 Innovus 在摆放阶段考虑 scan chain 结构,从而减少 scan 线长度、降低布线拥塞,并提升后续 routing 的质量。
核心记忆:
1 | Scan DEF:记录 scan chain 信息; |