Channelsim 调用 VPI 案例联仿
Channelsim 调用 VPI 案例联仿
前言
在 Ethernet Designer 出来以前,我是用的 Channelsim 调用 VPI 做联仿的,因为 VPI 中有很多现成的案例可供参考。
虽然 VPI 也是一个很强大的光通信仿真工具,用来做学术研究,理论模型很不错,但工程能力相比 ADS 就逊色很多了。例如你想在其中使用 S 参数,由于没有现成的 S 参数工具,就只能摆出一堆滤波器来实现,密密麻麻的很是恼人,参考我以前写的博客VPI中加载光s4p参数。
趁这次机会,我将以前做 ADS-VPI 联仿的经验总结一下,也算是给未来可能淘汰掉的工程方法做个收尾。
VPI 案例分析
这次用最简单的 VPI 案例为单波 100G PAM-4 光互连(Single-Wavelength 100G PAM-4 Optical Interconnect),原理图如下
先简要分析一下这个简单案例。信源是一个 PAM-M 的电信源,该信号经过滤波与整形处理后,以差分的形式喂给推挽式 MZM 的电极,调整两臂相位实现光载波调制。光信号经过光纤后,由一个 PD 的行为模型接收,转换为电信号,再经过这个 PD 的等效低通滤波,也就是 S21,传给 CDR 与 FFE 做处理,最后计算出 BER 与 SER。
这里需要注意的是,VPI 这里的 CDR 是一个理想的,可以认为是作弊了的时钟恢复组件 ClockRecoveryIdeal。因为该组件是根据逻辑通道的信息,也就是 PAM-M 信源输出的比特流来做相关运算,从而对齐信号与码型。因此这里跟传统的 DSP 芯片通过 PLL 恢复时钟信号不一样,理论上 Rx 端在设置好各种均衡参数后就不需要 Tx 端的码流信息了。同样的道理,BER_Multilevel 也是为了计算蒙特卡洛的 BER 而获取了逻辑通道中的码流信息。
我们想把 VPI 中的光电链路案例嵌入到 ADS ChannelSim 中,通过通道仿真的方式进行链路级评估。这里需要注意几个问题:
- VPI 案例中的电信源是自带的,需要替换为 ADS 中的 AMI 模型。
VPI 本身主要负责光电器件与光链路行为仿真,并不直接承担 ADS ChannelSim 所需的 AMI 模型加载与训练流程。因此,Tx / Rx 的 AMI 行为仍然需要在 ADS 侧完成。 - 逻辑通道中的码流信息也需要一并考虑。
Rx AMI 的均衡参数不是单纯从接收波形中“凭空”得到的,而是依赖已知码型、接收波形以及目标判决电平之间的关系进行估计。因此,仿真中不仅要传递波形,也要保证 Tx 端发出的 symbol pattern 与 Rx AMI 端用于训练的码型一致。 - 嵌入后的链路训练方式需要重新考虑。
对 ADS 而言,VPI 嵌入组件更像是一个波形变换黑箱。ChannelSim 可以看到它的输入输出波形,但未必能够像处理普通 S 参数通道那样,直接得到经过 VPI 光电链路之后的 pulse response。因此,如果 Rx AMI 的训练依赖 pulse response,或者需要基于通道脉冲响应来计算均衡参数,就可能遇到困难。 - 完整链路训练需要 Tx AMI 与 Rx AMI 协同。
在标准电链路 AMI 流程中,Rx 端可能通过训练得到类似proxy_TX_FIR的反馈参数,再传递给 Tx,用于调整 Tx FFE / FIR 预加重系数。
但当中间链路被 VPI 嵌入组件替代后,这种 Tx-Rx 之间的反向协同训练链路不一定还能自然打通。因此,实际建模时需要明确:VPI 组件到底只是一个固定的 E-O-E 波形映射,还是也参与 AMI 训练闭环。
因此,把 VPI 光电链路嵌入 ADS ChannelSim 时,不能简单把它理解成一个普通的 S 参数通道。它更接近一个 E-O-E 行为黑箱:输入是电信号波形,输出也是电信号波形,中间包含光源、调制器、光纤、探测器和模拟前端等复杂行为。
这会带来一个关键问题:传统 AMI 链路训练往往依赖码型、pulse response 以及 Tx/Rx 之间的参数协商;而 VPI 嵌入链路未必能自然暴露这些信息。因此,真正可行的方案通常有两类:
- 一类是把 VPI 链路当作固定黑箱,只做波形级前向仿真,然后在 Rx 端做后处理均衡;
- 另一类是将 VPI 链路等效成 ADS / AMI 能识别的行为模型,例如线性 impulse response、Volterra 模型、查表模型或自定义 Redriver AMI,从而重新接入 ChannelSim 的训练闭环。
第二类方法也就是 Ansys Interconnect 最新出来的电光电 AMI 构建法。利用机器学习,逆向拟合出 E-O-E 黑箱 Volterra 模型的各阶级数,构建一个 AMI 中继器,在 AEDT 里进行系统仿真。
VPI 案例嵌入
复制控件
从前面的 VPI 原理图中,我们可以看出,所需的主体部分主要是调制与光纤部分。因此我们仅需提取该部分到 Template 里
迁移参数
仅仅只是复制控件还不够,还需要将全局参数一并拷贝过来
在 Template 中加载这些参数
记得检查各个控件自带的 data 文件,保证全都迁移过来了,例如光纤参数 attFile_SMF.dat 和 dispFile_SMF.dat 文件
调整输出
由于 VPI 案例中 Rx 信号没有 TIA,且没有 block DC。因此这里需要稍加修改,顺带将原理图中的几个 SignalAnalyzer 给禁用掉。
添加 BlockDC
添加 TIA
最终 VPI 嵌入链路如下
检查链路
之所以要检查链路,是为了确保该链路自身能够正常运行,输入输出信号是合理的。因此需要将 ADS Dynamic Input 和 ADS Dynamic Output 先 Exclude 掉,换成原电信源与示波器
此外,还需要关闭 Run 里的脚本
运行查看结果(将前面禁用掉的 Analyzer 重新 active)
运行结果没啥问题,就可以将 Analyzer 重新禁用掉了。将 ADS Dynamic Input 和 ADS Dynamic Output 重新连接回来,并在 Run 里打勾,回到最终 VPI 嵌入链路。
参数传递
所谓的参数传递,指的是 ADS 中 VOL 控件中可以修改并传递给 VPI 的参数,这需要在 VPI 链路中添加。
假如我们想传递光纤长度这个参数,可以将 FiberLength 移至 ADS (VOL parameter) 栏目里
这里我还额外添加了一个波长的参数
关闭 VPI 原理图,回到 ADS 中重新 Apply 一下 VOL 控件,可以看到传递参数都正确显示并可在 ADS 中进行修改了
ADS 链路输出
回到 ADS,搭建完整系统链路(这里加的 Tx 和 Rx 的 S 参数代表封装损耗)
TX AMI 这里使用已知的码型,以供后面 Tx Wav AMI 恢复
RX 这里使用了 FlexDCA Probe,目的是查看并导出波形文件
运行链路仿真(如果在 ADS Dynamic Input 和 ADS Dynamic Output 中打开了 ShowData,还能看到 VPI 链路进出的眼图)
ADS 眼图恢复
查看 Eys_Probe 的眼图,可以发现眼图早已闭合,我们接下来要做的就是使用 DSP 芯片的 AMI 模型将眼图恢复出来。
新建一个原理图,参考上一篇博文——从波形恢复眼图,我们要对波形做均衡来恢复眼图。
这里需要注意的是,运行前我们要对 VPI_Waveform.csv 稍做处理,去除数据头,避免 Tx Wav AMI 读取错误
运行眼图恢复链路
总结
这篇文章详细讲述了如何在 ADS Channelsim 中调用 VPI 案例进行联仿,总共分三步:
- 嵌入 VPI 链路
- ADS 链路波形仿真与导出
- 波形眼图恢复
虽然最后算是成功恢复出来了眼图,但考虑到 Rx 端的链路训练未能协同到 Tx 端,链路训练的恢复能力有限。
相较于 Ethernet Designer 中的 Photonics EOE 模式,当前通道仿真用的是 bit-by-bit 模式,也只有 bit-by-bit 模式能够调用 VPI 链路。
我之所以仍在使用 ADS-VPI 联仿,是因为我总感觉 Ethernet Designer 里的 fiber 控件有问题,关于色散的计算不太对,这点我以后会持续关注。











