Skip navigation
All Places > Keysight Blogs > EEsof EDA > Blog > 2017 > March

A statistical simulation technique has become popular for the design and analysis of high-speed signals. Especially where accurate prediction of random jitter is important, such as in the measurement of eye opening at ultra-low BERs. In this DesignCon 2017 paper published by my colleagues Hee-Soo Lee, Cindy Cui, Heidi Barnes, and Luis Boluna, you can learn about advantages of the statistical approach for the accurate prediction of random jitter at ultra-low BER, and the limitation of this approach due to SSN (simultaneous switching noise). This paper proposes a solution that extracts the mask correction factor from the voltage noise calculated from a transient simulation, then uses it for accurate prediction of eye height and eye width calculation in the statistical analysis. Measurement data is provided to validate the approach.


Crosstalk and Delta-I noise are significant noise sources for DDR4 designs and are known as simultaneous switching output noise (SSON), or SSN. For DDR4 systems (up to 3200 MT/s), the Inter-Symbol Interference (ISI) and Random Jitter (RJ) induce timing margin uncertainties, which cannot be ignored because the shrinking unit interval (UI). In order to take into account the RJ and ISI effects accurately, JEDEC introduced the new DQ receiver compliance mask at 1e-16 BER in the DDR4 specification.

The new DQ compliance specification requires an eye opening at an ultra-low BER level, 1e-16, which poses a new challenge to simulation-based design methodology. The traditional simulation approach was based on SPICE-like time domain simulation technologies.

As you may find from Figure 2, the eye shrinking induced by inter-symbol interference (ISI) and random jitter (RJ) is relatively small at a low data rate (800 Mb/s). However, the timing margin decreases by 9% UI (15ps) from 103 to 1016 bits because of ISI and RJ effects at 3200 Mb/s data rate system. This proves that time-domain simulation, even with several thousand bits, is far more inadequate to accurately predict the eye opening at 1e-16 BER level.


We can get the ultra-low BER contours at a fraction of the time required for SPICE-like time-domain simulation methods by using the statistical analysis method. The dilemma is that the statistical simulation has to be used for
calculation of the ultra-low BER contours but the Delta-I noise contribution for SSN is not taken into
consideration.To address this challenge, a practical and efficient SSN induced jitter and noise model extraction
method is proposed in this paper. The extracted jitter and noise values will be used to correct the
eye height and width calculation at a certain BER level as well as the JEDEC DQ compliance mask
to reflect the eye-margin correctly. This methodology improves the accuracy of DDR4 statistical simulation, by using the mask correction factor. The extraction process of mask correction factor is relatively simple and quick but still, delivers reasonable accuracy while overcoming the limitation of the statistical simulation approach with the SSN induced time variant Delta-I noise. The validated correlation between measured and simulated data as it is discussed in this paper proves that this methodology can be effectively used for DDR4 designs. 


If you want to learn more about a practical and efficient SSN induced jitter and noise model extraction
approach and the measurement process, download this 
DesignCon paper here: 

SIPro, PIPro, free trial

PCI Express Gen3 (PCIe Gen3) specifies a high-speed differential I/O interconnect that runs at 8.0 Gbps. It has many benefits, and it also presents a critical challenge. PCIe, using high-speed 8-Gbps serial links, can suffer from a large array of physical phenomena and this can lead to excessive EMI emissions in large systems. Fortunately, there is a way to overcome this challenge and ensure high signal quality in PCIe Gen3 serial channels. The solution involves the use of signal integrity analysis, compliance testing, and a PCIe interface simulation methodology that relies on IBIS-AMI models to account for different channel parameters—all of which can be accomplished using Advanced Design System (ADS) software (Figures 1 and 2).

 SI analysis, PCIe Connector, PCIe Gen3, eye diagram, Keysight ADS

Figure 1. During SI analysis, the PCIe connector, 8-lane data bus and package are simulated using an EM solver. S-parameter data is then extracted and factors like impedance matching and propagation delay are analyzed. Finally, all data is re-combined and a Pseudo-Random Bit Sequence (PRBS) is generated at a bit rate of 8 Gbps. The simulation setup and result of a transient analysis with PRBS random data input for the channel is shown here.


PCIe channel, PCIe 3.0, Keysight ADS

Figure 2. Compliance testing ensures products are interoperable. It validates that the PCIe channel is compliant with the PCIe specification. Shown here is the eye and jitter measurement in ADS on a PCIe 3.0 transmitter transaction bit.


Want to learn more about this approach and what it entails? Check out the article, Ensuring High Signal Quality in PCIe Gen3 Channels, by Keysight Technologies’ Anil Kumar Pandey in the Signal Integrity Journal.  


SIPro, PIPro, free trial


Python is a programming language that lets you work quickly and integrate systems more effectively. It’s been used in many areas such as Statistical Analysis, or Artificial Intelligence; and it is also very useful in Device Modeling.

Today we are going to introduce the Python integration with Keysight IC-CAP device modeling platform (version 2013 and up), where we can readily use Python to gain additional productivity.

We will go through one example to get the MOSFET threshold voltage (Vth) using Python, but first, let’s take a look at what version and libraries are supported in IC-CAP.


Python Version



   Windows and Linux IC-CAP support


Supported Libraries:


 The built-in IC-CAP APIs dedicated to device modeling.


The fundamental package for scientific computing with Python.


Goes hand-in-hand with NumPy, is an ecosystem for mathematics, science, and engineering.


A Python 2D plotting library which produces publication quality figures.


Python bindings for the Qt to create innovative devices, modern UIs.


“iccap” is a built-in Python module in IC-CAP which provides objects (such as Model, Dut and Input) to interact with IC-CAP data structures. Below is the Python API tree, and more detailed API explanation and Python tutorial can be found in IC-CAP’s user manual.

Now, let’s take a look at how to use Python to do data analysis, such as to calculate Vth from an IdVg curve in IC-CAP. The example is based on the built-in model file: $ICCAP_ROOT/examples/model_files/mosfet/nmos3.mdl.

Figure 1. Vth algorithm using Icon method with deltaW(xw) and deltaL(xl)

NOTE: There are many possible methods to calculate Vth 1. For today’s example, we will use the constant current approach1,2, which is widely used in industry due to its simplicity.

The steps are:

  1. Open the “nmos3.mdl” file from ICCAP Main window.

  2. Open the nmos3 model window, as shown below:

  3. Switch to the “Macros” tab, where we see some pre-defined PEL macros.

  4. Now, we can add a macro via the “New…” button at left, name it “cal_vth”, and set the Macro type to be “Python (Local Namespace) option, as highlighted below:

    The Python script shown above calculates Vth from the IdVg@Vb=0 curve from the large DUT.
  5. On line 23, we used a Python class called VthCon in which the Vth extraction algorithm is implemented. This calculation can be implemented in the IC-CAP UI, or one can create and refer to an existing Python script created outside of IC-CAP. We will show both methods.
    1. Create the VthCon Python Class in ICCAP
      Use “New…” to create another macro, name it VthCon, and add the content, as  shown below:

      After the class VthCon and calculate functions have been defined, click on the “Execute” button so that the class gets registered in ICCAP memory and can now be used by other Python macros. 
      To see this in action, go back to the “cal_vth” macro, click the “Execute” button, and see the Vth value printed in IC-CAP’s Status window.

    2. Refer to a Python Class defined outside of ICCAP
      If we have existing Python files that have utility functions or Python classes defined, we can certainly use them directly without re-creating them again in ICCAP.
      This approach requires we set an OS environment variable called ICCAP_USER_PYTHON_PATH to the directory where those python files are located, as shown below:

      Python source code files are then stored in the directory specified:

      If files were newly added to that directory, you will need to restart IC-CAP, load the nmos3.mdl again and go back to the Macros tab to access these programs. To test this, add another new Macro, name it ‘cal_vth_use_external’, and again set the Type to be Python (Local Namespace).

We now can import the class or functions from the external files by adding the 2 lines highlighted below to the top of the macro. The remainder of code is the same

as for the cal_vth function we saw above.


from iccap_vth import VthCon

from iccap_util import *




Please contact us to download the IC-CAP model and Python files used in this example.

Thank you!




How exactly do you simulate the RF performance of Narrowband IoT (NB-IoT), a standards-based, low-power wide area technology developed to enable a wide range of new IoT devices and services? That’s the question ASTRI— Hong Kong’s Applied Science and Technology Research Institute—faced when it discovered that the RF performance specified in the receiver wideband intermodulation definition for the 3GPP standard might not be accurate.


The issue, as ASTRI saw it, was fairly straightforward. The wideband intermodulation definition for NB-IoT, as defined in 3GPP TS 36.101 (version 13.6.1), originally established the signal power parameter as REFSENS+6dB. But this parameter did not take into account the sensitivity of NB-IoT. In later standardization, the narrowband benefit of NB-IoT was taken into account in the sensitivity definition, with the NB-IoT sensitivity being set to around 7.7 dB lower than that of the enhancements for Machine-Type Communications (eMTC) standard. And that made ASTRI wonder: Is it logical to take signal power into account again in the NB-IoT wideband intermodulation definition?

 3GPP, NB-IoT, wideband

Figure 1. Shown here is the wideband intermodulation definition for NB-IoT, category NB1, from 3GPP TS 36.101 (version 13.6.1).


As an active participant in the 3GPP NB-IoT standardization process, ASTRI knew it had to get to the bottom of this question, but how? The answer lay in the use of the SystemVue electronic design automation (EDA) environment (FREE trial available) to simulate NB-IoT RF performance.


Using the software and its embedded NB-IoT library, ASTRI set up a simulation to study the effect of the NB-IoT receiver wideband intermodulation definition. First, it built a system-level simulation platform for an NB-IoT receiver (Figure 2). The Low Intermediate Frequency (Low-IF) NB-IoT receiver design used for the simulation, with the local oscillator phase noise, nonlinearity and noise figure of each module modeled, is shown in Figure 3. Then, the Bit Error Rate (BER) for the design was measured to evaluate the effect of the receiver’s performance on signal demodulation.

LTE Advanced, NB-IoT, Downlink transmitter, SystemVue, ASTRI

Figure 2. The NB-IoT receiver simulation platform, modeled in Keysight SystemVue.

NB-IoT, receiver simulation, SystemVue, ASTRI

Figure 3. The Low-IF NB-IoT receiver, modeled in Keysight SystemVue.


Figure 4 shows the signal and interferers at the receiver input in simulation. For simplicity, a QPSK signal with 1.4-MHz bandwidth was used as the modulated interferer.


Figure 5 shows an example of the LO phase noise requirement with different signal power definitions in the NB-IoT receiver design. As can be seen by the simulation result, if the input signal is set to REFSENS+6dB, the receiver’s LO phase noise would need to be no worse than the red curve in Figure 5 to achieve a BER of zero. Wideband intermodulation, therefore, becomes the bottleneck for the receiver LO phase noise requirement. Moreover, much more current would be needed to achieve the phase noise requirement, especially for high-frequency bands. And this means that the NB-IoT wideband intermodulation definition would essentially lead to higher power consumption for NB-IoT user equipment; something that runs counter to the low power requirement of most IoT applications.


 NB-IoT, SystemVue, signal and interferers

Figure 4. Signal and interferers at the receiver input.


LO phase noise requirement, 3GPP, SystemVue, NB IoT

Figure 5. An example for the LO phase noise requirement with different signal power definitions.


On the other hand, if the input signal power in the wideband intermodulation definition for NB-IoT is set to REFSENS+12dB, rather than REFSENS+6dB—as it is for LTE  and eMTC in 3GPP TS 36.101 (version 13.6.1)—then the LO phase noise for 1 MHz to approximately 7.5 MHz can be relaxed by 10 dB (shown by the blue curve in Figure 5) to achieve a BER of zero from the simulation. By doing so, wideband intermodulation no longer acts as the bottleneck of the LO phase noise requirement. Instead, it is mainly related to the linearity of the RF front-end, which is in line with the definitions for LTE and eMTC. 


Based on these SystemVue simulation results, ASTRI proposed that the Category NB1 signal power specification shown in Figure 1 be revised from REFSENS+6dB to REFSENS+12dB in 3GPP RAN4 #82 meeting held in Athens, Greece this February. The 3GPP standards body accepted this proposal after in-depth discussion and the parameter will be updated accordingly in the coming version of 3GPP TS 36.101. The revision on the parameter further optimized NB-IoT User Equipment (UE) standard, and will facilitate the implementation of low power NB-IoT terminal chip.


For more information on the value of SystemVue software for baseband and RF simulation go to: For more information on the NB-IoT, go to:


free trial, systemvue



Model Builder Program (MBP) is a one-stop solution that provides both automation and flexibility for silicon device modeling. MBP Script is a Java™ based scripting language, where no compilation is required at the user end. MBP Script runs equivalently on Windows and Linux. Many MBP-specific APIs(Application Program Interface) and high-efficiency programming structures are developed for Device Modeling work. IMV is the most commonly used process in MBP. Device Targets such as Vth, Idlin, etc are so called IMV in MBP, and are calculated from IV/CV data. The default BSIM4 IMV settings are shown below, we could see that many Device Targets, as well as their scaling plots have been created.


These device targets correspond to the IMV panel in the MBP main window, where all the IMV plots are displayed as long as the required IV or CV curves are loaded, as shown below.


Many IMV targets can be created without prior coding, since MBP Script provides many built-in algorithms and methods to create IMV targets such as, Idlin.


Double-clicking on Idlin opens the definition panel, as shown below:
Here, Idlin is defined as the Java Algorithm IMV Type, for all loaded devices, find Idlin as Current(Ids) from their Ids_Vgs_Vbs plots, where:

  • Vds = absmin(vds), meaning the absolute min Vds value from measurement data.

  • Vgs = absmin(vgs), meaning the absolute max Vgs value from measurement data.

  • Vbs = absmin(vbs), meaning the absolute min Vbs

    value from measurement data.

To specify the Restrictions, you could also directly assign a number, say Vgs=0; or, you could use a variable for flexibility, for example, Vgs=Vgg, where Vgg is a variable that must be defined in imv_const table, as shown below:

Script Editor

Many IMV targets can be defined like Idlin; however, if the logic is more than simply picking out a value from the IV/CV plot by a certain condition, you can use the Script programming.


For example, Gm, where derivative is used, as shown below:


MBP Script editor has Contents Assistance, Code Auto Completion, and C o l o r Coding functions to help ease and expedite your coding experience.
For example, the available function list to an object will drop down when typing the .(dot) sign. as shown below:


Another peek at the built-in Math functions:


MBP Script has an advanced step in debugging function. For now, we could use the old school Print() function to print out variables to the Message window.
To execute a Script file, simply click on the play button, as shown below:

Save and Reload

All the work we've done in MBP Script window can be saved as a single .zip file to a user defined folder. The zip file can be loaded back into the MBP Script window directly, no un-zip is required, which greatly facilitates your work for re-use, sharing and version control.


Use these 3 buttons on the toolbar to Save and Load, as shown below.
After you press Save to a current project, hit refresh, and as a result, all the changes will be reflected in the MBP main window. So newly created IMV plots can be viewed and used for simulation and optimization right away.
Don't forget to press dump or this icon to convert your project to a zip file, where it can be re-use and shared with all team members.  

Interested in Model Builder Program (MBP) Software?

ADS Free trial

Say you are designing a power amplifier using a particular transistor. You have run load pull simulations on the transistor, possibly at different source frequencies. Is it possible to use this simulated load pull data to help determine which of numerous impedance matching network parameter values would give the best performance (satisfying gain, power, and PAE goals across a band of frequencies, for example)?

Andy Howard, Senior Application Engineer at Keysight Technologies, is demonstrating this technique with an ADS example.  By following Andy's example you will be able to specify the loads to be simulated by positioning two circles on a Smith Chart. When you are happy with the loads to be simulated, you activate an equation, and the loads are written into a text file. Subsequent load pull simulations read in the loads from the text file. Note that in order to plot the contours, you have to use Python. The Setting_up_Python_for_contour_plotting data display file walks you through the simple steps needed to install and configure Python.


Download Andy's ADS example from Keysight Knowledge Center (a login is required) to learn more:


Interested in Keysight ADS?  

sipro, pipro, free trial