ADS 中的光 S 参数
ADS 中的光 S 参数
前言
最近 ADS 新出了 Photonics Designer Suite,试用了一下,整体知识图谱与 VPIphotonics 一模一样,无非就是基于慢变振幅近似下等效基带变换的数学原理。因此,ADS 给这个仿真器起了个很直白的名字,叫做ENVELOPE,即波包仿真器(这个仿真器很早就有了)。
最有趣的还是 Photonics Designer 中引入了几个新的仿真器和模块,是专门针对光信号的,例如OPTICAL S-PARAMETERS和Optical Simulation Block。
其中Optical Simulation Block的作用是针对光信号偏振而来的,我们知道 VPIphotonics 中的光信号基本模式有两种,一种是Sample,一种是Block,分别对应不同边界条件。前者非周期双向交互,后者往往是周期单向,且传输延迟远大于数据块持续时间。ADS 里的Block对应含义与 VPI 中保持一致。
最有意思的还是OPTICAL S-PARAMETERS这个仿真器,因为据我所用的 VPI 11.1 版本中还没有这个东西,而它又是非常重要的网 ...
SerDes 信号是如何恢复出来的
SerDes 信号是如何恢复出来的
搞了快两年的信号处理,知识碎片零零散散,趁这个机会总结提炼一下。
SerDes 信号与系统
所谓 SerDes,就是 Serializer-Deserializer 的简写,指代发射端并行信号先通过串化器转成串行信号,通常以差分信号的形式传输,并在接收端解串还原成并行信号的系统。
因此发射端输出的信号是一串速率极高的振荡波形,从一G到百G量级的电磁信号。如果信号是以光载波的形式传输,整个系统可以看成强度调制-直接探测(IM-DD)系统,不同的幅值对应不同的比特序列。最常见的 NRZ 信号一个符号对应一个比特,也就是 PAM2 信号,有两个电平 level。PAM4 信号有四个电平 level,一个符号对应俩比特,因为俩比特的状态有四种。
我们真正想要的,是发射端输出的比特能尽可能正确的在接收端拿到。即便拿到的比特序列误码率很高,也要想办法尽可能恢复出最真实的结果。这个过程中主要存在三个主体:
发射端 Tx
信道 Channel
接收端 Rx
我们的目的是保证 Tx 送到 Rx 的信息尽可能正确传达,Rx 的波形形貌还是不是 Tx 送出的样子,并不 ...
ADS 中的 AMI 构建器
ADS 中的 AMI 构建器
ADS 中有两套 AMI Builder,一个是 Memory Interface AMI Builder,一个是 SerDes AMI Builder。它们分别是两套 AMI 体系:
12Memory Interface AMI Builder = 偏DDR/内存接口(模拟+系统联合)SerDes AMI Builder = 偏高速串行链路(PCIe/USB/以太网标准)
两套 AMI 体系的设计哲学
Memory Interface Toolkit(DDR世界)
Memory Interface AMI Model Builder
主要服务对象:
DDR4 / DDR5 / LPDDR
DQ / DQS / CA bus
特点:
更偏 并行总线
强调:
时序(timing closure)
ODT / driver impedance
反射 / 拓扑(fly-by / T-topology)
SerDes Toolkit(高速串行世界)
PCIe AMI Model Builder
USB AMI Model Builder
E ...
WaveFormEye使用流程
自制软件 WaveFormEye 使用流程
从畸变波形到均衡恢复
这款软件到底在解决什么问题
高速链路测试里,我们拿到的往往不是“理想数字信号”,而是一条已经被信道损耗、带宽限制、码间干扰、抖动和噪声污染过的实测波形。
WaveFormEye 的核心目标,就是把这条实测波形重新拉回到一个可分析、可验证、可恢复的状态。它围绕下面这条主线展开:
原始波形 -> 眼图分析 -> 码型对齐 -> 脉冲响应提取 -> AMI 均衡 -> BER 验证
如果用一句更通俗的话概括,这个软件做的是:
“从接收到的畸变波形中,恢复出更接近理想判决状态的信号,并量化它到底恢复得怎么样。”
软件适合什么场景
这个项目是一个基于 PySide6 + Qt Widgets + Matplotlib + NumPy/SciPy 的桌面信号分析工具,适合以下场景:
查看示波器导出的两列波形数据
对 NRZ 或 PAM4 波形绘制眼图
从训练码型和实测波形中完成相位对齐
提取通道的脉冲响应、冲激响应和频响
调用 IBIS-AMI 模型对波形进行均衡
对均衡结果做判决、对齐和 BER 验 ...
EOE链路信号完整性分析调研
EOE链路信号完整性分析调研
步骤回顾
Bit-by-Bit 仿真 (AMI):输出一个特定码型的 PAM4 波形。
VPI 光链路:将波形作为输入,经过 E-O-E 光学链路,得到输出波形。
频谱分析:对输入/输出波形分别做 FFT,得到振幅和相位随频率的分布。
等效传递函数:对输出谱除以输入谱,得到等效的 H(f)H(f)H(f)。
导出 Touchstone:把 H(f)H(f)H(f) 保存为 Touchstone 格式,作为 S 参数文件。
这种方法用在 ADS ChannelSim 里存在前提和限制
本质:得到的 H(f)H(f)H(f) 是链路的线性频率响应,等价于“含色散和器件频响”的 S21。
在 小信号条件下,这样的等效 S 参数就是有效的 LTI 模型,ADS ChannelSim 可以直接用。
ChannelSim 在 Bit-by-Bit 模式里只需要冲激响应/频率响应,它会自动卷积码型。
前提条件:
生成 S 参数的波形 码型要够长,覆盖系统带宽,避免 FFT 分辨率不足。
频率点数要足够密(否则导出的 Touchstone 精度不够,会导致 ...
黑仪blog助理第二次测试
第二次测试 🦞
这次按正确流程来,不出问题了。
黑仪blog助理小测试
这是用黑仪博客助理发的测试文章 🦞
如果能看到这篇文章,说明博客运行正常!
用 Qt Creator 做个简单软件
用 Qt 做一个简单的软件
早年用 Pyinstaller 做 Python 的软件,感觉软件体量太大了,不够轻量级,动不动就上百 M。后来研究了一下,发现问题根源在于软件嵌入了环境里的各种大的包和库,例如 numpy 或 matplotlib,再加上自身的 PyQt,有多大可想而知。
后来为了轻量化 exe,了解到还有
cpp + Qt
Rust + egui
go + fyne
2 和 3 是新起之秀,好写,启动也快,界面还行,但数值/绘图库生态没 cpp 那么工业化,在学术科研上没啥优势,所以最后还是打算走传统主流的 cpp + Qt 算了。
此外 1 和 2/3 还有一个区别,Go/Fyne、Rust/egui 经常能一个 exe 拿走就跑,而 Qt 默认往往要 exe + 一堆 dll + plugins。这差异主要来自两点:静态链接的默认程度和插件/平台抽象的架构。
所谓的静态库(.lib/.a),就是在编译阶段,编译器会把库里所有用到的代码“复印”一份,直接塞进你的 .exe 文件里。缺点是体积大,更新麻烦。动态库(.dll/.so),编译时,.exe 里只记下了需要 ...
THE DESIGNER’S GUIDE TO SPICE AND SPECTRE
THE DESIGNER’S GUIDE TO SPICE AND SPECTRE
前言
前面对 DC 分析,瞬态分析和 AC 分析进行了比较详细的介绍,现在就能对 THE DESIGNER’S GUIDE TO SPICE AND SPECTRE 这本书进行快速概括与整合了。像我这种普通人也没很多时间对书本进行详阅,只需要提炼出最关键的内容和知识点即可,这大概也算我学过这本书了吧。
第一章:电路仿真
第一章不是教你怎么用仿真器,而是回答三个根本问题:
电路仿真是怎么发展到今天这一步的?
现代电路仿真器在算法层面到底在做什么?
DC / AC / Transient 分析在数学与算法上有什么本质区别?
可以理解为给后面所有“MNA + 数值算法 + 收敛性问题”的章节打地基。
历史视角(Historical Perspective)
为什么需要电路仿真?
1970 年代 IC 复杂度急剧上升
实物原型:
成本高
调试困难
必须在流片前评估设计
两条技术主线
IBM ASTAP:发展数值计算方法
Berkeley SPICE:
成为事实上的工业标准
核心成功 ...
电路仿真器中的交流分析
电路仿真器中的交流分析
前言
前面已经介绍了电路仿真器中 DC 分析和瞬态分析的基本机制与流程。可以看到,仿真器的核心任务始终是构造并求解由电路节点方程得到的代数方程组。对于包含非线性器件的电路,该方程组本质上是非线性的,通常通过 Newton 迭代在每一步将其线性化,并求解相应的线性子问题。
在瞬态仿真中,电路的微分方程通过数值积分方法(如后向欧拉法)在时间上离散,将时间微分算子替换为由当前时刻未知量和历史状态共同构成的代数表达式,例如
xn+1=xn+Δt f(xn+1),x^{n+1} = x^n + \Delta t\, f(x^{n+1}) ,
xn+1=xn+Δtf(xn+1),
从而把瞬态问题转化为一系列离散时间点上的非线性代数方程,并通过 Newton 迭代逐步求解。
J(xk) Δx=−f(xk)xk+1=xk+Δx⇒xk+1=xk−J−1(xk)f(xk)\begin{aligned}
J(x_k)\,\Delta x &= -f(x_k)\\
x_{k+1}&=x_k+\Delta x
\end{aligned}
\quad\Rightarrow\ ...












