Getting Started with ICEasy

Knowledge Base Article # Q200261

Read Prior Article Read Next Article
Summary This article describes ICEasy add-on module used for Semiconductor test using Marvin Test Solutions DIO boards with PMU
Login to rate article
ICEasy is an ATEasy add-on module that is used to facilitate the programming of Marvin Test Solutions’ Dynamic Digital IO (DIO) boards for semiconductor test applications. This article provides an overview of how to use ICEasy for creating and executing test programs.
  • Pin Mapping between DIO channels and UUT pin names
  • Creation of  Pin Groups and nested groups as well as providing the  ability to perform various test functions on a group
  • Simplified programming
  • Faster creation of predefined tests (Continuity, IDD, IDDQ, Voltage Threshold, Leakage, etc.)
  • Sweeping functions and Plots (Shmoo, I/V Curve, etc.)
  • Virtualization of the digital subsystem, allowing  reuse of  ICEasy based code with future MTS boards
  • Simulation of your test program, allowing you to test and run your program with no hardware using the simulation mode.

Configuration ICEasy System

To use ICEasy, You must have ATEasy v9 (or newer). Your ATEasy Project System files should first have the DIO driver (in this example, GX5295.drv) followed by ICEasy (ICEasy.drv) and the ICEasy_GX5295 board driver (ICEasy_GX5295.drv). The SIM driver is an application custom driver and is used for simulation if simulation is needed.
TS-900 ATEasy System

Once the drivers are inserted you need to configure the DIO driver shortcut. This requires setting the driver parameters as required, usually setting the MasterNumber to 1. You also need to set the INIFileInitialization parameter to 1 if the DIO is configured using the INI file or it is set to the Master/Slave slot number in your DIO domain. We recommend using the INI file initialization versus setting the Master/Slave boards since it ensures that information displayed in the panel matches the ICEasy board and channel numbers. Since the DIO driver is inserted prior to the ICEasy driver, the DIO driver will be initialized prior to ICEasy, ensuring that initialization of the ICEasy driver will succeed.

Pin Mapping

Prior to using ICEasy, you will need to map the DIO channels to the DUT/UUT (Device/Unit Under Test) pin names. DIO Channels are 0 based, so if the first board is a GX5295, the channel numbers will be 0-31, the second card’s channels will be 32-63, etc. The order of the DIO cards can be set from the GTDIO Panel’s (installed with the GX5295) Configuration page and this setup will be saved to the INI file.

The following command is used to map a DIO channel to a UUT pin:

ICEasy Map Add (sPinName, vPinNumberOrPinList, enPinType, vInstrumentName, \

To create a pin group, use the following:

ICEasy Map Add Group (sGroup, asGroupOrPinList)

Other available mapping commands reside under ICEasy Map group of commands.

To map channels you usually place the code in the Program.OnInit() event as shown here:

ICEasy Map Add("CLR", 1, enPinTypeDigitalInput, "ICEasy_GX5295", 0)

In this example we mapped the UUT CLR pin (has a unique index or id of 1) to the DIO channel 0 (last argument).

You can also specify the Pin type as a digital Input/output, and assign the board driver’s shortcut name used to control the pin (ICEasy_GX5295). Additional examples of mapping other UUT pin channels are shown here:

ICEasy Map Add("CLK", 11, enPinTypeDigitalInput, "ICEasy_GX5295", 17)
ICEasy Map Add("D1", 3, enPinTypeDigitalInput, "ICEasy_GX5295", 2)
ICEasy Map Add("D2", 4, enPinTypeDigitalInput, "ICEasy_GX5295", 7)
ICEasy Map Add("D3", 7, enPinTypeDigitalInput, "ICEasy_GX5295", 6)
ICEasy Map Add("D4", 8, enPinTypeDigitalInput, "ICEasy_GX5295", 3)
ICEasy Map Add("D5", 13, enPinTypeDigitalInput, "ICEasy_GX5295", 10)
ICEasy Map Add("D6", 14, enPinTypeDigitalInput, "ICEasy_GX5295", 13)
ICEasy Map Add("D7", 17, enPinTypeDigitalInput, "ICEasy_GX5295", 14)
ICEasy Map Add("D8", 18, enPinTypeDigitalInput, "ICEasy_GX5295", 9)
ICEasy Map Add("Q1", 2, enPinTypeDigitalOutput, "ICEasy_GX5295", 1)
ICEasy Map Add("Q2", 5, enPinTypeDigitalOutput, "ICEasy_GX5295", 4)
ICEasy Map Add("Q3", 6, enPinTypeDigitalOutput, "ICEasy_GX5295", 5)
ICEasy Map Add("Q4", 9, enPinTypeDigitalOutput, "ICEasy_GX5295", 8)
ICEasy Map Add("Q5", 12, enPinTypeDigitalOutput, "ICEasy_GX5295", 15)
ICEasy Map Add("Q6", 15, enPinTypeDigitalOutput, "ICEasy_GX5295", 12)
ICEasy Map Add("Q7", 16, enPinTypeDigitalOutput, "ICEasy_GX5295", 11)
ICEasy Map Add("Q8", 19, enPinTypeDigitalOutput, "ICEasy_GX5295", 16)
ICEasy Map Add("VCC", 20, enPinTypeVcc, "ICEasy_GX5295", 31)
ICEasy Map Add("GND", 10, enPinTypeGnd)

Note that some pins are marked as VCC and some as GND. The available pin types are displayed when you type the argument for this parameter.

Pin Group Mapping

Addressing UUT pins individually can be cumbersome. When a repetitive function is needed for controlling / accessing or measurement that involve many pins you can create a Pin Group. The following example demonstrates pin group definitions:

ICEasy Map Add Group("Reset Pins", {"CLR"})
ICEasy Map Add Group("Clock Pins", {"CLK"})
ICEasy Map Add Group("Input Pins", {"D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8"})
ICEasy Map Add Group("Output Pins", {"Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8"})

In this example the Input Pins group contains 8 pins D1-D8.
You can also define nested groups. A nested group can combine groups and pins with a name assigned to a new group.  The following example shows the use of a nested group:

ICEasy Map Add Group("IO Pins", {"Reset Pins", "Clock Pins", "Input Pins", \
        "Output Pins"})
ICEasy Map Add Group("Power Pins", {"GND", "VCC"})
ICEasy Map Add Group("All Pins", {"IO Pins", "VCC"})

In this example IO Pins is comprised of 4 groups and has a total of 18 pins.

Using the Digital Instrument’s PMU Capabilities

ICEasy has several commands that facilitate parametric testing using the digital instrument’s PMU (Parametric Measurement Unit). The commands work on a single pin or on a group. For a single pin the returned variant will contain a single double precision value. When a group is passed in, the measurement command will return a variant containing an array of measurements. The following commands are available:

Measurement Commands:

ICEasy Measure Voltage (vGroupOrPinNameOrIndex, iMeasureRate): Variant

ICEasy Measure Current (vGroupOrPinNameOrIndex, iMeasureRate, iMaxDigits): Variant

Stimuli Commands:

ICEasy Set Voltage (vGroupOrPinNameOrIndex, dVoltage, dMaxCurrent)

ICEasy Set Current (vGroupOrPinNameOrIndex, dCurrent, dVCommHigh, dVCommLow)

Stimuli and Measurement Commands:

ICEasy Set Voltage MeasureCurrent (vGroupOrPinNameOrIndex, dVoltage, dCurrentLimit, \
        vMeasurePinNameOrIndex, iMeasureRate, iMaxDigit, iDelayMeasure): Variant

ICEasy Set Voltage MeasureVoltage (vGroupOrPinNameOrIndex, dVoltage, dCurrentLimit, \
        vMeasurePinNameOrIndex, iMeasureRate, iDelayMeasure) : Variant

ICEasy Set Current MeasureCurrent (vGroupOrPinNameOrIndex, dCurrent, dVoltageHighLimit, \
        dVoltageLowLimit vMeasurePinNameOrIndex, iMeasureRate, iMaxDigit, iDelayMeasure) \
        : Variant

ICEasy Set Current MeasureVoltage (vGroupOrPinNameOrIndex, dCurrent, dVoltageHighLimit, \
        dVoltageLowLimit vMeasurePinNameOrIndex, iMeasureRate, iDelayMeasure): Variant

The stimuli and measurements commands can be used to perform parametric tests such as:
  • Continuity, Short, Open tests
  • Power Consumption (IDD, IDDQ)
  • Input Voltage Threshold (VIH, VIL)
  • Input Leakage (IIH, IIL)
  • Output Voltage Level (VOH, VOL)
These commands can also be used to perform other device characterization procedures such as Functional Tests, IV Curve, and Shmoo Plots.

Example – Performing a Shorts Test

The following code shows how to perform a shorts test by checking for a shorted protection diode or checking for a short to other pins.

! set all pins to 0V
ICEasy Set Voltage("All Pins", 0)
! force sink a small current of -500 uAmp and then measure voltage
TestResult=Abs(ICEasy Set Current MeasureVoltage(“D1”, -0.5))
! restore pin setting
ICEasy Set Voltage(“D1”, 0)

Example – IDD Test
The following code shows how to test for IDD, standby current.

! turn on Vcc and then measure IDD
TestResult=ICEasy Set Voltage MeasureCurrent("Vcc", 4.50)
! turn off Vcc
ICEasy Set Voltage("Vcc", 0)

Vector Commands

ICEasy provides the ability to write (and read) vectors to the digital subsystem, execute them, and return an error count.  The following are some of Vector commands:

ICEasy Set Vectors (vGroupOrPinNameOrIndex, vVectors, iVectorStart, iVectorsCount, \

ICEasy Run Vectors (vGroupOrPinNameOrIndex, iVectorStart, iVectorsCount, iFrequency, \
        iStrobeDelay): Long

The first command Set Vector writes vectors to a group or pin, starting at the DIO vector memory iVectorStart, and repeating the array of strings passed using the vVectors iRepeatCount value. The number of vectors is defined by iVectorsCount. vVectors are the written vectors. Vectors are an array of strings where the first element corresponds to the first vector etc.  Each string character op-code corresponds to a digital subsystem channel.

DownloadClick Here to continue to read and download the rest of this article
Article Date 6/16/2014 , 9/26/2022
Keywords GX5295, GX5296, GX5960, ICEasy, ATEasy

Login to rate article

Read Prior Article Read Next Article