2. OpenROAD 流程初探:从 RTL 到 GDSII 的完整流程概览
说实话,很多刚接触 OpenROAD 的朋友,第一反应就是「这么多命令,我该先跑哪个?」。我个人习惯,拿到一个 RTL 设计后,先别急着敲键盘。你心里得有一张地图——从 RTL 到 GDSII,这条路到底怎么走。
OpenROAD 把整个后端流程拆成了几个核心阶段。每个阶段都有明确的目标和产出。今天我们就走一遍,看看每个环节到底在干什么。
2.1 整体流程:一张图看懂
下面这张图,是我自己画的一个简化版流程。每次带新人,我都会先让他们看这个。你想想看,从 RTL 到 GDSII,中间要经过多少道工序?
嗯,流程看起来是线性的。但实际项目中,你经常要往回跳。比如 placement 之后发现时序太差,你可能得回去改 floorplan。这很正常。
2.2 Floorplan:给芯片画地皮
Floorplan 是后端设计的起点。说白了,就是决定芯片多大、IO 放哪、哪些模块挨着哪些模块。
我记得第一次做 floorplan 时,觉得这步很简单——不就是画几个框吗?结果后来 placement 跑不动,才发现是 floorplan 的利用率设得太高了。教训啊。
Floorplan 阶段主要干这几件事:
- 定义芯片面积:设置 core 的宽高,IO 边界。
- 摆放 IO pads:根据芯片封装和信号流向,把 IO 放在合适的位置。
- 放置宏单元:比如 SRAM、PLL 这些大块头,手动摆好位置。
- 创建电源网络:也就是 PDN(Power Delivery Network),给芯片供电。
在 OpenROAD 里,floorplan 相关的命令主要是 initialize_floorplan 和 pdngen。我习惯先跑一个快速版,看看面积和形状是否合理,再细调。
2.3 Placement:把单元摆上去
Floorplan 定好了,接下来就是把成千上万个标准单元(比如与门、或门、触发器)放到 core 里。这就是 placement。
Placement 有两个阶段:
- Global placement:粗略地放,不考虑重叠,只考虑时序和拥塞。
- Detailed placement:精细调整,消除单元重叠,对齐到 row 上。
你可能会问:「为什么不分一次搞定?」嗯,因为全局布局要算的东西太多了。先粗后细,效率更高。OpenROAD 里用 global_placement 和 detailed_placement 两个命令。
2.4 CTS:让时钟同步
CTS 全称是 Clock Tree Synthesis,时钟树综合。它的目标很简单:让时钟信号同时到达所有触发器。
但实际做起来,一点都不简单。时钟信号要驱动几千上万个触发器,信号延迟和 skew(偏差)必须控制好。
OpenROAD 的 CTS 工具叫 TritonCTS。它会自动插入时钟缓冲器,构建一个树状结构。我常用的命令是 clock_tree_synthesis。
这里有个坑:CTS 之后,时钟网络的延迟会变。原来 placement 阶段算的时序,现在可能不准了。所以 CTS 之后必须重新做时序分析。
2.5 Routing:把线连起来
Routing 是后端流程里最耗时、最容易出问题的一步。它的任务是把所有单元之间的信号用金属线连起来。
Routing 也分两步:
- Global routing:规划大致的走线路径,分配 routing 资源。
- Detailed routing:具体到每一条线怎么走,检查 DRC(设计规则检查)。
OpenROAD 里用 global_route 和 detailed_route。我遇到过最头疼的问题,就是 detailed routing 之后 DRC 错误一大堆。后来发现是 global routing 阶段的资源分配不合理。
2.6 各阶段关键指标对比
为了方便你快速回顾,我把每个阶段的核心目标和常见问题整理成了表格:
| 阶段 | 核心目标 | 关键输出 | 常见问题 |
|---|---|---|---|
| Floorplan | 确定芯片面积、IO、宏单元位置 | die area, IO constraints, PDN | 利用率过高,导致后续拥塞 |
| Placement | 摆放标准单元,优化时序 | placed netlist, timing reports | setup 违例,congestion 区域 |
| CTS | 构建时钟树,控制 skew | clock tree, skew report | skew 过大,时钟缓冲器过多 |
| Routing | 完成所有信号连接,满足 DRC | routed netlist, GDSII | DRC 违例,short,antenna 问题 |
2.7 一个小建议:先跑通,再优化
很多新手一上来就想把每个步骤调到最优。我的建议是:先跑通一个完整流程,哪怕结果很差。你至少知道整个链条是通的。
我记得第一次用 OpenROAD 跑一个简单的计数器,从 RTL 到 GDSII 花了整整一天。中间各种报错,各种查文档。但跑通之后,后面再优化就有方向了。
嗯,这一章就到这里。流程你心里有数了,后面我们再深入每个步骤的细节和坑。