Class Parametric
- Namespace
- CsraTestMethods.Search
- Assembly
- CsraTestMethods.dll
[TestClass(Creation.TestInstance)]
[Serializable]
public class Parametric : TestCodeBase
- Inheritance
-
TestCodeBaseParametric
- Inherited Members
-
TestCodeBase.AbortTest()TestCodeBase.DebugBreak()TestCodeBase.TheExecTestCodeBase.TheHdwTestCodeBase.TheProgramTestCodeBase.FlowDomainsTestCodeBase.ShouldRunPreBodyTestCodeBase.ShouldRunBodyTestCodeBase.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
forcePinsPinListThe pins that are being forced.
measurePinPinListThe pin that is being measured. The measurement is performed for a single pin.
fromdoubleThe starting value of the linear input ramp.
todoubleThe stopping value of the linear input ramp.
countintThe number of input points for which the search is performed.
thresholddoubleThe value for which the output meets the required condition for the searched input value.
clampCurrentdoubleThe value to clamp for force pin.
waitTimedoubleThe wait time per step during ramp execution, used to delay measurement after each force transition.
setupstringOptional. 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
forcePinare 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
forcePinsPinListThe pins that are being forced.
measurePinPinListThe pin that is being measured. The measurement is performed for a single pin.
fromdoubleThe starting value of the linear input ramp.
todoubleThe stopping value of the linear input ramp.
countintThe number of input points for which the search is performed.
thresholddoubleThe value for which the output meets the required condition for the searched input value.
clampCurrentdoubleThe value to clamp for force pin.
waitTimedoubleThe wait time per step during ramp execution, used to delay measurement after each force transition.
setupstringOptional. 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
forcePinare 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);
}
}