Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

アーキテクチャ、動作、回路領域におけるマルチパスADCの検証

この例では、Mixed-Signal Blockset™ の時間インターリーブ アナログ/デジタル コンバーター (ADC) を使用して、不一致のインターリーブ ADC パスのオフセットおよびゲイン キャリブレーション エンジンを開発する方法を示します。IBIS-AMI エクスポート用のタイムインターリーブ ADC のアーキテクチャ表現については、ADC IBIS-AMI Model Based on COM (SerDes Toolbox) および Architectural 112G PAM4 ADC-Based SerDes Model (SerDes Toolbox) の例を参照してください。

Block diagram of SERDES receiver.

はじめに

高速 ADC (112Gb/s 以上) は、現在 SerDes レシーバーでは一般的になっています。これらのADCは、5~8ビットの有効分解能で、64GS/s以上の速度で入力アナログデータをサンプリングする必要があります[1,2]。このサンプル レートは FLASH ADC の能力を超えているため、この例では時間インターリーブ ADC を使用します。つまり、ADC バンクをラウンドロビン方式で使用して、必要な合計サンプル レート (Interleaved ADC (Mixed-Signal Blockset) ブロックのリファレンス ドキュメントを参照) を提供しながら、個々の ADC のサンプル レートを技術的に達成可能な範囲に保ちます。この例では、次に示すように 4 方向タイムインターリーブ ADC を使用します。

Time interleaved ADC

時間インターリーブ ADC は 4 つの独立した ADC を使用します。ADC[0] - ADC[3]。各 ADC には独立したゲインおよびオフセット エラー パラメータ値があります。これらのエラーを補正せずに放置すると、ADC 全体の有効ビット数 (ENOB) が減少します。次のセクションでは、Mixed Signal Blockset のタイムインターリーブ ADC を備えた Simulink® モデルを使用して、オフセットおよびゲイン エラーの影響を評価します。

プロジェクトとモデルを開く

提供されている ADC プロジェクトを開くと、multipath_adc.slx model が開きます。

openProject('multipath_adc_proj');

example2.png

Simulink の ADC を 評価

ADC への入力として、単一周波数正弦波とガウス ノイズ ソースのいずれかを選択します。ADC は、サンプリング クロック ソースによって定義された一定の間隔で入力をサンプリングします。補正を適用しない場合は、オフセットとゲインのキャリブレーション パラメータ (ocgc) をそれぞれ 0 と 1 に設定します。

時間インターリーブ ADC 間のゲインとオフセットの不一致が時間インターリーブ ADC 全体の直線性にどのように影響するかを視覚化するには、scripts フォルダーに提供されている run_adc_eval スクリプトを使用します。このスクリプトは、理想、オフセット不一致、ゲイン不一致、オフセットとゲインが不一致の時間インターリーブ ADC の 4 つのケースのプロットを生成します。4 つのケースはプロット内で 4 つの象限に分割され、次のように色分けされています。

  • 障害がない場合(オフセットおよびゲイン エラーなし)の背景は白になります。

  • オフセットはあるがゲイン エラーはない場合は、背景が青になります。

  • ゲインはあるがオフセット エラーがない場合、背景は緑色になります。

  • ゲイン エラーとオフセット エラーの両方がある場合、背景は赤になります。

set_param('multipath_adc/in_sel', 'sw', '1'); % Select input sinusoid
run_adc_eval
plot_time_domain

独立したADCの出力波形out[0] - out[3]が正しいように見えることに注意してください。ただし、独立した出力が時間インターリーブされると、滑らかな波形にはならず、明確な周期的なシグネチャが生まれます。オフセットのみの不一致とゲインのみの不一致では、シグネチャが異なります。このインターリーブによって発生するゲイン/オフセット ノイズにより、信号対ノイズ歪み比 (SNDR) が劣化します。

plot_spectrums

4 つの異なるケースにおける時間インターリーブ出力のスペクトルは、背景色スキームを使用して上にプロットされています。不一致のないケースでは、入力正弦波に対応する単一のトーンと、-80dB 未満のノイズ フロアが存在します。ノイズフロア振幅は ADC の量子化ノイズに直接関連しており、ADC の解像度によって決まります。SNDR は、次の式を使用して ADC の有効ビット数 (ENOB) にマッピングできます。

ENOB=(SNDR-1.76dB)6.02dB/b

ミスマッチがない場合の SNDR は 47.6 dB で、ENOB は 7.6 b になります。これは予想される 8b より低いですが、フルスケール (FS) の 75% または -2.5dB の入力信号も使用していることに注意してください。したがって、実際の SNDR は 50dB に近くなり、予想される ENOB は 8b になります。

オフセットとゲインの不一致により、ENOB が低下します。オフセット不一致の場合、SNDR は 20.9dB、ゲイン不一致の場合、SNDR は 23.3dB、ゲインとオフセット不一致の場合、SNDR は 18.8dB であることに注意してください。これは、ENOB が 3.2、3.6、2.8b に相当します。したがって、インターリーブされた ADC パス間に補償されていないゲインとオフセットの不一致が存在する場合、8b ADC は 3b ADC のように動作します。

ゲインとオフセットの補償入門

タイムインターリーブ ADC の ADC パス間のオフセットとゲインの不一致は、次の図に示すように、入力参照オフセット エラーと入力参照ゲイン エラーとしてモデル化できます。oe[0] - oe[3] は入力参照オフセット エラーで、ge[0] - ge[3] は入力参照ゲイン エラーです。

TI-ADC-impediments.png

正弦波トーンは、オフセットとゲインの不一致によって生じる信号歪みを測定するのに適した入力です。ただし、実際の ADC 入力は、特に ADC ベースの SerDes の場合、純音ではありません。入力信号には、チャネル ISI の重大度と使用される信号レベルの数に応じて、正規分布または均一分布としてモデル化できる振幅分布があります。ADC の上流のコンポーネントのオフセットを補正した後 (Verify SerDes Toolbox CTLE in Architectural, Behavioral, and Circuit Domains (SerDes Toolbox) の例を参照)、入力信号はゼロ平均分布 (0V 信号) になります。ただし、パス依存のオフセットとゲインの不一致が存在する場合、各 ADC パスから見たコードワード分布は、平均がゼロでも電力も等しくなくなります。

正弦波入力下での時間インターリーブ ADC パフォーマンスを評価するために使用したのと同じスクリプトを使用して、入力をランダム ノイズ ジェネレーターに切り替え、パス依存の出力平均と標準偏差のシフトをシミュレートできます。

まず、手動入力スイッチをダブルクリックして、正弦波ジェネレーターからランダム ノイズ ジェネレーターに変更します。次に、run_adc_eval スクリプトを再実行します。入力ソースが変更されると、スクリプトは、理想、オフセット不一致、ゲイン不一致、オフセットとゲインが不一致の時間インターリーブ ADC の 4 つのケースのサンプル分布プロットを生成します。

set_param('multipath_adc/in_sel', 'sw', '0'); % Select input random-noise generator
run_adc_eval
plot_histograms

ADC 間にゲインまたはオフセットの不一致がない場合、4 つの ADC (左上の 4 つのヒストグラム) の平均 (μ) と標準偏差 (σ) が等しいことに注意してください。ただし、他の 3 つのケースでは、オフセットやゲインが一致していないかどうかに応じて、ADC パス間で平均や標準偏差が異なります。平均 (オフセット) と標準偏差 (ゲイン) の不一致により、パスの不一致を定量化し、フィードバック ループを使用して補正できるようになります。

報酬制度

マルチパス ゲインとオフセット エラーを検知する方法がわかったので、次に必要となるのは、それらを修正する方法、つまりアクチュエータです。これは、下の図に示すように、アナログ領域でアナログからデジタルへの変換の前に行うことも、デジタル領域で変換した後に行うこともできます。この例では、下の図に示すように、各 ADC のパスの独立した制御を介して、アナログ領域のゲインとオフセットの不一致を補正します。ここで、oc[0:3]はオフセット補正であり、gc[0:3]は適用されるゲイン補正項です。

TI-ADC_compensation.png

実際の ADC では、電源投入時またはミッション モード中に定期的にゲインとオフセットのキャリブレーションが必要ですが、SerDes システム モデルでは不一致がモデル化されない可能性があります。ただし、時間インターリーブ ADC のモデルを使用して、SerDes システムがゲインおよびオフセット エラーを補正する能力をテストできます。キャリブレーション アルゴリズムは RTL として記述されており、Verilog シミュレータを使用して検証する必要があります。

機能的には正確だがビット精度ではないゲインおよびオフセット補正システムのバージョンが hdl_rtl/adc_cal.v で提供されています。

オフセット補正

オフセットを補正する RTL コード フラグメントを以下に示します。

 dc[gi] = dc[gi] + (offset_en? samples[gi] : 0);
 offset[gi] = -dc[gi] / 2**atten;

オフセット補正が有効になっている場合、各時間インターリーブ ADC パス (gi) の符号付きサンプル値 (samples[gi]) が統合されます。各 ADC パス (offset[gi]) に適用されるオフセットの収束は、制御フィードバック ループの帯域幅係数によって制御されます。したがって、オフセットは、測定された平均サンプル値を積分することによって補正され、フィードバックによって平均サンプル値がゼロ平均になるまで続きます。

ゲイン不一致を補正する RTL コード フラグメントを以下に示します。

pwr[gi] = pwr[gi] + (gain_en? - pwr[gi]/2**atten + ((samples[gi] < 0)? -samples[gi] : samples[gi])/2**atten : 0);
gain[gi] = gain[gi] + (gain_en? (tgt - pwr[gi]) / 4096 : 0);

ゲイン不一致補償ループは、入力信号の電力が既知であると想定します。pwr[gi] 信号を使用して、各パスごとに 1 つずつ、独立したパスの平均電力を測定します。各パスに適用されるゲイン補正は、予想される信号電力 (tgt) と ADC パスに従って測定された信号電力 (pwr[gi]) の差になります。ゲイン補償は、pwr[gi] が予想される信号電力 (tgt) と等しくなったときに安定します。

入力信号の平均信号電力が事前にわからない場合は、推定する必要があることに注意してください。1 つの方法は、個々のパス間の平均を予想される信号電力として使用することです: tgt=1NNpwr[gi]。このアプローチは一般的に柔軟性が高いですが、欠点もあります。時間インターリーブ ADC の入力から出力へのゲインが 1 にならない可能性があるのです。代わりに、ゲイン適応ループは、1 ではなく、個々のパス ゲインの平均に収束します。

ADCのSystemVerilog DPIコンポーネントを生成する

HDL Verifier™ を使用して、slbuild でゲイン エラーとオフセット エラーを調整可能なパラメーターとして指定した ADC の SystemVerilog-DPI コンポーネントを生成します。

% Build the DPI model
set_param('multipath_adc/ADC/Interleaved ADC', 'ScalarOutput', 'off');
slbuild('multipath_adc/ADC');
### Starting build procedure for model: ADC
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: /home/merickso/Documents/MATLAB/ExampleManager/merickso.Bdoc23b.j2328999.r23bI12_fixes/shared_hdlv_serdes_mixed-ex89389602/multipath_adc_proj/ADC_build
### Generated code for 'ADC' is up to date because no structural, parameter or code replacement library changes were found.
### Starting SystemVerilog DPI Component Generation
### Saving binary information cache.
### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux)
### '/home/merickso/Documents/MATLAB/ExampleManager/merickso.Bdoc23b.j2328999.r23bI12_fixes/shared_hdlv_serdes_mixed-ex89389602/multipath_adc_proj/ADC_build/ADC.mk' is up to date
### Building 'ADC': "/mathworks/devel/sbs/29/merickso.Bdoc23b.j2328999.r23bI12_fixes/matlab/bin/glnxa64/gmake"  -f ADC.mk all
### Successfully generated all binary outputs.
gmake: Nothing to be done for `all'.
### Successful completion of build procedure for model: ADC

Build Summary

Top model targets built:

Model  Action          Rebuild Reason                           
================================================================
ADC    Code compiled.  Compilation artifacts were out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 21.99s

HDLシミュレータを選択する

次に、HDL シミュレーターを選択して、手動で記述したゲインおよびオフセット補正ロジックとともにこの ADC シミュレーションを実行します。結果のデータは、Simulink の結果と比較するために記録されます。

% This is a MathWorks-specific setup. You must assign PATH and
% other settings specific to your environment for your chosen simulator.
setup_questa();

% Uncomment one of the following supported HDL simulator choices:
current_hdl_simulator = 'Questa'; % Windows or Linux
% current_hdl_simulator = 'Xcelium'; % Linux only
% current_hdl_simulator = 'VCS'; % Linux only
% current_hdl_simulator = 'Vivado'; % Linux only

補正ADCの結果

ADC オフセット補正アルゴリズムを実行するには、提供されている scripts/run_adc_cal_eval.m スクリプトを実行します。このスクリプトは、2 段階のプロセスで ADC オフセットおよびゲイン補正アルゴリズムを実行します。

まず、ガウスノイズ源から生成された信号を使用して、時間インターリーブ ADC が刺激されます。この入力は、入力に十分なランダム性を提供するため、ADC キャリブレーション エンジンは、独立した時間インターリーブ ADC パスのゲインとオフセットを適応させることができます。

次に、ADC 入力が正弦波ジェネレータに切り替えられ、現在校正されている ADC パスから生じる歪みを測定できるようになります。

補償

シミュレーション中、ADC ゲインとオフセット補正制御が記録されます。これらのトレースは、パス不一致なし、オフセット不一致のみ、ゲイン不一致のみ、ゲインとオフセットの両方の不一致の 4 つの異なるケースについて、以下の図に示されています。

run_adc_cal_eval
Reading pref.tcl

# 2022.2

# do scripts/tb_tran_questa.do
# 1.000000e+00,1.000000e+00,1.000000e+00,1.000000e+00
# 0.000000e+00,0.000000e+00,0.000000e+00,0.000000e+00
# Environment GAIN=1.000000e+00,1.000000e+00,1.000000e+00,1.000000e+00 and
#             OFST=0.000000e+00,0.000000e+00,0.000000e+00,0.000000e+00
# ** Warning: (vlib-34) Library already exists at "work".
# Errors: 0, Warnings: 1
# QuestaSim-64 vlog 2022.2 Compiler 2022.04 Apr 25 2022
# Start time: 13:14:10 on Jul 21,2023
# vlog -sv -timescale 1s/1fs ADC_build/ADC_dpi.sv 
# -- Compiling module ADC_dpi
# 
# Top level modules:
# 	ADC_dpi
# End time: 13:14:10 on Jul 21,2023, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# QuestaSim-64 vlog 2022.2 Compiler 2022.04 Apr 25 2022
# Start time: 13:14:10 on Jul 21,2023
# vlog -sv -timescale 1s/1fs hdl_rtl/adc_cal.v hdl_rtl/adc.v hdl_tb/adc_tb_tran.v 
# -- Compiling module adc_cal
# -- Compiling module adc
# -- Compiling module adc_tb_tran
# 
# Top level modules:
# 	adc_tb_tran
# End time: 13:14:10 on Jul 21,2023, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# vsim -c -sv_lib ADC_build/ADC work.adc_tb_tran "+GAIN=1.000000e+00,1.000000e+00,1.000000e+00,1.000000e+00" "+OFST=0.000000e+00,0.000000e+00,0.000000e+00,0.000000e+00" 
# Start time: 13:14:10 on Jul 21,2023
# ** Note: (vsim-8009) Loading existing optimized design _opt
# //  Questa Sim-64
# //  Version 2022.2 linux_x86_64 Apr 25 2022
# //
# //  Copyright 1991-2022 Mentor Graphics Corporation
# //  All Rights Reserved.
# //
# //  QuestaSim and its associated documentation contain trade
# //  secrets and commercial or financial information that are the property of
# //  Mentor Graphics Corporation and are privileged, confidential,
# //  and exempt from disclosure under the Freedom of Information Act,
# //  5 U.S.C. Section 552. Furthermore, this information
# //  is prohibited from disclosure under the Trade Secrets Act,
# //  18 U.S.C. Section 1905.
# //
# Loading sv_std.std
# Loading work.adc_tb_tran(fast)
# Loading ./ADC_build/ADC.so
# Running with offset error = [0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, ]
# Running with gain error = [1.000000e+00, 1.000000e+00, 1.000000e+00, 1.000000e+00, ]
# ** Note: $finish    : hdl_tb/adc_tb_tran.v(68)
#    Time: 65604214026 fs  Iteration: 1  Instance: /adc_tb_tran
# End time: 13:14:56 on Jul 21,2023, Elapsed time: 0:00:46
# Errors: 0, Warnings: 0
Reading pref.tcl

# 2022.2

# do scripts/tb_tran_questa.do
# 1.000000e+00,1.000000e+00,1.000000e+00,1.000000e+00
# -2.113878e-02,-1.431662e-02,-1.396702e-02,4.459506e-03
# Environment GAIN=1.000000e+00,1.000000e+00,1.000000e+00,1.000000e+00 and
#             OFST=-2.113878e-02,-1.431662e-02,-1.396702e-02,4.459506e-03
# ** Warning: (vlib-34) Library already exists at "work".
# Errors: 0, Warnings: 1
# QuestaSim-64 vlog 2022.2 Compiler 2022.04 Apr 25 2022
# Start time: 13:15:17 on Jul 21,2023
# vlog -sv -timescale 1s/1fs ADC_build/ADC_dpi.sv 
# -- Compiling module ADC_dpi
# 
# Top level modules:
# 	ADC_dpi
# End time: 13:15:17 on Jul 21,2023, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# QuestaSim-64 vlog 2022.2 Compiler 2022.04 Apr 25 2022
# Start time: 13:15:17 on Jul 21,2023
# vlog -sv -timescale 1s/1fs hdl_rtl/adc_cal.v hdl_rtl/adc.v hdl_tb/adc_tb_tran.v 
# -- Compiling module adc_cal
# -- Compiling module adc
# -- Compiling module adc_tb_tran
# 
# Top level modules:
# 	adc_tb_tran
# End time: 13:15:17 on Jul 21,2023, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# vsim -c -sv_lib ADC_build/ADC work.adc_tb_tran "+GAIN=1.000000e+00,1.000000e+00,1.000000e+00,1.000000e+00" "+OFST=-2.113878e-02,-1.431662e-02,-1.396702e-02,4.459506e-03" 
# Start time: 13:15:18 on Jul 21,2023
# ** Note: (vsim-8009) Loading existing optimized design _opt
# //  Questa Sim-64
# //  Version 2022.2 linux_x86_64 Apr 25 2022
# //
# //  Copyright 1991-2022 Mentor Graphics Corporation
# //  All Rights Reserved.
# //
# //  QuestaSim and its associated documentation contain trade
# //  secrets and commercial or financial information that are the property of
# //  Mentor Graphics Corporation and are privileged, confidential,
# //  and exempt from disclosure under the Freedom of Information Act,
# //  5 U.S.C. Section 552. Furthermore, this information
# //  is prohibited from disclosure under the Trade Secrets Act,
# //  18 U.S.C. Section 1905.
# //
# Loading sv_std.std
# Loading work.adc_tb_tran(fast)
# Loading ./ADC_build/ADC.so
# Running with offset error = [-2.113878e-02, -1.431662e-02, -1.396702e-02, 4.459506e-03, ]
# Running with gain error = [1.000000e+00, 1.000000e+00, 1.000000e+00, 1.000000e+00, ]
# ** Note: $finish    : hdl_tb/adc_tb_tran.v(68)
#    Time: 65604214026 fs  Iteration: 1  Instance: /adc_tb_tran
# End time: 13:16:05 on Jul 21,2023, Elapsed time: 0:00:47
# Errors: 0, Warnings: 0
Reading pref.tcl

# 2022.2

# do scripts/tb_tran_questa.do
# 9.513240e-01,1.088587e+00,9.431160e-01,9.167790e-01
# 0.000000e+00,0.000000e+00,0.000000e+00,0.000000e+00
# Environment GAIN=9.513240e-01,1.088587e+00,9.431160e-01,9.167790e-01 and
#             OFST=0.000000e+00,0.000000e+00,0.000000e+00,0.000000e+00
# ** Warning: (vlib-34) Library already exists at "work".
# Errors: 0, Warnings: 1
# QuestaSim-64 vlog 2022.2 Compiler 2022.04 Apr 25 2022
# Start time: 13:16:16 on Jul 21,2023
# vlog -sv -timescale 1s/1fs ADC_build/ADC_dpi.sv 
# -- Compiling module ADC_dpi
# 
# Top level modules:
# 	ADC_dpi
# End time: 13:16:16 on Jul 21,2023, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# QuestaSim-64 vlog 2022.2 Compiler 2022.04 Apr 25 2022
# Start time: 13:16:16 on Jul 21,2023
# vlog -sv -timescale 1s/1fs hdl_rtl/adc_cal.v hdl_rtl/adc.v hdl_tb/adc_tb_tran.v 
# -- Compiling module adc_cal
# -- Compiling module adc
# -- Compiling module adc_tb_tran
# 
# Top level modules:
# 	adc_tb_tran
# End time: 13:16:16 on Jul 21,2023, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# vsim -c -sv_lib ADC_build/ADC work.adc_tb_tran "+GAIN=9.513240e-01,1.088587e+00,9.431160e-01,9.167790e-01" "+OFST=0.000000e+00,0.000000e+00,0.000000e+00,0.000000e+00" 
# Start time: 13:16:16 on Jul 21,2023
# ** Note: (vsim-8009) Loading existing optimized design _opt
# //  Questa Sim-64
# //  Version 2022.2 linux_x86_64 Apr 25 2022
# //
# //  Copyright 1991-2022 Mentor Graphics Corporation
# //  All Rights Reserved.
# //
# //  QuestaSim and its associated documentation contain trade
# //  secrets and commercial or financial information that are the property of
# //  Mentor Graphics Corporation and are privileged, confidential,
# //  and exempt from disclosure under the Freedom of Information Act,
# //  5 U.S.C. Section 552. Furthermore, this information
# //  is prohibited from disclosure under the Trade Secrets Act,
# //  18 U.S.C. Section 1905.
# //
# Loading sv_std.std
# Loading work.adc_tb_tran(fast)
# Loading ./ADC_build/ADC.so
# Running with offset error = [0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, ]
# Running with gain error = [9.513240e-01, 1.088587e+00, 9.431160e-01, 9.167790e-01, ]
# ** Note: $finish    : hdl_tb/adc_tb_tran.v(68)
#    Time: 65604214026 fs  Iteration: 1  Instance: /adc_tb_tran
# End time: 13:17:03 on Jul 21,2023, Elapsed time: 0:00:47
# Errors: 0, Warnings: 0
Reading pref.tcl

# 2022.2

# do scripts/tb_tran_questa.do
# 9.513240e-01,1.088587e+00,9.431160e-01,9.167790e-01
# -2.113878e-02,-1.431662e-02,-1.396702e-02,4.459506e-03
# Environment GAIN=9.513240e-01,1.088587e+00,9.431160e-01,9.167790e-01 and
#             OFST=-2.113878e-02,-1.431662e-02,-1.396702e-02,4.459506e-03
# ** Warning: (vlib-34) Library already exists at "work".
# Errors: 0, Warnings: 1
# QuestaSim-64 vlog 2022.2 Compiler 2022.04 Apr 25 2022
# Start time: 13:17:14 on Jul 21,2023
# vlog -sv -timescale 1s/1fs ADC_build/ADC_dpi.sv 
# -- Compiling module ADC_dpi
# 
# Top level modules:
# 	ADC_dpi
# End time: 13:17:14 on Jul 21,2023, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# QuestaSim-64 vlog 2022.2 Compiler 2022.04 Apr 25 2022
# Start time: 13:17:14 on Jul 21,2023
# vlog -sv -timescale 1s/1fs hdl_rtl/adc_cal.v hdl_rtl/adc.v hdl_tb/adc_tb_tran.v 
# -- Compiling module adc_cal
# -- Compiling module adc
# -- Compiling module adc_tb_tran
# 
# Top level modules:
# 	adc_tb_tran
# End time: 13:17:14 on Jul 21,2023, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
# vsim -c -sv_lib ADC_build/ADC work.adc_tb_tran "+GAIN=9.513240e-01,1.088587e+00,9.431160e-01,9.167790e-01" "+OFST=-2.113878e-02,-1.431662e-02,-1.396702e-02,4.459506e-03" 
# Start time: 13:17:14 on Jul 21,2023
# ** Note: (vsim-8009) Loading existing optimized design _opt
# //  Questa Sim-64
# //  Version 2022.2 linux_x86_64 Apr 25 2022
# //
# //  Copyright 1991-2022 Mentor Graphics Corporation
# //  All Rights Reserved.
# //
# //  QuestaSim and its associated documentation contain trade
# //  secrets and commercial or financial information that are the property of
# //  Mentor Graphics Corporation and are privileged, confidential,
# //  and exempt from disclosure under the Freedom of Information Act,
# //  5 U.S.C. Section 552. Furthermore, this information
# //  is prohibited from disclosure under the Trade Secrets Act,
# //  18 U.S.C. Section 1905.
# //
# Loading sv_std.std
# Loading work.adc_tb_tran(fast)
# Loading ./ADC_build/ADC.so
# Running with offset error = [-2.113878e-02, -1.431662e-02, -1.396702e-02, 4.459506e-03, ]
# Running with gain error = [9.513240e-01, 1.088587e+00, 9.431160e-01, 9.167790e-01, ]
# ** Note: $finish    : hdl_tb/adc_tb_tran.v(68)
#    Time: 65604214026 fs  Iteration: 1  Instance: /adc_tb_tran
# End time: 13:18:02 on Jul 21,2023, Elapsed time: 0:00:48
# Errors: 0, Warnings: 0
plot_convergence

以下のグラフは、オフセットとゲインの両方のキャリブレーションの ADC キャリブレーション収束結果を示しています。初期オフセット/ゲイン エラーは十字マーカーを使用して表示され、必要な補正は円マーカーを使用して表示され、残差エラーは四角マーカーを使用して表示されます。

plot_convergence_fit

以下の図は、ゲインとオフセットのキャリブレーションが完了した後に測定された、時間インターリーブされた ADC ENOB の結果を示しています。ゲインおよびオフセット エラーがあった 3 つのケースでは、ゲイン/オフセット キャリブレーション後に ENOB が理想的なケースに復元されることに注意してください。

plot_time_domain

plot_spectrums

インターリーブ ADC の出力信号スペクトルは、ゲインとオフセットのキャリブレーションを実行した後の SNDR の改善を示しています。3 つのケースすべてにおいて、補償後の SNDR は 47.2 dB であることに注意してください。これはオフセットおよびゲイン エラーのないケースと同等であり、すべてのインターリーブ パスが一致していることを示します。

まとめ

時間インターリーブ ADC の ENOB は、インターリーブ パスのオフセットとゲインの不一致により大幅に低下する可能性があります。ただし、入力信号の特性がわかっている場合、具体的には入力信号自体にオフセットがない場合は、電源投入時またはミッション モード中に製造後のキャリブレーションを使用して、パス オフセットとゲインの不一致を検知して修正できます。アナログまたはデジタル フィードバックによるオフセットおよびゲイン補正エンジンを使用すると、結果として生じる ENOB の低下を大幅に削減できます。

参考文献

[1] Y. Krupnik 他、「10nm プロセスによる長距離チャネル向け 112 Gb/s PAM4 ADC ベース SERDES レシーバー」、2019 VLSI 回路シンポジウム、京都、日本、2019 年、pp. C266-C267、doi:10.23919/VLSIC.2019.8778136.

[2] E.-H. Chen および C.-K. K. Yang、「ADC ベースのシリアル I/O レシーバ」、IEEE Transactions on Circuits and Systems I:Regular Papers、第57巻、第9号、pp. 2248-2258、2010年9月、doi:10.1109/TCSI.2010.2071431.

[3] P. Chen、「ADCの静的非直線性補正のための全デジタルキャリブレーションアルゴリズム」、M.A.Sc.論文、トロント大学、2020年。

[4] D. Stepanovic、「時間インターリーブSAR A/Dコンバータのキャリブレーション技術」、カリフォルニア大学バークレー校博士論文、2012年。

関連するトピック