第二章:工艺库准备——多阈值单元库、电平转换器与隔离单元
各位同学,咱们今天聊聊多电压域设计的第一步——工艺库准备。说实话,这一步看着简单,但我在好几个项目里都吃过亏。库没准备好,后面跑仿真、做时序,全是坑。
多电压域设计,说白了就是芯片里不同模块跑不同电压。比如核心逻辑用0.8V省电,I/O接口用1.8V保证驱动能力。那问题来了——不同电压之间怎么通信?低电压模块怎么关断?这就引出了我们今天的主角:多阈值单元库、电平转换器库、隔离单元库。
2.1 多阈值单元库:HVT / SVT / LVT
先说说多阈值单元。你想想看,芯片里有些路径对速度要求极高,有些路径则可以慢一点。如果所有单元都用高速的,漏电会大得吓人。如果全用低漏电的,性能又上不去。
所以工艺厂给了我们三种选择:
- HVT(高阈值电压):漏电最小,速度最慢。适合非关键路径。
- SVT(标准阈值电压):折中方案。我一般用它做默认库。
- LVT(低阈值电压):速度最快,漏电最大。只用在时序紧张的路径上。
重要提醒:多阈值单元在同一个电压域内可以混用。比如核心域用0.8V,里面可以同时有HVT和LVT的寄存器。EDA工具会自动帮你做阈值分配。
我在一个AI芯片项目里遇到过这种情况:整个芯片漏电超标30%,查了半天发现是综合时没加HVT库,所有单元都用了SVT。后来重新综合,把非关键路径全换成HVT,漏电直接降了一半。嗯,从那以后我每次建库都会再三确认阈值配置。
2.2 电平转换器库:Level Shifter
电平转换器,说白了就是电压翻译官。0.8V域的信号要传到1.8V域,电平不匹配,逻辑会出错。电平转换器就是干这个的。
我个人习惯把电平转换器分成两类:
- 单向电平转换器:只能从一个方向转。比如从低到高,或者从高到低。
- 双向电平转换器:两个方向都能转。适合I/O这类双向信号。
库文件里一般会提供多种驱动强度的版本。比如LVL_1X、LVL_2X、LVL_4X。选型时要注意:
| 型号 | 驱动强度 | 适用场景 | 面积(μm²) |
|---|---|---|---|
| LVL_1X | 1倍 | 短距离、低负载 | 12.5 |
| LVL_2X | 2倍 | 中等距离 | 18.3 |
| LVL_4X | 4倍 | 长距离、高负载 | 29.7 |
注意:电平转换器不能放在电压域的边界上随便插。我曾经见过一个设计,电平转换器放在了低电压域里,结果输入信号摆幅不够,输出一直出错。正确做法是:电平转换器应该放在高电压域一侧,或者用专用的电源域。
2.3 隔离单元库:Isolation Cell
隔离单元,这名字听着挺玄乎,其实作用很简单——当某个电压域关断时,防止它的输出信号变成不定态(X态),影响到其他还在工作的域。
隔离单元一般有两种实现方式:
- AND型隔离:隔离使能为低时,输出钳位到0。
- OR型隔离:隔离使能为高时,输出钳位到1。
选哪种?看你的设计需求。如果关断域的输出是低有效信号,用OR型更合适。如果是高有效信号,用AND型。我习惯在顶层统一用AND型,配合一个反相器,这样控制逻辑更清晰。
小技巧:隔离单元的使能信号必须来自常开域(always-on domain)。如果使能信号也随着关断域一起掉电,那隔离就失效了。这个坑我踩过,后来在写UPF时专门加了一条规则来检查。
2.4 库文件导入与检查
好了,库选好了,接下来就是导入EDA工具。以华大九天的Aether工具为例,流程大概是:
# 设置库路径
set LIB_PATH /home/design/libs
# 导入多阈值库
read_lib ${LIB_PATH}/hvt.lib
read_lib ${LIB_PATH}/svt.lib
read_lib ${LIB_PATH}/lvt.lib
# 导入电平转换器库
read_lib ${LIB_PATH}/level_shifter.lib
# 导入隔离单元库
read_lib ${LIB_PATH}/isolation_cell.lib
# 检查库一致性
check_library -all
导入之后,一定要做检查。我一般会看这几个方面:
- 时序模型完整性:每个单元的setup/hold时间、延迟弧是不是都定义了。
- 功耗模型:内部功耗、漏电功耗数据是否合理。
- 物理信息:单元面积、pin位置、金属层信息是否齐全。
- 电压兼容性:电平转换器的输入输出电平范围是否覆盖了设计中的所有电压。
核心原则:库文件是设计的基石。库有问题,后面所有工作都是白费。我建议每次导入新库后,先跑一个简单的测试用例,验证基本功能。别等到整个芯片都做好了才发现库有问题,那代价就太大了。
最后说一句,库文件检查时,重点关注warning信息。有些warning可以忽略,但有些是致命问题。比如「missing timing arc」这种,必须解决。我习惯把warning分成三类:必须修复的、建议修复的、可以忽略的。这样效率高很多。
好了,这一章的内容就到这里。库准备好了,下一章咱们就可以开始搭多电压域的物理架构了。
公众号:蓝海资料掘金营,微信deep3321