1. 多电压域设计的核心挑战
我第一次接触多电压域设计是在2015年一个智能手表芯片项目上。当时客户要求在保持性能的同时将待机功耗降低到竞品的60%,这个看似简单的需求让我们团队整整加班了三个月。多电压域设计最让人头疼的不是概念理解,而是如何在物理实现阶段处理好各种"边界问题"。
想象一下,你的芯片就像一栋大楼,不同楼层(电压域)使用不同的电压供电。有的楼层全天供电(Always-On Domain),有的楼层按需供电(Power-Gated Domain)。问题来了:当有人在断电楼层和通电楼层之间传递物品(信号)时,要怎么保证物品不会在半路丢失或损坏?这就是Level Shifter和Isolation Cell存在的意义。
在实际布局中,我们遇到过最典型的问题是电源网络规划。比如一个0.8V的电压域和一个1.2V的电压域相邻时,两者的电源环(Power Ring)需要保持足够间距。我建议至少预留3倍标准单元高度的间隔,否则在后期验证时会出现IR Drop超标的情况。具体参数可以参考这个典型配置:
| 电压差 | 最小间距 | 推荐屏蔽层 |
|---|---|---|
| ≤0.3V | 5μm | 不需要 |
| 0.3-0.5V | 10μm | 1层MESH |
| ≥0.5V | 15μm | 2层MESH |
2. UPF规范编写实战技巧
写UPF文件就像给芯片设计制定"用电管理条例",但很多工程师容易犯一个错误——把UPF当成纯文本配置文件。实际上,优秀的UPF编写需要考虑物理实现的可行性。我总结出三个必须验证的黄金法则:
第一,电源开关网络(Power Switch Network)的驱动能力要留30%余量。曾经有个项目因为开关单元驱动不足,导致模块唤醒时间比预期慢了200ns。后来我们在UPF中增加了switch cell的驱动强度定义:
create_power_switch SW_CPU \ -domain PD_CPU \ -input_supply_port {in VDD} \ -output_supply_port {out VDD_CPU} \ -control_port {ctrl SLEEP} \ -on_state {on in !ctrl} \ -off_state {off ctrl} \ -ack_port {ack SLEEP_ACK} \ -ack_delay {ack 100ns} \ -stage 3 \ # 三级驱动 -drive 1.2 # 1.2倍驱动强度第二,Isolation策略要区分信号类型。控制信号建议使用AND型ISO(输出固定0),数据信号用OR型ISO(输出固定1)。在28nm项目中我们实测发现,这样配置能减少23%的漏电。
第三,Level Shifter的摆放位置影响时序收敛。对于跨电压域的时序关键路径,建议在UPF中强制指定LS位置:
set_level_shifter LS_FFT \ -domain PD_FFT \ -applies_to inputs \ -location cluster \ # 集中摆放 -rule low_to_high \ -priority 10 # 高优先级3. 电源门控的物理实现细节
电源门控听起来简单——加个开关控制通电与否,但实际操作中藏着无数"坑"。最让我印象深刻的是某次芯片回流测试时,发现电源开关的栅氧击穿率异常高。后来发现是开关单元的驱动信号斜率不够,导致MOS管处于线性区时间过长。
现在我们的标准流程是:
- 在floorplan阶段预留switch cell区域,按供电能力计算所需数量
- 采用"先串后并"的驱动结构,确保开关控制信号斜率
- 添加去耦电容阵列,抑制唤醒时的电流浪涌
以移动处理器中的GPU模块为例,典型配置如下:
- 开关单元类型:Header Switch (PMOS)
- 单元密度:每100μm摆放1个
- 驱动链级数:3级反相器链
- 唤醒时序:<50ns从关断到稳定供电
特别要注意的是电源网络的层次规划。对于采用top-level金属层供电的设计,建议采用以下结构:
VDD_MESH (顶层) → Switch Cell → VDD_RAIL (中层) → Power Straps (底层)这种结构既能降低IR Drop,又便于后期ECO修改。我们在7nm项目上实测显示,相比传统平面供电结构,这种分层设计能减少40%的电压降。
4. 特殊单元的布局策略
Isolation Cell和Level Shifter的摆放是门艺术。早期我们习惯让工具自动摆放,直到有次遇到一个棘手的时序问题——某关键路径因为LS摆放不当增加了1.2ns延迟。现在我们的策略是:
对于Isolation Cell:
- 集中摆放在电压域边界处
- 确保always-on电源布线通畅
- 与普通标准单元保持2行间距
Level Shifter的布局更讲究:
- 低速信号(<100MHz):允许集中摆放
- 中速信号(100-500MHz):分散在接收端附近
- 高速信号(>500MHz):必须靠近发送端
这里有个实用技巧:在innovus或ICC2中可以通过以下命令创建placement guide:
create_placement_guide -name LS_GUIDE \ -type fence \ -boundary {{x1 y1} {x2 y2}} \ -layers {M1 M2} \ -hard5. 签核验证的关键检查项
到了签核阶段,低功耗设计需要额外关注这些方面:
静态验证:
- UPF vs. 物理实现的匹配性检查
- 电源网络连通性验证
- 特殊单元的供电合规性
动态验证:
- 电源状态转换测试
- 唤醒/休眠时序余量
- 跨电压域信号完整性
最容易被忽视的是电源状态转换时的glitch检查。建议在PrimeTime中设置如下检查:
check_power_state_transition \ -from {PD_CPU OFF} \ -to {PD_CPU ON} \ -glitch_threshold 0.3V \ -window 10ns有个案例值得分享:某次流片前最后时刻,我们发现Isolation Cell的secondary power连接到了错误的电源网络。幸亏做了LVS对比检查,否则芯片回来就是一块昂贵的砖头。现在我们的checklist里一定会包含这项:
[ ] 所有ISO/LS单元的备份电源网络与UPF定义一致 [ ] 电源开关的控制信号布线满足最大transition要求 [ ] 电压域边界的DRC间距加倍检查6. 实战中的经验教训
在40nm移动处理器项目上,我们曾因为Retention Register的摆放过于分散,导致备份电源网络出现IR Drop问题。后来采取的解决方案是:
- 将Retention Register集中成若干cluster
- 每个cluster单独规划备份电源线
- 添加本地去耦电容
实测显示这种结构能使备份电源的电压波动降低65%。具体实施时要注意:
- 每个cluster不超过50个register
- 备份电源线宽至少是正常电源的1.5倍
- 添加power switch的使能信号缓冲器
另一个常见问题是电源开关的ESD防护。特别是在28nm以下工艺,我们会在switch cell周围添加环形guard ring:
┌───────────────┐ │ NWELL Guard │ │ ┌─────────┐ │ VDD_PG ────┤ │ Switch │ ├─── VDD │ └─────────┘ │ │ PSUB Guard │ └───────────────┘这种结构虽然占用5%额外面积,但能将ESD失效风险降低一个数量级。