第1章:硅光PDK架构解析

各位同学好,我是老张。在硅光芯片设计这行摸爬滚打了十几年,今天咱们来聊聊PDK的架构。说实话,我刚入行那会儿,第一次打开PDK目录时也是一脸懵——这堆文件到底是干嘛的?后来踩了不少坑,才慢慢理清楚。

1.1 PDK目录结构:从根目录说起

一个标准的硅光PDK,目录结构其实挺有规律的。我习惯把它比作一个工具箱——每个文件夹放一类工具,找起来方便。下面是我见过比较典型的布局:

pdk_root/
├── doc/              # 文档手册
├── lib/              # 模型库文件
├── tech/             # 工艺技术文件
├── pcells/           # 参数化单元脚本
├── drc/              # 设计规则检查
├── lvs/              # 版图与原理图对比
├── symbols/          # 电路符号
└── examples/         # 示例设计

嗯,这里要注意:不同厂商的PDK可能会有细微差别,但骨架基本一致。我见过有些PDK把pcellsdrc合并到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)的规则定义。比如最小线宽、最小间距这些,都在这里。

小技巧: 我习惯在.lyp文件里把关键层(比如波导层、掺杂层)设置成高对比度颜色。这样检查版图时一眼就能看出问题。

1.2.3 .tech文件——工艺技术的百科全书

.tech文件是工艺技术文件,它记录了芯片制造过程中的所有物理参数。包括:

  • 各层材料的折射率、损耗系数
  • 最小线宽、最小间距等几何约束
  • 层与层之间的对准容差
  • 工艺角(Process Corner)定义

我记得有一次,仿真结果和测试数据对不上,查了三天才发现是.tech文件里波导损耗参数用的是旧版本的数据。从那以后,我每次拿到新PDK,第一件事就是核对.tech文件里的参数是否与工艺手册一致。

1.2.4 .lib文件——模型参数的数据库

.lib文件是模型库文件,它包含了各种器件的电学/光学模型参数。比如调制器的调制效率、探测器的响应度、波导的色散曲线等。这些参数通常是通过实际测试晶圆提取出来的。

这里有个坑:.lib文件里的模型参数往往是在特定温度、特定波长下测的。如果你设计的芯片工作在85°C或者1310nm波段,直接套用默认参数可能会出问题。我建议做仿真前先确认一下模型的有效范围。

1.3 文件之间的关系:一张图说清楚

这四个文件不是孤立的,它们之间有着紧密的依赖关系。我画了张图,帮你理清思路:

.py 参数化单元 .lyp 显示与验证 .tech 工艺技术 .lib 模型参数 调用 引用 提供模型参数 间接依赖 间接依赖 核心逻辑:.py生成版图 → .lyp验证规则 → .tech提供工艺约束 → .lib提供仿真参数

从这张图可以看出:.py文件生成的版图需要.lyp来验证是否符合设计规则,而.lyp里的规则又依赖于.tech定义的工艺能力。同时,.lib文件为仿真提供模型参数,而这些参数也是基于.tech里的工艺条件提取的。

1.4 设计规则与模型参数:避坑指南

设计规则(Design Rule)和模型参数(Model Parameter)是PDK里最容易出问题的两个地方。我分别说说。

设计规则

设计规则就是芯片制造厂给你划的「红线」——线宽不能小于多少、间距不能小于多少、套刻精度不能超过多少。违反了这些规则,流片回来就是废片。

我曾经犯过一个低级错误:在设计一个Y分支时,两个波导的间距设成了0.18um,但工艺规则要求最小0.2um。结果流片回来,那两个波导直接连在一起了,Y分支变成了一个「大胖子」波导。嗯,从那以后我每次跑完DRC都会仔细看报告。

警告: 不要完全相信DRC工具的自动修复功能。有些规则违反是工具检测不到的,比如密度规则(金属密度不能太高或太低)。我建议在跑完DRC后,手动抽查几个关键区域。

模型参数

模型参数是仿真准确性的基础。硅光器件的模型参数通常包括:

参数类别 典型参数 影响
波导 折射率、损耗、色散 决定传输损耗和带宽
调制器 Vπ、调制带宽、插入损耗 决定调制效率和信号质量
探测器 响应度、暗电流、带宽 决定接收灵敏度
耦合器 耦合效率、偏振相关损耗 决定光纤到芯片的耦合效率

这里有个经验:模型参数通常是在25°C、1550nm波长下测的。如果你的应用场景不同(比如数据中心可能用到1310nm),一定要向工艺厂要对应波长的模型参数。我见过有人直接用1550nm的模型去仿1310nm的器件,结果差了30%以上。

1.5 小结

这一章我们聊了PDK的目录结构、四个核心文件的功能与关系,以及设计规则和模型参数的注意事项。说白了,PDK就是连接芯片设计和芯片制造的桥梁。你设计得再好,如果PDK用不对,流片也是白搭。

下一章我们会深入.py文件,看看如何编写一个完整的参数化单元。到时候我会拿一个实际的光栅耦合器例子来演示,保证干货满满。


公众号:蓝海资料掘金营,微信deep3321