The nport component located in analogLib can be used in circuits for Spectre and SpectreRF simulations. It is a scattering parameter (S-parameter) based distributed multi-port element. The nport truly is a "black box"… It can be used to model dramatically different systems, such as:

- lowpass/bandpass systems

- highpass/bandstop systems

- allpass systems

- systems with delay

It is nearly impossible to have a "one size fits all" default setting. In recent releases, a great deal of fine tuning has been done to ensure accuracy and good simulation performance based on numerous design applications. However, you still need to understand how to tailor the model for your particular application. The most common problems seen during transient, pss, hb, etc analysis with a circuit containing an nport are due to:

- No DC data point, incorrect DC data point, or a big gap between DC and the next frequency point.

- Passivity not enforced in the data

- Insufficient high-frequency data

- Insufficient frequency resolution

- Data noise or error in data

- The magnitude should be less than 1 (assuming a passive DUT) and remain inside the Smith Chart.

- The trace should be a clockwise growing or decaying spiral.

- The DC data point must be real and on the horizontal axis of the Smith Chart.

- The data should be smooth (not piecewise-linear or choppy looking. No sudden discontinuities).

My favorite parameters are:* dcextrap, hfextrap, passivity*, and *causality*. These all assume that you are using linear or spline interpolation, which is recommended for most applications. Here’s the “scoop” ….

**dcextrap** (long delay dc extrapolation method)

** dcextrap** is typically used when the nport s-parameter data file models a system with long delay --and-- the DC point is not included in the s-parameter data file. One problem that occurs in these systems is the default extrapolation mechanism for the phase calculation results in an incorrect value of phase at DC, and then continues to be incorrect up to Fmin (the lowest frequency s-parameter data point). This happens when Fmin does not model the phase well enough at low frequency such that a simple extrapolation provides incorrect results.

With *dcextrap*=constant (default option), a constant magnitude from the lowest frequency data point is used and the dc phase is set to the real axis near the lowest frequency data point.

Using *dcextrap*=unwrap can improve the results by calculating a better estimate of the extrapolated phase response at DC. The DC magnitude is set based on a regression of the low frequency data. The DC phase is set by unwrapping the phase and setting it onto the real axis.

With *dcextrap*=hpunwrap, both the magnitude and phase are extrapolated from a regression analysis. It is similar to *dcextrap*=unwrap but provides an alternate approach for dc phase extraction which may be preferred for high pass characteristics.

Note that *dcextrap*=unwrap and hpunwrap are used only if you *do not* have a DC point in the s-parameter data file. If there is a DC data point, then this parameter is ignored.

The **hfextrap** parameter (long delay high frequency extrapolation method)

*hfextrap*=constant (default). The default behavior of Spectre's nport element is to use constant extrapolation at high frequencies.

*hfextrap*=linear linearly extrapolates phase at high frequencies. This can help to more closely match lab measurements when the S-parameter data is frequency limited and extrapolating the phase in a linear fashion is realistic.

*hfextrap* is ignored if you are using *causality*. When using *hfextrap*, you may also want to set *usewindows*=yes (smooth data windowing function) to help ensure model stability, particularly with s-parameter data having insufficient bandwidth.

The ** causality** parameter corrects s-parameter data to ensure the system is causal.

When *causality*=no or the parameter is not set, the nport behavior is the same as in previous MMSIM releases. No causality correction is done.

Both *causality*=fmax and *causality*=auto extrapolate s-parameter data with polynomial, and apply a Hilbert transform to calculate causality violation. Then coefficients of interpolating polynomial are optimized to minimize causality error. The parameters usewindow and hfextrap are ignored when *causality*=fmax or auto.

When *causality*=fmax, Spectre corrects causality up to *fmax*. It either uses the default (which is 3 times the maximum frequency specified in the s-parameter data file), or it uses what the user has specified for the existing nport parameter *fmax*.

When *causality*=auto, Spectre corrects s-parameter causality up to an automatically optimized fmax (the fmax frequency is iteratively adjusted to minimize causality error) and ignores the existing nport parameter fmax. Note that the auto setting can significantly increase simulation time, therefore *causality*=fmax is recommended.

There are two passivity parameters: **passivity** and **pabstol**.

Due to poor measurement accuracy, the s-parameter data may be non-passive. The consequence is the time-domain simulation may not converge. The passivity parameter checks and enforces passivity of s-parameters. Possible values are no (default), check or enforce.

*passivity*=check ensures the eigenvalues of the real(Y) matrix are non-negative. A warning message is issued if the data is not passive.

*passivity*=enforce re-sets the negative eigenvalues of the real(Y) matrix to zero if the data is found to be non-passive. A notice is issued in the spectre.out.file. The *pabstol* parameter specifies the absolute tolerance of passivity criteria. The default is 1e-6.

**Summarizing.... ** Good S-parameter data is the key to nport model stability and accuracy in the time domain. Most convergence problems are caused by incomplete or incorrect data.

Tawna Wilsey