理想的な50ohmではない負荷が接続された場合のEYEの計算方法

以前の記事では、MatlabでSparameterからEYE Diagramを計算しました。このときのEYEは、理想的な伝送条件のEYEです。理想的というのは、ドライバの駆動インピーダンスが50ohm (差動で100ohm), 負荷のインピーダンスが50ohm (差動で100ohm)という意味です。


実際のシステムでは、この条件は成り立ちません。ドライバや負荷のDCの抵抗値は、素子のばらつきにより50ohmから+/-10%くらいばらつきます。また、ドライバや負荷についている寄生容量によってインピーダンス成分も発生します。ドライバや負荷が理想的ではない場合の、周波数ドメインでの伝送特性 (Voltage Transfer Function) は、この式を用いて計算することができます。この式は、元々はこの資料に載っていたものです。


上の資料は、実は高速伝送のSignal Integrityについての講義資料の一部を抜粋したものです。おおもとの講義資料は、Intel Higher EducationのECLT 865, Signal Integrity on System Bus TechnologyというクラスのLectures 7-9 Introduction to Frequency Domain Analysisというレクチャーに含まれています。理想的ではない負荷が接続された場合のVoltage Transfer Functionの式を、Signal Flow Graphを使って導き出しています。このSignal Flow Graphの計算がずっと理解できずに困っていたのですが、最近になってこの本を読んでやっと理解することが出来ました。この本は、S-parameterにかかわる計算式をとても分かりやすく説明してくれています。


Voltage Transfer Functionの式をMatlabに入力して、負荷の抵抗値や寄生容量の有無によって周波数ドメインでの伝送特性がどのように変化するかを、Backplaneのs-paraを用いて計算してみました。下のグラフは、負荷の抵抗値を40ohm, 50ohm, 60ohmと変えた場合です。40ohmにすると、減衰量が少しだけ大きくなり、60ohmの場合は減衰量が少しだけ小さくなることが分かります。


こちらは、1pFの寄生容量をドライバ、負荷の両方につけた場合です。寄生容量がつくと、周波数特性が「波打つ」ようになります。時間ドメインでみると、小さな反射が起きていると思われます。


使用したMatlabソースコードはこんな感じです。ここで計算したVoltage Transfer Functionを用いて、昔の記事に書かれている方法で時間ドメインの波形を求めれば、負荷が理想的ではない場合のEYE diagramを表示されることができます。

Z0    = 50;
DrvR  = 50;
DrvC  = 1e-12;
LoadR = 50;
LoadC = 1e-12;

if DrvC
    DrvZcap = 1./(2 .* pi .* freq .* DrvC.*j);
    DrvZ = DrvR .* DrvZcap ./ (DrvR + DrvZcap);
else
    DrvZ = DrvR * ones(1, length(freq));
end

if LoadC
    LoadZcap = 1./(2 .* pi .* freq .* LoadC.*j);
    LoadZ = LoadR .* LoadZcap ./ (LoadR + LoadZcap);
else
    LoadZ = LoadR * ones(1, length(freq));
end

DrvRefC  = (DrvZ  - Z0) ./ (DrvZ  + Z0);
LoadRefC = (LoadZ - Z0) ./ (LoadZ + Z0);

VoltageTF = sdd21.*(1 + LoadRefC).*(1 - DrvRefC) ./ ...
      (1 - sdd11.*DrvRefC - sdd22.*LoadRefC - sdd21.*sdd12.*DrvRefC.*LoadRefC + sdd11.*sdd22.*DrvRefC.*LoadRefC);

% figure;
plot(freq*1e-9, 20*log10(abs(VoltageTF)), 'r');