第四章:片上光互连架构:光网络拓扑与波分复用设计
各位同学,今天我们来聊聊片上光互连的核心——网络拓扑和波分复用。说实话,这部分内容是我在项目中踩坑最多的地方。光互连不像电互连,走线弯个直角可能就废了,拓扑选型直接影响芯片的功耗和延迟。
4.1 光网络拓扑:Mesh、Torus、Fat-Tree
先说说拓扑。我个人习惯把拓扑分成两类:直连拓扑和间接拓扑。Mesh和Torus属于直连,每个节点直接跟邻居通信。Fat-Tree属于间接,需要经过中间交换机。
4.1.1 Mesh网络
Mesh是最直观的拓扑。想象一个二维网格,每个节点只跟上下左右四个邻居相连。我在第一个光计算芯片项目里就用的Mesh,为什么?因为布线简单,光波导可以横平竖直地走。
但Mesh有个致命问题:对角节点通信延迟高。比如左上角节点要跟右下角节点通信,得经过N跳。我曾经在8×8的Mesh上跑过数据,最坏延迟比平均延迟高了3倍多。
4.1.2 Torus网络
Torus其实就是Mesh加了个环绕连接。最左边和最右边连起来,最上边和最下边连起来。你想想看,这样任意两个节点的跳数最多只有Mesh的一半。
我记得有一次做64节点的光互连设计,用Mesh的话最坏跳数是14,换成Torus直接降到7。但代价是什么?布线复杂度翻倍。光波导要绕到芯片边缘再折回来,对版图布局是个挑战。
4.1.3 Fat-Tree网络
Fat-Tree是另一种思路。它用多层交换机把节点连起来,每层带宽逐级增加。说白了,就是让离得远的节点也能快速通信。
我曾经在32节点的光计算芯片上试过Fat-Tree。好处很明显:任意节点对之间的跳数固定(logN级)。但坏处也让人头疼:需要大量光交换单元,而且每层的光波导数量不一样,设计起来很麻烦。
| 拓扑类型 | 平均跳数(64节点) | 布线复杂度 | 光波导总长 | 我的推荐 |
|---|---|---|---|---|
| Mesh | 5.3 | 低 | 短 | 小规模(<32节点) |
| Torus | 3.5 | 中 | 中 | 中等规模(32-128节点) |
| Fat-Tree | 2.0 | 高 | 长 | 大规模(>128节点) |
4.2 波分复用(WDM)设计
WDM说白了就是在一根光波导里同时传多个不同波长的光信号。这玩意儿在电信领域用了很多年,但搬到芯片上,嗯,坑不少。
4.2.1 为什么需要WDM?
你想想看,如果每个通信链路都单独拉一根波导,那芯片上得有多少根线?我算过,64节点全互联需要2016根波导,芯片面积根本放不下。WDM可以把多个信号复用到一根波导上,面积直接节省一个数量级。
4.2.2 波长分配策略
WDM设计最核心的问题:给每个信号分配什么波长?
我建议采用静态波长分配。就是提前规划好每个源节点到目的节点的波长。比如节点A到节点B用λ1,节点A到节点C用λ2。这样做的好处是光交换单元的控制逻辑简单,延迟低。
但静态分配有个问题:波长利用率低。如果节点A只跟节点B通信,那λ2就浪费了。我曾经在项目中试过动态波长分配,结果控制电路的面积比光器件还大,得不偿失。
4.2.3 微环谐振器阵列设计
WDM的核心器件是微环谐振器。每个微环对应一个波长,通过热光效应或电光效应调谐。我一般用级联微环结构,每个微环只谐振一个波长,其他波长直通。
// 微环谐振器参数设计示例(Python伪代码)
# 假设工作波长范围:1530nm - 1565nm(C波段)
# 信道间隔:1.6nm(200GHz)
# 微环半径计算
import numpy as np
c = 3e8 # 光速
n_eff = 2.5 # 有效折射率(硅波导)
lambda_center = 1550e-9 # 中心波长
channel_spacing = 1.6e-9 # 1.6nm
# 计算微环半径
R = lambda_center / (2 * np.pi * n_eff) # 约 98.7 μm
# 计算不同信道的微环半径
for i in range(8):
lambda_i = lambda_center + i * channel_spacing
R_i = lambda_i / (2 * np.pi * n_eff)
print(f"信道{i}: 波长{lambda_i*1e9:.1f}nm, 半径{R_i*1e6:.2f}μm")
嗯,这里要注意:微环的Q值决定了波长选择性。Q值越高,波长选择性越好,但调谐范围也越小。我一般把Q值设在5000-10000之间,既能保证信道隔离度,又不会让调谐太难。
4.3 拓扑与WDM的协同设计
拓扑和WDM不是孤立的。我习惯把两者放在一起考虑:拓扑决定了WDM的复用度。
比如在Mesh拓扑中,每个节点只有4个邻居,WDM只需要4个波长就够了。但在Fat-Tree中,一个交换机可能连接16个节点,那就需要16个波长。波长数越多,微环阵列的面积越大,插损也越大。
4.4 本章小结
好了,这一章的内容就这些。总结几个关键点:
- 拓扑选型:小规模用Mesh,中等规模用Torus,大规模用Fat-Tree
- WDM设计:静态波长分配更实用,波长间隔至少1.6nm
- 微环设计:Q值5000-10000,注意波长串扰
- 协同设计:拓扑决定波长数,波长数影响面积和插损
这些内容看起来简单,但真正做起来细节很多。我建议你们先拿一个8节点的Mesh练练手,把WDM的波长分配和微环参数调一遍,感受一下。