第三节 隔离单元(Isolation Cell)设计:AND/OR类型隔离逻辑、钳位值选择、中芯国际库的ISO cell使用规范
好,咱们接着聊跨电压域设计。前面讲了电平转换器,今天重点说说隔离单元——ISO cell。
说实话,隔离单元这玩意儿,看着简单,但坑特别多。我早期有个项目,就因为隔离逻辑选错了类型,导致芯片在低功耗模式下数据全乱套。那次教训挺深刻的。
一、为什么需要隔离单元?
你想想看,一个模块断电了,它的输出信号会变成什么?
嗯,大概率是浮空状态,或者是不确定的X态。如果这个信号直接连到另一个还在工作的模块,那后果就是——逻辑混乱、漏电剧增、甚至整个芯片死机。
隔离单元的作用,说白了就是:在源域断电时,把输出钳制到一个确定的、安全的值。
核心原则:隔离单元必须放在接收端(always-on域),而不是发送端(可关断域)。这个顺序千万别搞反了。
二、AND类型 vs OR类型隔离逻辑
中芯国际的库提供了两种基本隔离类型:AND型和OR型。怎么选?看你的需求。
1. AND型隔离
AND型隔离,输出端默认被钳位到逻辑0。它的控制信号是低电平有效——当ISO_EN=0时,输出被强制拉低;当ISO_EN=1时,正常透传数据。
我个人的习惯是:如果接收端模块在休眠时希望看到低电平,就用AND型。比如复位信号、使能信号,这些通常都是低有效,用AND型很自然。
// AND型隔离单元的真值表
// ISO_EN = 0: 输出 = 0 (钳位)
// ISO_EN = 1: 输出 = 输入数据
module iso_and (
input data_in,
input iso_en,
output data_out
);
assign data_out = data_in & iso_en;
endmodule
2. OR型隔离
OR型隔离正好相反,输出端默认被钳位到逻辑1。控制信号是高电平有效——当ISO_EN=1时,输出被强制拉高;当ISO_EN=0时,正常透传。
OR型适合什么场景?我遇到过这样一个案例:某个时钟门控信号,在休眠时必须保持高电平,否则时钟会意外关闭。这时候用OR型隔离就对了。
// OR型隔离单元的真值表
// ISO_EN = 1: 输出 = 1 (钳位)
// ISO_EN = 0: 输出 = 输入数据
module iso_or (
input data_in,
input iso_en,
output data_out
);
assign data_out = data_in | iso_en;
endmodule
小技巧:如果你不确定该用哪种,我建议优先考虑AND型。因为大多数控制信号在休眠时希望保持低电平,这样更安全。但具体还是要看你的设计需求。
三、钳位值选择——0还是1?
这个问题其实没有标准答案。但有几个原则可以参考:
- 看接收端的需求:接收模块在休眠时希望看到什么值?这个值就是你的钳位值。
- 考虑漏电:钳位到0通常比钳位到1更省电,因为NMOS管在关断时漏电更小。
- 避免总线冲突:如果信号是双向总线,钳位值必须确保不会与其他驱动源冲突。
我记得有一次,一个同事把隔离钳位值设成了1,结果总线上的上拉电阻和隔离单元打架,电流直接飙到几十毫安。嗯,这种低级错误,犯一次就记住了。
| 信号类型 | 推荐钳位值 | 说明 |
|---|---|---|
| 复位信号 | 0 (AND型) | 低电平复位,休眠时保持复位态 |
| 使能信号 | 0 (AND型) | 休眠时关闭功能 |
| 时钟门控 | 1 (OR型) | 休眠时保持时钟开启或关闭 |
| 数据总线 | 视情况而定 | 避免总线冲突 |
| 中断信号 | 0 (AND型) | 休眠时屏蔽中断 |
四、中芯国际库的ISO cell使用规范
中芯国际的库,ISO cell的命名通常有规律可循。比如:
ISO_AND_X1:AND型隔离,驱动能力X1ISO_OR_X2:OR型隔离,驱动能力X2ISO_AND_LP_X1:低功耗版本
使用时有几个规范必须遵守:
- 控制信号必须来自always-on域:ISO_EN信号必须由永不掉电的模块产生,否则隔离单元本身会失效。
- 隔离单元不能串联:两个ISO cell串在一起,逻辑上没问题,但时序和功耗都会变差。我见过有人这么干,结果时序收敛不了。
- 注意驱动能力:ISO cell的驱动能力要匹配负载。驱动能力太小,信号上升沿变缓;太大,功耗浪费。
- 布局位置:ISO cell尽量靠近接收端,减少长走线带来的干扰。
警告:千万不要把ISO cell放在可关断域!我曾经见过一个设计,ISO cell和源模块一起断电了,结果隔离功能完全失效,数据乱飞。这种错误在综合阶段就应该被检查出来。
五、实战中的避坑指南
最后分享几个我踩过的坑:
- 坑1:忘记加隔离——跨电压域的信号,如果没加隔离,仿真时可能看不出问题,但流片回来就等着哭吧。
- 坑2:隔离控制信号时序不对——ISO_EN必须在源域断电之前生效,否则会有短暂的不确定态。这个时序约束一定要做。
- 坑3:隔离单元太多——每个信号都加隔离,面积和功耗会爆炸。合理的做法是:只对跨域的关键信号加隔离,非关键信号可以复用。
嗯,关于隔离单元,今天就聊这么多。下一节咱们讲讲如何用UPF描述这些隔离策略,那个才是真正体现功力的地方。