mcpField
M
matlab-model-serdes-systems

matlab-model-serdes-systems

github.com/matlab其他1.2k94 次安装1 天前更新
代码仓库

关于 matlab-model-serdes-systems

为 MATLAB SerDes Toolbox 用户提供高速串行链路建模与仿真指导,覆盖架构探索、均衡分析和 IBIS-AMI 模型交付。内容也包括常见 API 陷阱与验证流程。

主要功能

  1. 01探索 NRZ 与 PAM-N 链路架构
  2. 02评估 FFE、CTLE 和 DFE 均衡
  3. 03加载 S 参数并建模串扰
  4. 04分析眼图、抖动与链路指标
  5. 05生成并验证 IBIS-AMI 模型

适用场景

  1. 01比较不同均衡架构的链路裕量
  2. 02根据测量数据拟合 CTLE 参数
  3. 03处理波形并分解抖动
  4. 04为 EDA 工具编译和验证 AMI 模型

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-model-serdes-systems

安装后在 Claude Code 中输入/matlab-model-serdes-systems确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

manifest.yaml
reference/
channel-modeling.md
common-mistakes.md
custom-datapath-blocks.md
equalization-tuning.md
optimization.md
programmatic-ami-generation.md
serdes-api-reference.md
serdes-utilities.md
simulink-serdes-simulation.md
visualization-and-metrics.md
waveform-processing.md

详细介绍

建模和仿真 SerDes 系统

使用 SerDes Toolbox 设计、分析并交付高速串行链路模型。从架构探索到 IBIS-AMI 模型生成,覆盖 NRZ 和 PAM-N 链路(PAM3 至 PAM16)的完整工作流。

适用场景

系统设计和架构探索

  • 针对目标数据速率、信号方案(NRZ、PAM4、PAM-N)和通道损耗设计 SerDes 链路
  • 评估均衡架构(FFE、CTLE、DFE)并优化抽头设置
  • 扫描设计参数以找到最佳配置
  • 使用行业参考设计(PCIe、USB4、DDR5、CEI、UCIe)作为起点
  • 表征 Tx/Rx 模拟效应(寄生电容、上升时间、端接阻抗)
  • 为非标准均衡构建自定义数据通路模块

通道建模和表征

  • 将 S 参数 Touchstone 文件加载到 SerdesSystem
  • 对具有损耗曲线、串扰(FEXT/NEXT)和干扰源的通道进行建模
  • 通过 ctlefit 根据测量数据拟合 CTLE 传递函数

IBIS-AMI 模型生成

  • 为 Tx、Rx、Redriver 或 Retimer 配置构建 IBIS-AMI 模型
  • 导出到 Simulink,配置 AMI 参数,并编译 .ami/.ibs/.dll/.so
  • 使用 sim/parsim 编写 Simulink 仿真和参数扫描脚本

分析和验证

  • 运行统计仿真和时域仿真
  • 处理眼图(眼高、眼宽、COM、VEC、浴盆曲线)
  • 分解抖动(TJ、RJ、DJ、DDJ、DCD、ISI)
  • 根据行为基线验证编译后的 AMI 模型
  • 使用眼罩和抖动预算运行合规性检查

不适用场景

  • RF/微波电路设计、天线建模或基带 DSP 滤波器设计
  • 与 SerDes 无关的一般 Simulink 模型脚本编写

必须遵循的规则

系统设置
  • SymbolTime / SampleInterval 必须得到整数 SamplesPerSymbol——分数比会导致静默错误
  • TxModel/RxModel 是 Transmitter/Receiver 对象,不是元胞数组。使用 Transmitter('Blocks', {block1, block2}) 构造。Transmitter 要求属性名使用单引号——Transmitter("Blocks", ...) 会引发 ismember 错误。Receiver 和所有其他类接受双引号
  • 信号转换函数要求列向量——impulse2pulse、pulse2stateye 等函数在输入行向量时会报错
  • 加入 AnalogModel 和 JitterAndNoise 以获得真实结果——没有模拟模型的纯 Transmitter/Receiver 会产生过于乐观的 COM(高出 1-2 dB)。参数建议(上升时间、寄生 C、端接 R)请参阅 reference/equalization-tuning.md
均衡
  • 在 MATLAB 中直接使用数据通路模块时,显式设置 WaveType——Simulink 会自动设置,但 MATLAB 默认值为 "Sample"
  • 适配后的 DFE/CTLE 参数位于 results.outparams 中——不在模块对象上。执行 analysis() 后,sys.RxModel.Blocks{k}.TapWeights 仍保存初始值。在系统对象链中,适配后的抽头是第二个输出:[y, taps] = dfecdr(x)
  • 在 Sample 模式下,DFECDR Mode=0 会直通——DFE 仅在 Mode≥1 时生效。使用 Mode=1 从 outparams 预加载适配后的抽头以实现即时收敛,或使用 Mode=2 并将 EqualizationGain 设为 10 倍(9.6e-04),以实现链路自行收敛
  • 在系统对象链中,为 PAM-N 设置 DFECDR 的 Modulation——Simulink 会从模型工作区继承该值,但 MATLAB 默认值为 2(NRZ)。未设置时,PAM4 DFE 适配会静默失败
指标和波形
  • Metrics.summary.EW 的单位是皮秒(已缩放)——不要乘以 1e12。EH 的单位是伏特。PAM-N 的每项指标返回 N-1 个值(例如,PAM4 → 3 个眼图,PAM8 → 7 个眼图)
  • analysis() 返回的通道冲激响应单位是 V/s——使用 filter() 进行时域卷积时,需乘以 dt:filter(impulse * dt, 1, wave)。未缩放时,幅度会增大约 10^11 倍
  • pulse2wave 作用于所提供的激励信号——输出调制取决于输入模式(NRZ 或 PAM-N)
AMI 和 Simulink
  • Init-Only 模型无法自适应——如果 DFE 抽头或 CDR 在运行时收敛,则需要 Dual 模型(同时包含 Init 和 GetWave)
  • AMI 验证需要 Signal Integrity Toolbox——serdes.AMI 运行器和 AMI Simulink 模块都需要 SerDes Toolbox 和 Signal Integrity Toolbox
  • AMI GetWave:在分块循环中调用——serdes.AMI 会将 BlockSize(默认值为 1024)传递给 AMI_GetWave,因此每次调用只处理 BlockSize 个样本。必须在 for 循环中按 BlockSize 长度的块调用该对象。状态通过 DLL 内存句柄在调用之间保留
  • AMI GetWave:从 MATLAB 调用时设置 SkipFirstBlock = false——默认值(true)用于 Simulink 的内部信号缓冲,会导致第一个块未经处理直接通过
  • AMI Init:RowSize 必须与冲激响应长度匹配——如果 RowSize 与 numel(impulse) 不匹配,serdes.AMI 会导致 MATLAB 崩溃(进程终止且不报错)
  • 生成 AMI 需要 Simulink 模型——使用 IbisAmiManager GUI,或通过 serdes.AMIExport 以编程方式调用 export()(参见 Programmatic AMI Generation)

工作流

设计探索

大多数项目都从这里开始。目标是为你的通道找到合适的均衡架构和设置。

  1. 设计——创建包含 Tx/Rx 模块和通道(损耗模型或 S 参数)的 SerdesSystem
  2. 分析——运行 analysis 获取统计结果,运行 plotStatEye 绘制眼图,运行 analysisReport 获取指标
  3. 扫描——改变通道损耗、FFE 抽头、CTLE 增益、DFE 抽头或抖动,以绘制设计空间图
  4. 比较——使用 COM、眼高和眼宽评估不同架构(仅 FFE、FFE+CTLE、FFE+CTLE+DFE)
  5. 选择——选择满足裕量目标的配置,然后固定均衡设置

使用 SerdesSystem 进行编程探索;使用 serdesDesigner 进行交互式 GUI 操作。

波形处理

如果你有采集或导入的波形(例如,来自示波器或仿真),并希望直接对其进行均衡和分析:

  1. 加载——导入波形并定义时序(SampleInterval、SymbolTime)
  2. 均衡——在 WaveType = "Sample" 模式下,让信号流经数据通路模块(FFE、CTLE、DFECDR)
  3. 分析——使用 eyeDiagramSI 构建眼图,提取指标(眼高、COM、VEC)
  4. 分解抖动——对均衡后的波形运行 jitter(),分解 TJ、RJ、DJ、DDJ 和 ISI

DFECDR 和 DFE 在 Sample 模式下需要逐样本 for 循环;FFE 和 CTLE 可接受完整向量。直接均衡模式请参见 reference/waveform-processing.md。

IBIS-AMI 模型交付

当需要为 EDA 工具或 IP 交付编译后的模型(.ami/.ibs/.dll/.so)时:

  1. 导出 — 调用 exportToSimulink(sys),从冻结的设计生成 Simulink 模型
  2. 配置 — 通过 IbisAmiManager 或 serdes.AMIExport 设置 AMI 参数、IBIS 组件/引脚数据和模型类型
  3. 生成 — 通过 serdes.AMIExport 调用 export(),生成 .ami/.ibs 并编译 .dll/.so
  4. 验证 — 使用 serdes.AMI 加载编译后的 DLL/SO,并与行为参考进行比较(冲激使用 Init,波形使用 GetWave)
  5. 交叉检查 — Simulink 路径(使用 Rx WaveOut 的 sim)是首选的时域参考。与以下结果进行比较:统计分析 analysis()、系统对象直接链路以及编译后的 AMI DLL。请参阅 reference/simulink-serdes-simulation.md
  6. 迭代 — 修复差异,重新导出并重新验证,直到所有路径结果一致
AMI 模型类型

根据需要在运行时自适应的均衡模块选择模型类型:

类型Init_Returns_ImpulseGetWave_Exists用途
仅 InittruefalseLTI 均衡(固定 FFE、CTLE)。支持统计分析
仅 GetWavefalsetrue仅限时域。不支持统计分析
双模式truetrue自适应均衡(DFE、CDR)。支持所有分析类型

每个 IBIS-AMI 模型都按 IBIS 标准实现 AMI_Init(必需)、AMI_GetWave(可选)和 AMI_Close(必需)。

关键类

类用途
SerdesSystem顶层系统。方法:analysis、plotStatEye、plotImpulse、plotPulse、plotAlignedPulse、plotWavePattern、analysisReport、exportToSimulink
TransmitterTx 容器。构造方式:Transmitter('Blocks', {serdes.FFE(...)})
ReceiverRx 容器。构造方式:Receiver('Blocks', {serdes.CTLE(...), serdes.DFECDR(...)})
ChannelData通道规范。属性:ChannelLossdB、ChannelLossFreq(默认值为 5 GHz — 必须覆盖为奈奎斯特频率)、ChannelDifferentialImpedance,或 Impulse/dt
JitterAndNoiseIBIS 7.0 抖动/噪声。包含 4 组:Tx 抖动(Rj/Dj/DCD/Sj)、Rx 抖动、Rx 时钟恢复(5 个参数,在 RxClockMode='clocked'、'convolved' 或 'normal' 时启用)、Rx 噪声。数值单位为秒(默认)或 UI。请参阅 reference/serdes-api-reference.md
serdes.AMI运行编译后的 AMI DLL/SO。调用方式:[waveOut, impulseOut] = ami(waveIn, impulseIn, clockIn)
serdes.AMIExport以编程方式导出 AMI(R2026a+)。方法:export、getExportSettings。属性:ModelTypeTx、DLLFiles、LinuxCrossCompile
SParameterChannel将 S 参数转换为冲激响应。支持 .s4p 至 .s16p(多端口返回 Nx(K) 矩阵:第 1 列为直通,后续列为干扰源)。属性:FileName、SampleInterval、StopTime、PortOrder
eyeDiagramSI波形眼图(R2024a+)。步骤:eyeObj(wave) — 无输出。指标:eyeHeight、eyeWidth、com、vec、margin
ctlefitCTLE 极点/零点拟合器。导入:ctlefit.readcsv。输出:供 serdes.CTLE("Specification", "GPZ Matrix") 使用的 GPZ 矩阵
Datapath Blocks
模块作用模式值主要属性
serdes.FFE前馈均衡器0, 1TapWeights、TapSpacing、Normalize
serdes.CTLE连续时间线性均衡器0, 1, 2Specification、DCGain、ACGain、PeakingGain、GPZ
serdes.DFECDRDFE + 时钟恢复0, 1, 2TapWeights、CDRMode、PhaseDetector、Count
serdes.DFE独立 DFE0, 1, 2TapWeights、EqualizationGain、EqualizationStep
serdes.CDR独立 CDR0, 1CDRMode、Count、Step、Sensitivity。Mode 已弃用
serdes.AGC自动增益控制0, 1TargetRMSVoltage、MaxGain、AveragingLength
serdes.VGA可变增益放大器0, 1Gain
serdes.SaturatingAmplifier限幅放大器0, 1Limit、LinearGain、Specification
serdes.PassThrough空操作占位符——

**模式值:**0 = 固定(不导出),1 = 固定(导出为 AMI 参数),2 = 自适应(GetWave)。只有 CTLE、DFECDR 和 DFE 支持 Mode=2。

先设置 CTLE Specification,再设置增益属性——使用默认规格时设置 ACGain 会触发警告。GPZ 矩阵要求 Mode=1,这样 ConfigSelect 才能切换行。有关 4 种规格选项,请参阅 reference/equalization-tuning.md。

模式

每个参考文件都包含适用于其主题的可执行代码模式。编写代码前,请先加载相关参考文件——其中包含正确的调用约定、构造函数参数和属性名称。完整的路由映射请参阅下方“约定”中的“参考资料”表。

常见错误

请参阅 reference/common-mistakes.md,其中记录了 37 个反模式,并提供了错误/正确代码对,涵盖 API 误用、属性名称错误、静默失败和性能问题。

约定

设计
  • 使用 SerdesSystem 进行程序化设计;使用 serdesDesigner 进行交互式探索。导出前务必运行 analysis/plotStatEye
  • 重要:ChannelLossFreq 默认值为 5 GHz——务必覆盖为奈奎斯特频率(1/(2*SymbolTime))。否则,5 GHz 下的 15 dB 在奈奎斯特频率下会变成 40+ dB,导致眼图闭合。真实信道请使用 SParameterChannel
  • analysis() 不会自动优化 FFE 抽头——请使用规范的去加重设置,使 sum(abs(taps)) ≈ 1.0
  • 统计求解器会自动优化初始化为零的 DFE 抽头
  • 行业参考设计:serdesDesigner 或 openExample('serdes/PCIe5TransmitterReceiverIBISAMIModelExample')。起始配置请参阅 reference/equalization-tuning.md
可视化和指标
  • 所有 SerdesSystem 绘图方法(plotStatEye、plotImpulse、plotPulse、plotAlignedPulse、plotWavePattern)都会在当前坐标区中绘制——多面板布局请使用 tiledlayout/nexttile 或 subplot
  • 波形眼图使用 eyeDiagramSI(R2024a+);抖动分解使用 jitter(R2024b+)
  • WaveType 为 "Sample" 时,DFECDR/DFE 需要标量(逐样本)输入;FFE/CTLE 接受完整向量
  • 使用 pulse2wave 生成 PRBS 波形时,请询问用户 PRBS 阶数和符号数量——如果用户未指定,默认使用 PRBS-10(1023 个符号)
  • pulse2stateye 绘图请使用 serdes.utilities.SignalIntegrityColorMap(而非 hot/parula)。进行合规性检查时,请使用 margin(eyeObj, eyeMask)
  • 有关所有绘图方法、指标字段/单位、eyeDiagramSI 和 jitter,请参阅 reference/visualization-and-metrics.md
AMI 导出与验证
  • 使用 serdes.AMIExport 和 export() 以编程方式生成 AMI,而不是使用 slbuild(仅适用于旧版 R2025b 及更早版本)
  • 在将编译后的 DLL/SO 发送给 EDA 工具之前,使用 serdes.AMI 进行验证——包括 Init(脉冲相关性)和 GetWave(波形链)
  • Simulink 是首选的时域路径——对于自适应系统,使用 Rx WaveOut 执行 sim() 是真实基准。与系统对象链和编译后的 AMI DLL 进行比较,以交叉验证。所有时域路径都使用相同的 PRBS 激励
  • Simulink 模块上的 AMI 导出参数使用 *AMI 后缀('ModeAMI'、'TapWeightsAMI');模型级设置通过 IbisAmiManager 或 serdes.AMIExport 配置
  • 工具箱不附带已编译的 DLL/SO。使用 serdes.utilities.createCrossCompiler 为 Linux 交叉编译 .so
脚本优先工作流

对于设计、分析或扫描任务——将代码写入磁盘上的 .m 文件,而不是内联编写 MCP 代码片段。对于快速的一次性检查,可以使用内联 evaluate_matlab_code。

  1. 创建一个 .m 文件(例如 serdes_pam4_design.m),通过 run_matlab_file 运行,编辑后重新运行以进行迭代
  2. 交付完善的脚本——顶部包含 %% Parameters 区块、使用 %% Section 标题,并在末尾使用 fprintf 输出摘要
参考资料
在以下情况下加载……参考资料
构建或修改 SerdesSystemreference/serdes-api-reference.md
调试错误的 API 名称或静默失败reference/common-mistakes.md
使用 S 参数文件或串扰reference/channel-modeling.md
调整 CTLE、FFE、DFE 或拟合传递函数reference/equalization-tuning.md
扫描参数或运行 GA 优化reference/optimization.md
绘制眼图、读取指标或分解抖动reference/visualization-and-metrics.md
直接均衡采集或导入的波形reference/waveform-processing.md
导出到 Simulink、编译 AMI DLL 或验证 AMI 模型reference/programmatic-ami-generation.md
编写 Simulink 仿真或 parsim 扫描脚本reference/simulink-serdes-simulation.md
构建自定义数据通路模块reference/custom-datapath-blocks.md
查找实用函数(SNR、ICN、重采样)reference/serdes-utilities.md

版权所有 2026 The MathWorks, Inc.

评论

支持 Markdown