matlab-model-serdes-systems について
SerDes Toolboxで高速シリアルリンクを扱う MATLAB ユーザー向けのスキルです。アーキテクチャ検討、イコライゼーション解析、波形検証、IBIS-AMIモデルの作成を扱い、APIの注意点も説明します。
主な機能
- 01NRZ・PAM-Nリンク構成の検討
- 02FFE、CTLE、DFEの評価
- 03Sパラメーターの読み込みとクロストークモデル化
- 04アイ、ジッター、リンク指標の解析
- 05IBIS-AMIモデルの生成と検証
活用シーン
- 01イコライゼーション構成ごとのリンクマージン比較
- 02測定データからのCTLEパラメーター適合
- 03波形処理とジッター分解
- 04EDAツール向け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.yamlreference/channel-modeling.mdcommon-mistakes.mdcustom-datapath-blocks.mdequalization-tuning.mdoptimization.mdprogrammatic-ami-generation.mdserdes-api-reference.mdserdes-utilities.mdsimulink-serdes-simulation.mdvisualization-and-metrics.mdwaveform-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 のアナログ特性(寄生容量、立ち上がり時間、終端インピーダンス)の特性評価
- 標準外のイコライゼーション用にカスタムデータパスブロックを構築
チャネルのモデリングと特性評価
- Touchstone S パラメーターファイルを 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オブジェクトです — cell 配列ではありません。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には初期値が保持されます。システムオブジェクトのチェーンでは、適応後のタップは2 番目の出力です:[y, taps] = dfecdr(x) - DFECDR の Mode=0 は Sample モードでパススルーです — DFE は Mode≥1 の場合にのみ適用されます。すぐに収束させるには、
outparamsから適応後のタップを Mode=1 で事前に読み込むか、10xEqualizationGain(9.6e-04)を指定して Mode=2 を使用し、チェーンを自己収束させます - システムオブジェクトのチェーンで 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に渡すため、1 回の呼び出しで処理されるのはBlockSize個のサンプルのみです。BlockSize個ずつのチャンクで、オブジェクトをforループ内で呼び出す必要があります。状態は DLL メモリハンドルを介して呼び出し間で保持されます。 - MATLAB から呼び出す場合は
SkipFirstBlock = falseに設定してください。デフォルトのtrueは Simulink の内部信号バッファリング用であり、最初のブロックが処理されずに通過します。 - AMI Init:
RowSizeはインパルスの長さと一致させる必要があります。RowSizeがnumel(impulse)と一致しない場合、serdes.AMIは MATLAB をクラッシュさせます(エラーは表示されず、プロセスが終了します)。 - AMI の生成には Simulink モデルが必要です。GUI の
IbisAmiManagerを使用するか、プログラムからserdes.AMIExportとexport()を使用してください(「プログラムによる AMI 生成」を参照)。
ワークフロー
設計の検討
多くのプロジェクトはここから始まります。目標は、チャネルに適したイコライゼーションのアーキテクチャと設定を見つけることです。
- 設計 — Tx/Rx ブロックとチャネル(損失モデルまたは S パラメーター)を含む
SerdesSystemを作成します。 - 解析 — 統計結果には
analysis、アイダイアグラムにはplotStatEye、メトリクスにはanalysisReportを実行します。 - スイープ — チャネル損失、FFE タップ、CTLE ゲイン、DFE タップ、またはジッターを変化させて、設計空間をマッピングします。
- 比較 — COM、アイハイト、アイ幅を使って、アーキテクチャ(FFE のみ、FFE+CTLE、FFE+CTLE+DFE)を評価します。
- 選択 — マージンの目標を満たす構成を選び、イコライゼーション設定を固定します。
プログラムによる検討には SerdesSystem を、対話型 GUI での作業には serdesDesigner を使用してください。
波形処理
(オシロスコープやシミュレーションなどから)取得またはインポートした波形があり、それを直接イコライズして解析する場合:
- 読み込み — 波形をインポートし、タイミング(
SampleInterval、SymbolTime)を定義します。 - イコライズ —
WaveType = "Sample"を指定して、データパスブロック(FFE、CTLE、DFECDR)に通します。 - 解析 —
eyeDiagramSIでアイダイアグラムを作成し、メトリクス(アイハイト、COM、VEC)を抽出します。 - ジッターの分解 — イコライズ後の波形に
jitter()を実行し、TJ、RJ、DJ、DDJ、ISI の内訳を取得します。
Sample モードで DFECDR と DFE を使用する場合は、サンプルごとの for ループが必要です。FFE と CTLE はベクトル全体を受け付けます。直接イコライゼーションのパターンについては、reference/waveform-processing.md を参照してください。
IBIS-AMI モデルの提供
EDA ツールや IP の提供に使用するコンパイル済みモデル(.ami/.ibs/.dll/.so)が必要な場合:
- エクスポート —
exportToSimulink(sys)を呼び出し、固定した設計から Simulink モデルを生成します - 設定 —
IbisAmiManagerまたはserdes.AMIExportを使用して、AMI パラメーター、IBIS コンポーネント/ピンのデータ、モデルタイプを設定します - 生成 —
serdes.AMIExportでexport()を実行して、.ami/.ibsを生成し、.dll/.soをコンパイルします - 検証 — コンパイル済みの DLL/SO を
serdes.AMIで読み込み、動作参照モデルと比較します(インパルスには Init、波形には GetWave を使用) - 相互検証 — Simulink の経路(Rx WaveOut を使った
sim)を、時間領域の参照として推奨します。統計的なanalysis()、システムオブジェクトの直接接続、コンパイル済み AMI DLL と比較します。reference/simulink-serdes-simulation.mdを参照してください - 反復 — 差異を修正し、再エクスポートして、すべての経路が一致するまで再検証します
AMI モデルタイプ
実行時に適応が必要なイコライゼーションブロックに基づいて、モデルタイプを選択します。
| タイプ | Init_Returns_Impulse | GetWave_Exists | 用途 |
|---|---|---|---|
| Init-Only | true | false | LTI イコライゼーション(固定 FFE、CTLE)。統計解析に対応 |
| GetWave-Only | false | true | 時間領域のみ。統計解析には非対応 |
| Dual | true | true | 適応型イコライゼーション(DFE、CDR)。すべての解析タイプに対応 |
すべての IBIS-AMI モデルは、IBIS 標準に従って AMI_Init(必須)、AMI_GetWave(任意)、AMI_Close(必須)を実装します。
主なクラス
| クラス | 目的 |
|---|---|
SerdesSystem | システムの最上位クラス。メソッド:analysis、plotStatEye、plotImpulse、plotPulse、plotAlignedPulse、plotWavePattern、analysisReport、exportToSimulink |
Transmitter | Tx コンテナー。構築:Transmitter('Blocks', {serdes.FFE(...)}) |
Receiver | Rx コンテナー。構築:Receiver('Blocks', {serdes.CTLE(...), serdes.DFECDR(...)}) |
ChannelData | チャネル仕様。プロパティ:ChannelLossdB、ChannelLossFreq(既定値は 5 GHz — ナイキスト周波数に必ず変更してください)、ChannelDifferentialImpedance、または Impulse/dt |
JitterAndNoise | IBIS 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=スルー、列 2 以降=アグレッサー)。プロパティ:FileName、SampleInterval、StopTime、PortOrder |
eyeDiagramSI | 波形のアイダイアグラム(R2024a+)。手順:eyeObj(wave) — 出力なし。メトリクス:eyeHeight、eyeWidth、com、vec、margin |
ctlefit | CTLE の極/零点フィッター。インポート:ctlefit.readcsv。serdes.CTLE("Specification", "GPZ Matrix") 用に GPZ 行列を出力します |
データパスブロック
| ブロック | 役割 | モード値 | 主なプロパティ |
|---|---|---|---|
serdes.FFE | フィードフォワード等化器 | 0, 1 | TapWeights, TapSpacing, Normalize |
serdes.CTLE | 連続時間線形イコライザー | 0, 1, 2 | Specification, DCGain, ACGain, PeakingGain, GPZ |
serdes.DFECDR | DFE +クロックリカバリー | 0, 1, 2 | TapWeights, CDRMode, PhaseDetector, Count |
serdes.DFE | 単独の DFE | 0, 1, 2 | TapWeights, EqualizationGain, EqualizationStep |
serdes.CDR | 単独の CDR | 0, 1 | CDRMode, Count, Step, Sensitivity。モードは非推奨です |
serdes.AGC | 自動ゲイン制御 | 0, 1 | TargetRMSVoltage, MaxGain, AveragingLength |
serdes.VGA | 可変ゲインアンプ | 0, 1 | Gain |
serdes.SaturatingAmplifier | リミッティングアンプ | 0, 1 | Limit, LinearGain, Specification |
serdes.PassThrough | 何もしないプレースホルダー | — | — |
モード値: 0 = 固定(エクスポートされません)、1 = 固定(AMI パラメーターとしてエクスポート)、2 = 適応型(GetWave)。Mode=2 をサポートするのは CTLE、DFECDR、DFE のみです。
ゲインプロパティを設定する前に CTLE の Specification を設定してください。デフォルトの仕様で ACGain を使用すると、警告が発生します。GPZ Matrix で ConfigSelect による行の切り替えを行うには、Mode=1 が必要です。 4 つの仕様オプションについては、reference/equalization-tuning.md を参照してください。
パターン
各リファレンスファイルには、該当するトピックの実行可能なコードパターンが含まれています。コードを記述する前に関連するリファレンスを読み込んでください。正しい呼び出し規約、コンストラクターの引数、プロパティ名が記載されています。ルーティングの全体図については、以下の「規約」にある「リファレンス」表を参照してください。
よくある間違い
API の誤用、誤ったプロパティ名、サイレントな失敗、パフォーマンス上の落とし穴を対象とする、誤ったコードと正しいコードのペアを含む 37 件のアンチパターンについては、reference/common-mistakes.md を参照してください。
規約
設計
- プログラムによる設計には
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のプロットには、hot/parulaではなくserdes.utilities.SignalIntegrityColorMapを使用します。コンプライアンスの確認にはmargin(eyeObj, eyeMask)を使用します- すべてのプロットメソッド、メトリクスのフィールド/単位、eyeDiagramSI、jitter については、
reference/visualization-and-metrics.mdを参照してください
AMI のエクスポートと検証
- プログラムで AMI を生成するには、
slbuild(従来の方法で、R2025b 以前のみ)ではなく、export()とともにserdes.AMIExportを使用します - EDA ツールに送信する前に、
serdes.AMIでコンパイル済み DLL/SO を検証します。Init(インパルス相関)と GetWave(波形チェーン)の両方を検証してください - 時間領域の優先経路は Simulink です。適応システムでは、Rx WaveOut を使用した
sim()が基準となります。クロスチェックとして、システムオブジェクトのチェーンおよびコンパイル済み AMI DLL と比較します。すべての時間領域経路で同じ PRBS 刺激を使用してください - Simulink ブロックの AMI エクスポートパラメーターには
*AMIサフィックスを使用します('ModeAMI'、'TapWeightsAMI')。モデルレベルの設定にはIbisAmiManagerまたはserdes.AMIExportを使用します - コンパイル済み DLL/SO はツールボックスに同梱されていません。Linux 用の
.soへのクロスコンパイルにはserdes.utilities.createCrossCompilerを使用します
スクリプト優先のワークフロー
設計、解析、またはスイープのタスクでは、インラインの MCP スニペットではなく、コードをディスク上の .m ファイルに記述します。簡単な単発の確認には、インラインの evaluate_matlab_code を使用してもかまいません。
.mファイル(例:serdes_pam4_design.m)を作成し、run_matlab_fileで実行し、編集して再実行することで反復します- 仕上げたスクリプトを納品します。先頭に
%% Parametersブロックを置き、%% Sectionヘッダーを使用し、最後に要約をfprintfで出力します
参考資料
| 次の場合に読み込みます... | 参考資料 |
|---|---|
SerdesSystem を構築または変更する場合 | reference/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、resample)を調べる場合 | reference/serdes-utilities.md |