Table of Contents

Class Parametric

Namespace
CsraTestMethods.Search
Assembly
CsraTestMethods.dll
[TestClass(Creation.TestInstance)]
[Serializable]
public class Parametric : TestCodeBase
Inheritance
TestCodeBase
Parametric
Inherited Members
TestCodeBase.AbortTest()
TestCodeBase.DebugBreak()
TestCodeBase.TheExec
TestCodeBase.TheHdw
TestCodeBase.TheProgram
TestCodeBase.FlowDomains
TestCodeBase.ShouldRunPreBody
TestCodeBase.ShouldRunBody
TestCodeBase.ShouldRunPostBody

Methods

LinearFull(PinList, PinList, double, double, int, double, double, double, string)

Voltage values across the entire range are traversed without being evaluated during the linear search. Subsequently, the device input condition for which the output pin voltage exceeds the threshold is determined.

[TestMethod]
[Steppable]
[CustomValidation]
public void LinearFull(PinList forcePins, PinList measurePin, double from, double to, int count, double threshold, double clampCurrent, double waitTime, string setup = "")

Parameters

forcePins PinList

The pins that are being forced.

measurePin PinList

The pin that is being measured. The measurement is performed for a single pin.

from double

The starting value of the linear input ramp.

to double

The stopping value of the linear input ramp.

count int

The number of input points for which the search is performed.

threshold double

The value for which the output meets the required condition for the searched input value.

clampCurrent double

The value to clamp for force pin.

waitTime double

The wait time per step during ramp execution, used to delay measurement after each force transition.

setup string

Optional. The name of the setup set to be applied through the setup service.

Details

Test Technique
  • to be added
Implementation

The PreBody section applies levels and timing from the test instance context. Optionally, applies the specified setup. For the force pin and the measure pin, specified in forcePins and measurePin, it disconnects any pin electronics and connects the DC path.

The Body section applies a voltage force of the start value and turns on the gate for forcePins, sets the measurement block for measurePin, and performs an unconditional linear search up to the stop value with a step count of step. Finally, it returns the input value that results in an output closest to the voltage threshold point.

The PostBody section restores the pin electronics connection for digital pins after gating off and disconnecting the dc path. Finally, a parametric datalog is logged.

Platform Specifics

Supports stepping capability for PreBody/Body/PostBody.

Pre Conditions
  • none
Post Conditions
  • any dc paths from pins in forcePin are disconnected
Limitations
  • support for non-uniform (mixed) instrument types in pinList not yet available
Code Reference
[TestMethod, Steppable, CustomValidation]
public void LinearFull(PinList forcePins, PinList measurePin, double from, double to, int count, double threshold, double clampCurrent,
    double waitTime, string setup = "") {

    if (TheExec.Flow.IsValidating) {
        TheLib.Validate.Pins(forcePins, nameof(forcePins), out _forcePin);
        TheLib.Validate.Pins(measurePin, nameof(measurePin), out _measurePin);
        TheLib.Validate.GreaterOrEqual(count, 2, nameof(count));
        TheLib.Validate.InRange(waitTime, 0, 600, nameof(waitTime));
        if (_measurePin.Count() != 1) Services.Alert.Error($"Only one pin can be used for measurement. The number of measurement pins is invalid.");
        _allPins = new Pins($"{forcePins.Value}, {measurePin.Value}");
        _containsDigitalPins = _allPins.ContainsFeature(InstrumentFeature.Digital);
        _voltageRange = (from > to) ? from : to;
    }

    if (ShouldRunPreBody) {
        TheLib.Setup.LevelsAndTiming.Apply(true);
        Services.Setup.Apply(setup);
        if (_containsDigitalPins) TheLib.Setup.Digital.Disconnect(_allPins);
        TheLib.Setup.Dc.Connect(_allPins);
    }

    if (ShouldRunBody) {
        _measuredDcValues = [];
        TheLib.Setup.Dc.ForceHiZ(_measurePin);
        TheLib.Setup.Dc.ForceV(_forcePin, from, clampCurrent, _voltageRange, clampCurrent, true);
        TheLib.Setup.Dc.SetMeter(_measurePin, DcMeterMode.Voltage, _voltageRange);
        double increment = TheLib.Acquire.Search.LinearFullFromToCount(from, to, count, (forceValue) => {
            TheLib.Setup.Dc.ForceV(_forcePin, forceValue, gateOn: false);
            TheLib.Execute.Wait(waitTime);
            _measuredDcValues.Add(TheLib.Acquire.Dc.Measure(_measurePin).First());
        });
        _results = TheLib.Execute.Search.LinearFullProcess(_measuredDcValues, from, increment, 0, _notFoundResult, (measuredValue) => threshold < measuredValue);
    }

    if (ShouldRunPostBody) {
        TheLib.Setup.Dc.Disconnect(_allPins);
        if (_containsDigitalPins) TheLib.Setup.Digital.Connect(_allPins);
        TheLib.Datalog.TestParametric(_results);
    }
}

LinearStop(PinList, PinList, double, double, int, double, double, double, string)

Voltage values across the range are traversed with an evaluation performed at each iteration, and the search is terminated once the objective has been reached across all sites. The device input condition for which the output pin voltage exceeds the threshold is then determined.

[TestMethod]
[Steppable]
[CustomValidation]
public void LinearStop(PinList forcePins, PinList measurePin, double from, double to, int count, double threshold, double clampCurrent, double waitTime, string setup = "")

Parameters

forcePins PinList

The pins that are being forced.

measurePin PinList

The pin that is being measured. The measurement is performed for a single pin.

from double

The starting value of the linear input ramp.

to double

The stopping value of the linear input ramp.

count int

The number of input points for which the search is performed.

threshold double

The value for which the output meets the required condition for the searched input value.

clampCurrent double

The value to clamp for force pin.

waitTime double

The wait time per step during ramp execution, used to delay measurement after each force transition.

setup string

Optional. The name of the setup set to be applied through the setup service.

Details

Test Technique
  • to be added
Implementation

The PreBody section applies levels and timing from the test instance context. Optionally, applies the specified setup. For the force pin and the measure pin, specified in forcePins and measurePin, it disconnects any pin electronics and connects the DC path.

The Body section applies a voltage force of the start value and turns on the gate for forcePins, sets the measurement block for measurePin, and initiates a search until the output value reaches the voltage target. It stops when all sites have reached that condition, and returns the first input value that results in an output beyond the threshold point. If no such value is found, the function returns -999 as a failure indicator.

The PostBody section restores the pin electronics connection for digital pins after gating off and disconnecting the dc path. Finally, a parametric datalog is logged.

Platform Specifics

Supports stepping capability for PreBody/Body/PostBody.

Pre Conditions
  • none
Post Conditions
  • any dc paths from pins in forcePin are disconnected
Limitations
  • support for non-uniform (mixed) instrument types in pinList not yet available
Code Reference
[TestMethod, Steppable, CustomValidation]
public void LinearStop(PinList forcePins, PinList measurePin, double from, double to, int count, double threshold, double clampCurrent,
    double waitTime, string setup = "") {

    if (TheExec.Flow.IsValidating) {
        TheLib.Validate.Pins(forcePins, nameof(forcePins), out _forcePin);
        TheLib.Validate.Pins(measurePin, nameof(measurePin), out _measurePin);
        TheLib.Validate.GreaterOrEqual(count, 2, nameof(count));
        TheLib.Validate.InRange(waitTime, 0, 600, nameof(waitTime));
        if (_measurePin.Count() != 1) Services.Alert.Error($"Only one pin can be used for measurement. The number of measurement pins is invalid.");
        _allPins = new Pins($"{forcePins.Value}, {measurePin.Value}");
        _containsDigitalPins = _allPins.ContainsFeature(InstrumentFeature.Digital);
        _voltageRange = (from > to) ? from : to;
    }

    if (ShouldRunPreBody) {
        TheLib.Setup.LevelsAndTiming.Apply(true);
        Services.Setup.Apply(setup);
        if (_containsDigitalPins) TheLib.Setup.Digital.Disconnect(_allPins);
        TheLib.Setup.Dc.Connect(_allPins);
    }

    if (ShouldRunBody) {
        TheLib.Setup.Dc.ForceHiZ(_measurePin);
        TheLib.Setup.Dc.ForceV(_forcePin, from, clampCurrent, _voltageRange, clampCurrent, true);
        TheLib.Setup.Dc.SetMeter(_measurePin, DcMeterMode.Voltage, _voltageRange);
        _results = TheLib.Acquire.Search.LinearStopFromToCount(from, to, count, 0, _notFoundResult, (forceValue) => {
            TheLib.Setup.Dc.ForceV(_forcePin, forceValue, gateOn: false);
            TheLib.Execute.Wait(waitTime);
            return TheLib.Acquire.Dc.Measure(_measurePin).First();
        }, (measuredValue) => threshold < measuredValue);
    }

    if (ShouldRunPostBody) {
        TheLib.Setup.Dc.Disconnect(_allPins);
        if (_containsDigitalPins) TheLib.Setup.Digital.Connect(_allPins);
        TheLib.Datalog.TestParametric(_results);
    }
}