Skip navigation
All Places > Keysight Blogs > EEsof EDA > Blog > Author: rajsodhi


6 Posts authored by: rajsodhi Employee

ICCAP - External Simulator interface


IC-CAP is a tool that enables modeling engineers to extract device model parameters using the simulator of their choice. For each model parameter extraction, measured data is compared against simulated data, and parameters are optimized to achieve the closest fit to the measured data. Because different simulators may use different syntax or "templates," adding a new simulator that is not supported requires its output to be adapted to one of these templates.


For example LTSpiceIV uses a syntax that is very similar to spice3. IC-CAP supports the following simulator links:

Built-in Simulators included with IC-CAP
  • spice2
  • spice3
  • hpspice
Supported links to external Simulators:
  • Eldo
  • spicemodeads
  • SmartSpice
  • spmodeads
  • spectre443
  • Saber
  • hpeesofsim (native ADS* syntax)
  • spmodeads (ADS spectre compatibility mode)
  • hspicemodeads (ADS hspice compatibility mode)

hspice **

hpspice -C   (link to hspice in client/server mode for better performance)  

saber **

spectre *** (use spectre template)

spectre in spice compatibility mode  (use spectre443 template)

afs_spectre ***  (link to AFS in spectre compatibility mode – * AFS available on linux only)

pspice ***

eldo ****

smartspice *****


Unsupported simulators but should work to some degree:

xyce      (try using spice3 or pspice template)

LTspiceIV    (try using spice3 template)


Vendor information key: 

* ADS - Keysight

** Hspice, Saber – Synopsys

*** Spectre, AFS, pspice – Cadence

**** Eldo – Mentor

***** Smartspice – Silvaco


To make a link between IC-CAP and some external simulator, one must edit the config file $ICCAP_ROOT/iccap/lib/usersimulators.



In this config file, every line represents instructions on how to connect a different simulator to IC-CAP. The format is presented as follows:

simulator_name template_name path_name host_name pipe_capability

If the hostname is blank (or ""), then we assume the simulation will run on the same computer as IC-CAP. Some example entries are shown in the usersimulators file below.

usersimulators example file

Note: Lines with leading # sign are comments.


To link to an external simulator, the steps are as follows:

  1. Install the simulator program, making note of where the binary executable file resides. Also, verify that you have a valid license.
  2. Append or edit the entry in the $ICCAP_ROOT/iccap/lib/usersimulators config file for the external simulator in question.
  3. Re-start IC-CAP.
  4. In the model file where the simulator is to be used, specify the SIMULATOR variable to that simulator's name defined in the usersimulators file.



Should you encounter any problem, please try the following procedure, as it will usually allow you to figure out the problem. If that doesn't work, simply collect information from the steps in this procedure, as well as any pop-up error messages, and send it to the IC-CAP support team.

  1. Turn on IC-CAP's Status window, and check to see if any warning or error message appears.
    Illustration on how to bring up status window.

  2. Further, turn on the Simulation Debugger window. Check the netlist created by IC-CAP and the simulator's output files.
    how to get simulation debugger from IC-CAP

Note: Once the problem is addressed, it's recommended that you close the Simulation Debugger window. Leaving it open will slow down the overall simulation speed due to additional input/output interaction.


Using this process, you can quickly and easily link IC-CAP to a supported external simulator.





LTspice is a freeware SPICE simulator offered by Linear Technologies (now a division of Analog Devices Inc.). LTspice was originally called “SwitcherCAD” and was designed with switch-mode power supplies in mind. As a result, it is widely used in power electronics. IC-CAP may be used to generate device models based on measured data using multiple simulators: not only our own ADS Transient and Harmonic Balance (for periodic state state) simulators, but also transient analysis in LTspice, giving engineers the option to create workflows as needed.  For an engineer that might want to generate a model based on measured data using LTspice as the simulation engine, here's a look at how you do that.

Flow diagram, showing LTspice to IC-CAP link


But before delving into the details of that process, it's worth noting that as of this writing, the LTspice documentation describes support for seven different MOSFET device models:


2MOS2 (A. Vladimirescu and S. Liu, October 1980)
3MOS3, a semi-empirical model
4BSIM (B. J. Sheu, D. L. Scharfetter, and P. K. Ko, May 1985)
5BSIM2 (Min-Chie Jeng, October 1990)
6MOS6 (T. Sakurai and A. R. Newton, March 1990)
8BSIM3v3.3.0 from University of California, Berkeley, July 29, 2005
9BSIMSOI3.2 (Silicon on insulator) from the BSIM Research Group, February 2004.
12EKV 2.6 (M. Bucher, C. Lallement, F. Theodoloz, C. Enz, F. Krummenacher, June 1997.)
14BSIM4.6.1 from the BSIM Research Group, May 18, 2007.
73HiSIMHV version 1.2 from the Hiroshima University and STARC.

How to Link IC-CAP to LTspice

If you have no background on how to link IC-CAP to an external simulator, I recommend you read my previous post
entitled, “Link the IC-CAP Modeling Tool to External Simulators.” It will provide you with an overview of the basic process, along with some troubleshooting tips.


LTspice is not officially supported by IC-CAP. However, we have a workaround to successfully link IC-CAP to LTspice IV by disguising it as a SPICE3 look-alike. To date, this workaround has not yet been tried on LTspice XVII.


Assuming you have LTspice installed on your system, here are the steps:

  1. Append the following line into your $ICCAP_ROOT/iccap/lib/usersimulators file.

    ltspice spice3 $ICCAP_ROOT\src\ltspice3.bat "" CANNOT_PIPE

    We used spice3 as the template_name, so that IC-CAP will treat the simulation input/output files as if it were for SPICE3, which is natively supported.

  2. Download the ltspice3.bat file from the attachment below.

    Note, the file was renamed to ltspice3.txt for security concerns. After you download it, please rename it back to ltspice3.bat.

    Open and edit ltspice3.bat on line 30. Make sure it reflects the correct path to the LTSpice IV executable scad3.exe, as shown below:

  3. Move the ltspice3.bat file to directory $ICCAP_ROOT/src.

  4. Restart IC-CAP.

Verify the Simulation Link to LTspice IV


Now, let’s verify that it works, to ensure we can indeed use LTspice as the simulator engine for IC-CAP model parameter extraction. To do that:

  1. Load the following *.mdl example file from within the IC-CAP program:../Examples/model_files/mosfet/nmos3.mdl
  2. In the model Variables, add the variable SIMULATOR and set it to ltspice.


  3. Go to the /large/idvg/ setup, and clear out the simulated data using Clear -> Simulated. Any previously saved simulation will be gone.


    We now see only the measured data (symbols) on the plot, whereas simulation data would be shown as solid:
  4. Simulate.


  5. In the same DUT/Setup, open the plot tab under the /large/idvg/idvsvg plot, and confirm that the simulated data appears.


The simulated data is represented by solid lines on the plot.


So there you have it! By following this process, you can now use LTspice as your simulator for model parameter extraction within IC-CAP.

A high-quality device model captures device behavior across geometry (W/L), temperature (T), drive voltage (Vdd), among numerous other input conditions. How much time do we spend trying to achieve a good fit across all these axes? What if we could easily bring up graphs of all key device targets such Vth (Threshold Voltage), Idsat (Drive Current), GM (Transconductance), and their variations across these dimensions?  We could then monitor them in one place, and tune or optimize model parameters while observing the agreement between measured and modeled data.  With Keysight’s Model Builder Program (MBP) 2017, we can achieve this goal. In this note, we are going to go through a couple of examples to show how MBP Script makes it possible to monitor device targets across the entire matrix of input conditions.


First, let’s look at the Threshold Voltage (Vth) variation as we vary device width (W) and length (L) on 4 sides of the W/L matrix, as shown below. 

Figure 1. Four sides of the W/L matrix for evaluation of Vth variation


The 4 sides of W/L space define the boundaries of modeled device sizes provided by a given semiconductor technology. A customer may use a geometry outside of this space, but will then need to re-target the model parameters for this unusual device.


Vth is the key device parameter of any transistor device, be it BULK, SOI or FinFET.  It defines when a transistor transitions from off to on.  If the Vth has been well modeled along the 4 sides of the W/L space, then we have good confidence that the model will work over the entire W/L plane. Both short and narrow channel effects will be covered.

By placing Tasks in sequence, a user may define a real modeling flow to be executed automatically.  A “Task” is object to represent a step in a flow, and is represented by a blue icon in the flow panel, as shown below in figure 2.  With Tasks, a modeling engineer can group modeling building blocks to extract the next logical group of device parameters.  In MBP, we may create a new Task button, as shown below, called “Display_Vth_Scaling_4_sides.”  By  clicking on this button, we can define and display the related graphs.


Figure 2. Display Vth W/L scaling plots by Task button clicking


In figure 2, we plot Vth in a 2x2 layout, where each quadrant represents one side of the W and L scaling space.  The solid represents simulated data and the square represent measurements.  The MBP tool is now ready for model tuning or optimization.


To create this beautiful matrix of graphs, we need to create a new Task from MBP Script window and name it “Display_Vth_Scaling_4_sides,” as shown in figure 3.  In the newly created Task, in its Plot Select tab, click the “Add Plot” button to add these 4 plots.  We may populate the “Plot Name” using 2 of the predefined plot groups “vth_l_vbs” and “vth_w_vbs.” In the “filter define” field, we may filter the data based on desired input conditions, like “w=max(w)”.  The filter definition is highlighted in green for the first plot where vds=abs(min(vds)) && w=max(w). In other words, we filter the data for the absolute minimum Vds, and maximum W input conditions. 



Figure 3. Create a Task by grouping Vth W/L scaling plots


MBP provides the most commonly used device targets, including Vth, Gm, Idsat, Idlin, etc. as well as common plot templates like the scaling graphs over W, L, T and Vdd.


One powerful plot type shows how well the model has been fitted across input conditions like geometry.  This is called an “Error Data Grid” plot.  In figure 4, we present the RMS error of device targets Vth and Idsat in our 2-dimensional geometry plane. However, we can choose pairs of input conditions to study, for example:

  • W and L
  • W/L and T
  • W/L and VDD


Figure 4. RMS Error plots of Vth and Idsat across W/L plane.


When tuning model parameters, we can observe the RMS errors update on the fly. For example, slightly different model parameter settings lead to the following Error Data Grid plots:

Figure 5. another state of the RMS Error plot of Figure 4.


The numbers are color-coded for quick and easy reading.


In figure 6, we illustrate how to create these incredibly useful Error Data Grid plots. In MBP’s Script window, we choose our device target (Idsat), specify the X and Y axes as ‘w’ and ‘l’ below, coloring for various RMS error ranges, etc. We can even add more targets to our Error Data Grid plot.


Figure 6. ErrorDataGrid plot creation


These newly created plots can be integrated in the Flow as another Task button, as shown below:

Figure 7. Display RMS Error plots by Task button clicking


Every Task object has a few properties of which “button mode” is one.  When the task is in button mode, then when you click it, it executes just that code to do an action, like extracting a group of parameters.  When the task is not in button mode, clicking on it has no immediate effect.  Rather, it marks where the flow may resume. 


By monitoring a model’s performance (RMS error) across all input conditions, MBP provides a high-level view of the model in real time.  Our modeling engineer may enjoy the peace of mind that the device model has been done thoroughly and accurately.


Please see the attachment below.  We have attached an example project that includes:

  1. demo data files
  2. demo model files, initial version and final version.
  3. script file that defines the flow Tasks and ErrorDataGrid plots


For more details about how to customize device targets and plots and how to customize the flow, please refer to the MBP Script tutorial.




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!




IC design stands on the shoulders of device modeling and characterization. The semiconductor industry depends on fast and accurate device models as circuits are pushed to higher frequencies, device geometries are becoming ever smaller with ever higher chip device count. Without adequate models, IC designers cannot accurately simulate their circuits, leading to poor circuit performance on the lab bench. At larger companies like Intel and Analog Devices, entire groups are devoted to device characterization and model extraction, dealing with mountains of data, as semiconductor processes are fine-tuned. 

Device modeling is a significant challenge, requiring combined expertise in disparate areas:

  • low leakage DC measurements with pA accuracy
  • highly sensitive RF measurements to 100 GHz and beyond
  • wafer probing methodologies – RF, DC, probe card, etc.
  • the latest advances in device models – BSIMCMG, HiSIM_HV, etc.
  • model extractions using IC-CAP or Model Builder Program
  • guaranteeing that model will simulate OK on all simulation platforms
  • designing on-wafer test structures to expose process parameters
  • understanding and modeling the variation of device parameters within a process and across the wafer
  • measuring and predicting device reliability
  • refining model libraries provided by foundries
  • comparing devices from different foundries using existing models
  • measurement automation software and data handling


Especially in fast-moving areas of the semiconductor industry, like mobile phone development, IoT or automotive circuits, time-to-market is critical. More and more, companies are requiring customer delivery of first prototypes from the first round of silicon, especially considering the fact that a mask run can cost more than $300,000. What does this mean for modeling and characterization groups? Their role is critical. Trying out a model that is not very well understood and taking extra months to get it right can mean losing an entire market window. To deliver today’s product successfully, we need the peace of mind that is accompanied with a solid validation of device models across temperature, process variation, etc.



A typical device modeling and characterization lab has the following:

  • Skilled model extraction engineers
  • Skilled test engineers
  • Probing systems with appropriate probes for both RF and DC testing
  • test equipment with cables and accessories
  • software to drive measurements and analysis
  • software for model extraction and model quality analysis


Getting anyone these wrong will cost your team millions of dollars. Fortunately, we at Keysight Technologies understand all these concerns and have assisted numerous large companies to navigate these waters, providing device modeling services for advanced devices based on a long history of working with RF & Microwave and device modeling technologies. Keysight not only supports state-of-the-art device models such as BSIM6, BSIM-CMG, and BSIM-IMG but also provides modeling services for our own models such as the DynaFET model.


Contact Keysight for your upcoming device modeling needs.


contact an expert

Engineers are constantly being challenged to work at lower supply voltages that are now on par with the threshold voltage of the device itself. For design successes in microprocessors, transceivers and mobile devices, it becomes imperative to accurately model CMOS transconductance (Gm) and threshold voltage (Vth). In our December 2016 newsletter, we described different ways to define the Vth of a transistor. Today, we will explain how to extract Gm near Vth using Keysight’s Model Builder Program (MBP) in 3 simple steps.

  1. Access your previously calculated Vth, and define your target Vgs relative to Vth.
  2. Look up or interpolate the derivative of Id with respect to Vgs at your target Vgs
  3. Expand your analysis of Gm to observe how it scales with respect to device width and length.


Transistor transconductance, Gm, is defined as the derivative of output current with respect to input voltage:

   Gm = d(Iout)/d(Vin) given a fixed Vds and Vbs (50 mV and 0 V, for example)

This has special significance in CMOS modeling, because almost all the amplifier gain is a function of transconductance of a MOSFET.  Hence it is one of the most important measures of a device.


On a single device, we control Vgs, Vds and Vbs and measure current Ids or Id.

An IV graph (Ids vs. Vgs) of a transistor is shown below at Vds = 50 mV and at a range of Vbs.

Id vs Vgs for device with Width=10u and Length=10u

Let’s go through each step described above.


Access your previously calculated Vth, and define your target Vgs relative to Vth

InterMediate Variables (IMV), as the name implies, are bridging variables between the raw data and the final device model parameters.  We may look to see how Vth and Gm evolve over temperature or across device geometry, and then capture these behaviors in our model.  As shown below, Vth and Gm are included in BSIM4 default IMV settings. 

Since small signal characteristics like Gm depend on device operating point, it becomes helpful to choose an operating point.  Circuit designers may look at Gm at a point just above the threshold voltage.

Vgs = Vth + deltaVg

Let’s define deltaVg as our parameter of interest, say 0.1V.

Because we are going to use a variable called "deltaVg", we need to define it in a table of intermediate variable constants called “imv_const.” 


Next, we’ll create a new intermediate variable called “GmNearVth.”

Run the command New -> IMV. 


Edit the IMV definition to reflect the following:



Page Name:, input data, because we eventually want to get a Gm value.



Algorithm Class:

acc/GetValueAtPoint means simply look up the Y value at a chosen X.

Attached Targets:

Vth, this is how we pass in another IMV Target.

Algorithm Parameters:

gm,vgs,vth+deltaVg, the order must be Y, X, X_Value_Lookup, and expressions are supported here for best usability.


Look up or interpolate the derivative of Id with respect to Vgs at your target Vgs

After calculating the first derivative, we present Gm, as shown below.



Plot of Gm with Vgs marked

This Gm data is interpolated at our chosen Vgs, slightly above Vth.


Expand analysis of Gm to observe scaling with respect to device width and length

Next, we can see how these IMV’s scale with respect to device geometry.  In MBP, it’s easy to create plots such as GmNearVth_L and GmNearVth_W, etc. 


After saving your work, you may return to the MBP main window to refresh the IMV graphs. We now have transconductance plots ready for model extraction and optimization! 

Gm near Vth as a function of device geometry


Using a similar approach, we may define other figures of merit to complete the modeling near Vth, for example:

  • Ids near Vth
  • Gds near Vth
  • Rout near Vth

Furthermore, Vth can even be any other IMV or lookup value. 


We are excited by the power and flexibility of the Model Builder Program and hope you see the amazing potential that we see daily.  To not only enable the next generation low-power circuit design, but also expand your group’s modeling capability, we look forward to helping you achieve your modeling goals. 

For more information, please feel free to contact


Interested in Model Builder Program (MBP) Software?

ADS Free trial

Device Modeling 101 - How to Extract Threshold Voltage of MOSFETs