<> <> <> <> <> DIRECTORY Core, IMSTester, Ports, RosemaryUser, ViewerClasses; ICTest: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = IMSTester.ROPE; Delay: TYPE = IMSTester.Delay; Width: TYPE = IMSTester.Width; Sample: TYPE = IMSTester.Sample; Period: TYPE = IMSTester.Period; FormatType: TYPE = IMSTester.FormatType; Board: TYPE = IMSTester.Board; PodTiming: TYPE = IMSTester.PodTiming; Channel: TYPE = IMSTester.Channel; Directionality: TYPE = {force, acquire, biDirectional}; TestProc: TYPE = RosemaryUser.TestProc; Groups: TYPE = LIST OF Group; Group: TYPE = RECORD [ number: NAT, --unique group number name: ROPE, --group name directionality: Directionality, format: FormatType _ DNRZ, delay: Delay _ 0, width: Width _ 20, sample: Sample _ 0, programable: BOOL _ FALSE, -- programable drive or threshold hiDrive: REAL _ 2.4, loDrive: REAL _ 0.4, threshold: REAL _ 1.4, compare: BOOL _ TRUE]; -- real-time compare LoadBoardSide: TYPE = {R, L}; PodPair: TYPE = {AB, CD, EF, GH, IJ, KL}; TesterHeader: TYPE = [0..256]; -- use 0 for non-existent signals, e.g. Vdd, Gnd DUTHeader: TYPE = [0..256]; -- use 0 for non-existent signals, e.g. Vdd, Gnd ProbeCardPin: TYPE = [1..300]; Assignments: TYPE = LIST OF Assignment; Assignment: TYPE = RECORD [ name: ROPE, --signal name group: NAT, --unique group number board: Board, loadBoardSide: LoadBoardSide, podPair: PodPair, pod: PodTiming, channel: Channel, testerHeader: TesterHeader, dUTHeader: DUTHeader, probeCardPin: ProbeCardPin]; PeriodChangeProc: TYPE = PROC [period: Period] RETURNS [newGroups: Groups]; MakeStandardViewer: PROC [testName: ROPE, cellType: Core.CellType, clockAName: ROPE, clockBName: ROPE _ NIL, groups: Groups, assignments: Assignments, period: Period]; RegisterTestProc: PUBLIC PROC [testName: ROPE, procName: ROPE, proc: TestProc, autoLoad: BOOL _ FALSE]; RegisterPeriodChangeProc: PUBLIC PROC [testName: ROPE, proc: PeriodChangeProc]; END.