mcpField
M
matlab-model-serdes-systems

matlab-model-serdes-systems

github.com/matlabその他1.2k94 回インストール1 日前に更新
リポジトリ

matlab-model-serdes-systems について

SerDes Toolboxで高速シリアルリンクを扱う MATLAB ユーザー向けのスキルです。アーキテクチャ検討、イコライゼーション解析、波形検証、IBIS-AMIモデルの作成を扱い、APIの注意点も説明します。

主な機能

  1. 01NRZ・PAM-Nリンク構成の検討
  2. 02FFE、CTLE、DFEの評価
  3. 03Sパラメーターの読み込みとクロストークモデル化
  4. 04アイ、ジッター、リンク指標の解析
  5. 05IBIS-AMIモデルの生成と検証

活用シーン

  1. 01イコライゼーション構成ごとのリンクマージン比較
  2. 02測定データからのCTLEパラメーター適合
  3. 03波形処理とジッター分解
  4. 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.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 のアナログ特性(寄生容量、立ち上がり時間、終端インピーダンス)の特性評価
  • 標準外のイコライゼーション用にカスタムデータパスブロックを構築

チャネルのモデリングと特性評価

  • 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 で事前に読み込むか、10x EqualizationGain(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 生成」を参照)。

ワークフロー

設計の検討

多くのプロジェクトはここから始まります。目標は、チャネルに適したイコライゼーションのアーキテクチャと設定を見つけることです。

  1. 設計 — Tx/Rx ブロックとチャネル(損失モデルまたは S パラメーター)を含む SerdesSystem を作成します。
  2. 解析 — 統計結果には analysis、アイダイアグラムには plotStatEye、メトリクスには analysisReport を実行します。
  3. スイープ — チャネル損失、FFE タップ、CTLE ゲイン、DFE タップ、またはジッターを変化させて、設計空間をマッピングします。
  4. 比較 — COM、アイハイト、アイ幅を使って、アーキテクチャ(FFE のみ、FFE+CTLE、FFE+CTLE+DFE)を評価します。
  5. 選択 — マージンの目標を満たす構成を選び、イコライゼーション設定を固定します。

プログラムによる検討には SerdesSystem を、対話型 GUI での作業には serdesDesigner を使用してください。

波形処理

(オシロスコープやシミュレーションなどから)取得またはインポートした波形があり、それを直接イコライズして解析する場合:

  1. 読み込み — 波形をインポートし、タイミング(SampleInterval、SymbolTime)を定義します。
  2. イコライズ — WaveType = "Sample" を指定して、データパスブロック(FFE、CTLE、DFECDR)に通します。
  3. 解析 — eyeDiagramSI でアイダイアグラムを作成し、メトリクス(アイハイト、COM、VEC)を抽出します。
  4. ジッターの分解 — イコライズ後の波形に jitter() を実行し、TJ、RJ、DJ、DDJ、ISI の内訳を取得します。

Sample モードで DFECDR と DFE を使用する場合は、サンプルごとの 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. 検証 — コンパイル済みの DLL/SO を serdes.AMI で読み込み、動作参照モデルと比較します(インパルスには Init、波形には GetWave を使用)
  5. 相互検証 — Simulink の経路(Rx WaveOut を使った sim)を、時間領域の参照として推奨します。統計的な analysis()、システムオブジェクトの直接接続、コンパイル済み AMI DLL と比較します。reference/simulink-serdes-simulation.md を参照してください
  6. 反復 — 差異を修正し、再エクスポートして、すべての経路が一致するまで再検証します
AMI モデルタイプ

実行時に適応が必要なイコライゼーションブロックに基づいて、モデルタイプを選択します。

タイプInit_Returns_ImpulseGetWave_Exists用途
Init-OnlytruefalseLTI イコライゼーション(固定 FFE、CTLE)。統計解析に対応
GetWave-Onlyfalsetrue時間領域のみ。統計解析には非対応
Dualtruetrue適応型イコライゼーション(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
SParameterChannelS パラメーターからインパルス応答を生成します。.s4p から .s16p に対応(マルチポートの場合は Nx(K) 行列を返します:列 1=スルー、列 2 以降=アグレッサー)。プロパティ:FileName、SampleInterval、StopTime、PortOrder
eyeDiagramSI波形のアイダイアグラム(R2024a+)。手順:eyeObj(wave) — 出力なし。メトリクス:eyeHeight、eyeWidth、com、vec、margin
ctlefitCTLE の極/零点フィッター。インポート:ctlefit.readcsv。serdes.CTLE("Specification", "GPZ Matrix") 用に GPZ 行列を出力します
データパスブロック
ブロック役割モード値主なプロパティ
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。モードは非推奨です
serdes.AGC自動ゲイン制御0, 1TargetRMSVoltage, MaxGain, AveragingLength
serdes.VGA可変ゲインアンプ0, 1Gain
serdes.SaturatingAmplifierリミッティングアンプ0, 1Limit, 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 を使用してもかまいません。

  1. .m ファイル(例:serdes_pam4_design.m)を作成し、run_matlab_file で実行し、編集して再実行することで反復します
  2. 仕上げたスクリプトを納品します。先頭に %% 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

Copyright 2026 The MathWorks, Inc.

コメント