第1章:硅光PDK架构解析
各位同学好,我是老张。在硅光芯片设计这行摸爬滚打了十几年,今天咱们来聊聊PDK的架构。说实话,我刚入行那会儿,第一次打开PDK目录时也是一脸懵——这堆文件到底是干嘛的?后来踩了不少坑,才慢慢理清楚。
1.1 PDK目录结构:从根目录说起
一个标准的硅光PDK,目录结构其实挺有规律的。我习惯把它比作一个工具箱——每个文件夹放一类工具,找起来方便。下面是我见过比较典型的布局:
pdk_root/
├── doc/ # 文档手册
├── lib/ # 模型库文件
├── tech/ # 工艺技术文件
├── pcells/ # 参数化单元脚本
├── drc/ # 设计规则检查
├── lvs/ # 版图与原理图对比
├── symbols/ # 电路符号
└── examples/ # 示例设计
嗯,这里要注意:不同厂商的PDK可能会有细微差别,但骨架基本一致。我见过有些PDK把pcells和drc合并到tech里,其实也行,看个人习惯。
1.2 核心文件:四个关键角色
PDK里文件很多,但真正核心的就四类。我当年带新人时,总让他们先搞懂这四个文件的关系——搞懂了,PDK就算入门了。
1.2.1 .py文件——参数化单元的灵魂
.py文件,说白了就是Python脚本。它负责生成版图中的各种器件——比如马赫-曾德尔调制器、光栅耦合器、环形谐振腔。你想想看,每次画版图都手动去画这些结构?那不得累死。参数化单元(PCell)就是让你输入几个参数,自动生成版图。
举个例子,一个简单的直波导PCell:
class StraightWaveguide(PCell):
width = FloatParam(default=0.5, unit='um')
length = FloatParam(default=100, unit='um')
def layout(self):
# 生成波导版图
layer = self.layout.layer('WG', 0)
rect = Box(self.width, self.length)
self.layout.add(rect, layer)
我在项目中遇到过一个问题:有个同事把波导宽度参数写死了,结果换工艺节点时所有版图都得重画。所以啊,参数化一定要做彻底,别偷懒。
1.2.2 .lyp文件——显示与验证的规则书
.lyp文件是版图显示和验证的配置文件。它定义了每层版图用什么颜色、什么填充图案。你打开版图时看到的那些花花绿绿的颜色,就是它管的。
更重要的是,它里面还包含了设计规则检查(DRC)的规则定义。比如最小线宽、最小间距这些,都在这里。
1.2.3 .tech文件——工艺技术的百科全书
.tech文件是工艺技术文件,它记录了芯片制造过程中的所有物理参数。包括:
- 各层材料的折射率、损耗系数
- 最小线宽、最小间距等几何约束
- 层与层之间的对准容差
- 工艺角(Process Corner)定义
我记得有一次,仿真结果和测试数据对不上,查了三天才发现是.tech文件里波导损耗参数用的是旧版本的数据。从那以后,我每次拿到新PDK,第一件事就是核对.tech文件里的参数是否与工艺手册一致。
1.2.4 .lib文件——模型参数的数据库
.lib文件是模型库文件,它包含了各种器件的电学/光学模型参数。比如调制器的调制效率、探测器的响应度、波导的色散曲线等。这些参数通常是通过实际测试晶圆提取出来的。
这里有个坑:.lib文件里的模型参数往往是在特定温度、特定波长下测的。如果你设计的芯片工作在85°C或者1310nm波段,直接套用默认参数可能会出问题。我建议做仿真前先确认一下模型的有效范围。
1.3 文件之间的关系:一张图说清楚
这四个文件不是孤立的,它们之间有着紧密的依赖关系。我画了张图,帮你理清思路:
从这张图可以看出:.py文件生成的版图需要.lyp来验证是否符合设计规则,而.lyp里的规则又依赖于.tech定义的工艺能力。同时,.lib文件为仿真提供模型参数,而这些参数也是基于.tech里的工艺条件提取的。
1.4 设计规则与模型参数:避坑指南
设计规则(Design Rule)和模型参数(Model Parameter)是PDK里最容易出问题的两个地方。我分别说说。
设计规则
设计规则就是芯片制造厂给你划的「红线」——线宽不能小于多少、间距不能小于多少、套刻精度不能超过多少。违反了这些规则,流片回来就是废片。
我曾经犯过一个低级错误:在设计一个Y分支时,两个波导的间距设成了0.18um,但工艺规则要求最小0.2um。结果流片回来,那两个波导直接连在一起了,Y分支变成了一个「大胖子」波导。嗯,从那以后我每次跑完DRC都会仔细看报告。
模型参数
模型参数是仿真准确性的基础。硅光器件的模型参数通常包括:
| 参数类别 | 典型参数 | 影响 |
|---|---|---|
| 波导 | 折射率、损耗、色散 | 决定传输损耗和带宽 |
| 调制器 | Vπ、调制带宽、插入损耗 | 决定调制效率和信号质量 |
| 探测器 | 响应度、暗电流、带宽 | 决定接收灵敏度 |
| 耦合器 | 耦合效率、偏振相关损耗 | 决定光纤到芯片的耦合效率 |
这里有个经验:模型参数通常是在25°C、1550nm波长下测的。如果你的应用场景不同(比如数据中心可能用到1310nm),一定要向工艺厂要对应波长的模型参数。我见过有人直接用1550nm的模型去仿1310nm的器件,结果差了30%以上。
1.5 小结
这一章我们聊了PDK的目录结构、四个核心文件的功能与关系,以及设计规则和模型参数的注意事项。说白了,PDK就是连接芯片设计和芯片制造的桥梁。你设计得再好,如果PDK用不对,流片也是白搭。
下一章我们会深入.py文件,看看如何编写一个完整的参数化单元。到时候我会拿一个实际的光栅耦合器例子来演示,保证干货满满。
公众号:蓝海资料掘金营,微信deep3321