IMSTester.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Barth, November 14, 1985 4:26:15 pm PST
Edited by: Gasbarro November 27, 1985 12:53:31 pm PST
Gunther, November 27, 1985 3:46:00 pm PST
DIRECTORY Rope;
IMSTester: CEDAR DEFINITIONS = BEGIN
Theory
Note: This interface does not support all the functionality of the hardware. If you don't see it here and need it then ask for it.
This interface provides a procedural abstraction for the Integrated Measurement Systems Model 1000 test system.
Types
ROPE: TYPE = Rope.ROPE;
NSec: TYPE = INT;
ForceGroups: TYPE = LIST OF ForceGroup;
ForceGroup: TYPE = REF ForceGroupRec;
ForceGroupRec: TYPE = RECORD [
name: ROPE,
channels: Channels,
hiDrive: REAL, -- only if programable driver
loDrive: REAL]; -- only if programable driver
AcquireGroups: TYPE = LIST OF AcquireGroup;
AcquireGroup: TYPE = REF AcquireGroupRec;
AcquireGroupRec: TYPE = RECORD [
name: ROPE,
channels: Channels,
sample: NSec,
threshold: REAL]; -- only if programable receiver
CompareGroups: TYPE = LIST OF CompareGroup;
CompareGroup: TYPE = REF CompareGroupRec;
CompareGroupRec: TYPE = RECORD [
name: ROPE,
channels: Channels];
Channels: TYPE = LIST OF Channel;
Channel: TYPE = RECORD [
module: Module,
podChannelA: PodChannel,
podChannelB: PodChannel];
Module: TYPE = RECORD[
slot: SlotNumber,
buffer: BufferNumber];
SlotNumber: TYPE = [1..48]; -- Each module slot in the IMS mainframe is numbered 1 through 12, starting with the master and continuing up to a maximum of three slaves.
BufferNumber: TYPE = [0..7); -- Current number of purchased Force/Acquire board pairs.
PodChannel: TYPE = RECORD [
chanData: CData,
format: FormatType,
timing: TData,
];
CData: TYPE = RECORD [
chanNumber: TYPE = [0..8),
signalName: ROPE,
devicePinName: ROPE
];
TData: TYPE = RECORD [
timing: BOOL,
delay: NSec, -- only if format is NRZ
width: NSec, -- only if format is NRZ
];
GroupType: TYPE = {force, acquire, compare};
FormatType: TYPE = {NRZ, DNRZ, RZ, R1, RC, RI};
Buffer: TYPE = REF BufferRec;
BufferRec: TYPE = RECORD[cycles: SEQUENCE cycle: Cycle OF CycleData];
Cycle: TYPE = [0..16*1024);
CycleData: TYPE = REF CycleDataRec;
CycleDataRec: TYPE = RECORD[eachCycle: ARRAY BufferNumber OF PACKED ARRAY PodChannel OF Data];
Data: TYPE = RECORD[
force: BOOL,
inhibit: BOOL,
expect: BOOL,
ignore: BOOL];
Jumps: TYPE = LIST OF Jump;
Jump: TYPE = RECORD [
source: Cycle,
destination: Cycle];
Errors: TYPE = LIST OF Error;
Error: TYPE = RECORD [
cycle: Cycle,
group: AcquireGroup,
channel: Channel,
expected: BOOL,
acquired: BOOL];
Operations
IMSError: SIGNAL [msg: ROPE];
RunDiagnostics: PROC [extended: BOOLTRUE];
If extended is true then the state of the IMS memory is lost.
Initialize: PROC;
Returns the IMS to its power up state.
DefineGroups: PROC [forceGroups: ForceGroups, acquireGroups: AcquireGroups];
Executes Resource, Format, HiDrive, LoDrive, Polarity, Radix, Sample, and Threshold commands. The polarity is always set to POS. The radix is always set to binary. DO NOT REORDER THE GROUPS OR THE CHANNELS AFTER CALLING THIS PROCEDURE!
SetCyclePeriod: PROC [period: NSec];
SetIMSMemory: PROC [forceGroups: ForceGroups, buffer: Buffer, cycles: Cycle, halt: Cycle, jumps: Jumps ← NIL];
Transfers stimulus from force and inhibit buffers to IMS. Set the halt instruction and any jump instructions.
GetErrors: PROC [acquireGroups: AcquireGroups, maxErrors: NAT, startCycle: Cycle, lastCycle: Cycle] RETURNS [errors: Errors];
Starts looking for errors at startCycle and continues until "maxErrors" errors are found or lastCycle is reached.
Start: PROC;
Stop: PROC;
Wait: PROC; -- waits for HALT instruction to be executed
END.