Main Content

Analysis of a Single Ended Via for Proper Placement of Ground Return Vias for 40+ Gbps Signaling

This example shows how to model the return path of single ended printed circuit board vias using the via analysis feature in RF PCB Toolbox viaSingleEnded.

The via analysis feature combines a detailed, efficient model of the via return path to enable detailed analysis of the effect of nearby ground return vias (GRVs) on the high frequency performance of the signal via. As demonstrated through measurement and modeling [1, 2], GRVs can produce resonances at high frequencies, with surprising results. This example demonstrates how you can use the via analysis feature to reproduce the model results present in [1]. The via analysis feature has also been used to model crosstalk in differential vias [3].

For more information, see Eigenmode-Based Solver for PCB Vias.

Board set-up

The structure under study is a single PCB layer for one of the single ended via sites designated as “square” in the figure below. The via sites are shown as black circles, and you can see how the single ended traces are routed to those vias. The GRVs are shown as grey circles [1].

A single ended via is surrounded by a 2mm square of GRVs. There are additional GRVs outside of the square, and this example shows you how to model a total of eight GRVs in this pattern.

This example gradually builds the structure under study by adding one or more GRVs in each section, starting with one GRV. Each section shows the analysis and results for the geometry in that section so that you can observe how the via response changes with each additional GRV or GRVs.

The following code shows how you can describe the board geometry and materials programmatically.

Board Parameters

Define board dimensions

d = 1.9990e-04; % Via barrel diameter, m
D = 7.8892e-04; % Antipad diameter, m
vSignalViaAntipad = shape.Circle('Radius',D/2);
vSignalViaPad = shape.Circle('Radius',2.5e-4);
kbi0_ch0 = [0 0]; % Signal Via Locations, m
kbi0_ch0_grv = [-1e-3 1e-3;-1e-3 -1e-3;1e-3 -1e-3;1e-3 1e-3]; % Ground Return Via Locations, m

Material properties of Megtron 7

The following code defines a dielectric object that describes the propagation constant as a function of frequency for the dielectric used in the layer containing the via [4].

Er = 3.15; % Dielectric permittivity 
tand = 2e-3; % Dielectric loss tangent
T = 2.2027e-04; % Dielectric layer thickness, m
fspec = 1e9; % Dielectric frequency specification, Hz
sub = dielectric(Name="MEG7",EpsilonR=Er,LossTangent=tand,Thickness=T,...
    Frequency=fspec) % Substrate
sub = 
  dielectric with properties:

           Name: 'MEG7'
       EpsilonR: 3.1500
    LossTangent: 0.0020
      Thickness: 2.2027e-04

For more materials see catalog

Computation of S-parameters

One single ended via with one GRV

This section builds the via with a single GRV, computes the S parameters for that site and displays the S parameters and the site geometry.

The viaSingleEnded object is constructed using a series of name/value pairs to set the object Properties. The Substrate Property was defined as a dielectric object in the previous section.

vSVLocations = [kbi0_ch0 1 3];
vGRVLocations = [kbi0_ch0_grv(1,:) 1 3];
vPorts = {1 1 d "Vertical";...
    1 3 d "Vertical"};

Create a viaSIngleEnded:

obj = viaSingleEnded(...
    "SignalLayer",[1 3],...
    "GroundLayer",[1 3],...
    "Substrate",sub,...
    "SignalViaLocations",vSVLocations,...
    "SignalViaDiameter",d,...
    "SignalViaFinishedDiameter",0.9*d,...
    "SignalViaPad",vSignalViaPad,...
    "SignalViaAntipad",vSignalViaAntipad,...
    "GroundReturnViaLocations",vGRVLocations,...
    "GroundReturnViaDiameter",d,...
    "GroundReturnViaFinishedDiameter",0.9*d,...
    "SignalTable",vPorts)
obj = 
  viaSingleEnded with properties:

   Conducting Layers
                        SignalLayer: [1 3]
                        GroundLayer: [1 3]
                          Conductor: [1x1 metal]

   Dielectric Layers
                          Substrate: [1x1 dielectric]

   Signal Vias
                 SignalViaLocations: [0 0 1 3]
                  SignalViaDiameter: 1.9990e-04
          SignalViaFinishedDiameter: 1.7991e-04
                       SignalViaPad: [1x1 shape.Circle]
                   RemoveUnusedPads: 1
                   SignalViaAntipad: [1x1 shape.Circle]

   Ground Return Vias
           GroundReturnViaLocations: [-1.0000e-03 1.0000e-03 1 3]
            GroundReturnViaDiameter: 1.9990e-04
    GroundReturnViaFinishedDiameter: 1.7991e-04

   Ports
                        SignalTable: {2x4 cell}

Display PCB structure

The show function of the viaSingleEnded object displays the geometry of the object.

figure
show(obj)

Figure contains an axes object. The axes object with title viaSingleEnded element, xlabel x (mm), ylabel y (mm) contains 11 objects of type patch, surface. These objects represent Copper, feed, MEG7, \infty board edge.

Plot Return Loss and Insertion Loss

The S parameters are calculated using a function of the viaSingleEnded object.

df = 10e6;
fmax = 60e9;
nfreq = ceil(fmax/df);
f = linspace(df,fmax,nfreq);
Z0 = 50;
S_1grv = sparameters(obj,f,Z0,'Behavioral',true);
% Return loss in dB
figure(1)
ax1 = subplot(2,2,1);
rfplot(ax1,S_1grv,1,1,"db")
title(ax1,'Return loss, dB')
legend(ax1,"hide")
hold(ax1,"on")

% Insertion loss
ax2 = subplot(2,2,2);
rfplot(ax2,S_1grv,1,2,"abs")
title(ax2,'Insertion loss')
legend(ax2,"hide")
hold(ax2,"on")

% Insertion loss in dB
ax3 = subplot(2,2,[3 4]);
ln = rfplot(ax3, S_1grv,1,2,"db");
ln.DisplayName = sprintf('%d GRV',size(obj.GroundReturnViaLocations,1));
title(ax3,'Insertion loss, dB')
hold(ax3,"on")

Figure contains 3 axes objects. Axes object 1 with title Return loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains an object of type line. This object represents dB(S_{11}). Axes object 2 with title Insertion loss, xlabel Frequency (GHz), ylabel Magnitude contains an object of type line. This object represents abs(S_{12}). Axes object 3 with title Insertion loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains an object of type line. This object represents 1 GRV.

Two GRVs

This section adds a second GRV diagonal from the first GRV.

vGRVLocations = [kbi0_ch0_grv([1 3],:) repmat([1 3],2,1)];
obj.GroundReturnViaLocations = vGRVLocations;

Display PCB structure

figure
show(obj)

Figure contains an axes object. The axes object with title viaSingleEnded element, xlabel x (mm), ylabel y (mm) contains 12 objects of type patch, surface. These objects represent Copper, feed, MEG7, \infty board edge.

Plot Return Loss and Insertion Loss

Note that the insertion loss is reduced at lower frequencies but increased at higher frequencies.

S_2grv = sparameters(obj,f,Z0,'Behavioral',true);
rfplot(ax1,S_2grv,1,1,"db")
legend(ax1,"hide")
rfplot(ax2,S_2grv,1,2,"abs")
legend(ax2,"hide")
ln = rfplot(ax3,S_2grv,1,2,"db");
ln.DisplayName = sprintf('%d GRV',size(obj.GroundReturnViaLocations,1));

Figure contains 3 axes objects. Axes object 1 with title Return loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains 2 objects of type line. These objects represent dB(S_{11}). Axes object 2 with title Insertion loss, xlabel Frequency (GHz), ylabel Magnitude contains 2 objects of type line. These objects represent abs(S_{12}). Axes object 3 with title Insertion loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains 2 objects of type line. These objects represent 1 GRV, 2 GRV.

Three GRVs

This section adds another GRV, making a total of three GRVs.

vGRVLocations = [kbi0_ch0_grv([1 2 3],:) repmat([1 3],3,1)];
obj.GroundReturnViaLocations = vGRVLocations;

Display PCB structure

figure
show(obj)

Figure contains an axes object. The axes object with title viaSingleEnded element, xlabel x (mm), ylabel y (mm) contains 13 objects of type patch, surface. These objects represent Copper, feed, MEG7, \infty board edge.

Plot Return Loss and Insertion Loss

Note that while the insertion loss is further reduced at low frequencies, a distinct notch has formed around 37GHz.

S_3grv = sparameters(obj,f,Z0,'Behavioral',true);
rfplot(ax1,S_3grv,1,1,"db")
legend(ax1,"hide")
rfplot(ax2,S_3grv,1,2,"abs")
legend(ax2,"hide")
ln = rfplot(ax3,S_3grv,1,2,"db");
ln.DisplayName = sprintf('%d GRV',size(obj.GroundReturnViaLocations,1));

Figure contains 3 axes objects. Axes object 1 with title Return loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains 3 objects of type line. These objects represent dB(S_{11}). Axes object 2 with title Insertion loss, xlabel Frequency (GHz), ylabel Magnitude contains 3 objects of type line. These objects represent abs(S_{12}). Axes object 3 with title Insertion loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains 3 objects of type line. These objects represent 1 GRV, 2 GRV, 3 GRV.

Four GRVs

vGRVLocations = [kbi0_ch0_grv repmat([1 3],4,1)];
obj.GroundReturnViaLocations = vGRVLocations;

Display PCB structure

figure
show(obj)

Figure contains an axes object. The axes object with title viaSingleEnded element, xlabel x (mm), ylabel y (mm) contains 14 objects of type patch, surface. These objects represent Copper, feed, MEG7, \infty board edge.

Plot Return Loss and Insertion Loss

S_4grv = sparameters(obj,f,Z0,'Behavioral',true);
rfplot(ax1,S_4grv,1,1,"db")
legend(ax1,"hide")
rfplot(ax2,S_4grv,1,2,"abs")
legend(ax2,"hide")
ln = rfplot(ax3,S_4grv,1,2,"db");
ln.DisplayName = sprintf('%d GRV',size(obj.GroundReturnViaLocations,1));

Figure contains 3 axes objects. Axes object 1 with title Return loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains 4 objects of type line. These objects represent dB(S_{11}). Axes object 2 with title Insertion loss, xlabel Frequency (GHz), ylabel Magnitude contains 4 objects of type line. These objects represent abs(S_{12}). Axes object 3 with title Insertion loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains 4 objects of type line. These objects represent 1 GRV, 2 GRV, 3 GRV, 4 GRV.

Eight GRVs

The code in this section defines an additional four GRV locations and adds them to the four GRV locations of the previous section.

reftable = zeros(8,2);
kbi0_0_grvmm_p1 = [-2e-3 0;2e-3 0;0 2e-3;0 -2e-3];
reftable(1:4,1:2) = kbi0_ch0_grv;
reftable(5:8,1:2) = kbi0_0_grvmm_p1;
vGRVLocations = [reftable repmat([1 3],8,1)];
obj.GroundReturnViaLocations = vGRVLocations;

Display PCB structure

figure
show(obj)

Figure contains an axes object. The axes object with title viaSingleEnded element, xlabel x (mm), ylabel y (mm) contains 18 objects of type patch, surface. These objects represent Copper, feed, MEG7, \infty board edge.

Plot Return Loss and Insertion Loss

The notch depth at 37 GHz has gotten even deeper. The notch depth has now reached 8 dB.

S_8grv = sparameters(obj,f,Z0,'Behavioral',true);
rfplot(ax1,S_8grv,1,1,"db")
legend(ax1,"hide")
rfplot(ax2,S_8grv,1,2,"abs")
legend(ax2,"hide")
ln = rfplot(ax3, S_8grv,1,2,"db");
ln.DisplayName = sprintf('%d GRV',size(obj.GroundReturnViaLocations,1));

Figure contains 3 axes objects. Axes object 1 with title Return loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains 5 objects of type line. These objects represent dB(S_{11}). Axes object 2 with title Insertion loss, xlabel Frequency (GHz), ylabel Magnitude contains 5 objects of type line. These objects represent abs(S_{12}). Axes object 3 with title Insertion loss, dB, xlabel Frequency (GHz), ylabel Magnitude (dB) contains 5 objects of type line. These objects represent 1 GRV, 2 GRV, 3 GRV, 4 GRV, 8 GRV.

Results and discussions

The progression from one GRV to eight GRVs demonstrates the formation of a resonant cavity around the via. While at low frequencies the GRVs combine in parallel to reduce the total impedance of the via return path, at higher frequencies they form a cavity that resonates as an open.

Designers of printed circuit boards for high frequency signals should be aware of this phenomenon and determine whether it will occur for the frequencies and distances they are considering. One conservative metric is the Gap Rate Distance (GRD) metric [1], which is defined to be the maximum center-to-center distance between a signal via and its closest associated GRVs for a given data rate, based on guard bands. As long as at least some GRVs are closer than the GRD, the design should be safe.

The following code computes and plots the GRD for different dielectric constants. According to the plot of this metric, for a dielectric constant of 3.0 and a maximum frequency of 35GHz, the design will be safe (by a conservative margin) if there is at least one GRV closer than 0.030” (0.75mm).

Er = [2 3 4]; % Sweep across relative Permittivity 
freq = linspace(1.0e10,2.5e10,101); % Sweep across frequencies
cw = 0.16; % Critical wavelength set at 0.16 accounting in guard band
clr = ["c" "k" "r"]; % Color of line handles
for i = 1:numel(Er)
    obj.Substrate.EpsilonR = Er(i);
    grd = obj.gapratedistance(2*freq,cw);
    plot(2*freq/1e9,grd,clr(i),'DisplayName',join(["Er =",num2str(Er(i))]))
    hold on
end
grid('minor')
xlabel('NRZ Data Rate (Gbps)')
ylabel('Max GRV c2c Distance (mils)')
legend('show')

Figure contains an axes object. The axes object with xlabel NRZ Data Rate (Gbps), ylabel Max GRV c2c Distance (mils) contains 3 objects of type line. These objects represent Er = 2, Er = 3, Er = 4.

References

  1. Steinberger, Telian, Tsuk, Iyer and Yanamadala, “Proper Ground Return Via Placement for 40+ Gbps Signaling”, DesignCon 2022, April 2022. Full text from Signal Integrity Journal

  2. Tucker, Sankararaman, and Ellis, “PCB Stackup and Launch Optimization in High-Speed Designs”, DesignCon 2022, April 2022.

  3. Steinberger, Telian, Bloom and Rowett, “Managing Differential Via Crosstalk and Ground Via Placement for 40+ Gbps Signaling”, DesignCon 2023, February 2023.

  4. Djordjevic, Biljic, Likar-Smiljanicand, and Sarkar, “Wideband Frequency-Domain Characterization of FR-4 and Time-Domain Causality”, IEEE Transactions on Electromagnetic Compatibility, Vol. 43, No. 4, pg. 662-7, November 2001.