IFUCoreDrive.mesa
Copyright © 1985, 1986 by Xerox Corporation. All rights resersed.
Last Edited by: Curry, October 21, 1986 8:55:19 pm PDT
Don Curry October 30, 1986 9:09:54 am PST
DIRECTORY Core, CoreName;
IFUCoreDrive: CEDAR DEFINITIONS =
BEGIN
CellProc: PROC [
name: ROPE ← NIL,
data: Drive ← NIL ]
RETURNS [cellType: Core.CellType]; -- driveCellClass
driveCellClass: Core.CellClass;
Drive:   TYPE = REF DriveRec;
Drives:   TYPE = LIST OF Drive;
DriveRec:  TYPE = RECORD[
name:   ROPE  ← NIL,  -- reference name
nameInv:  ROPE  ← NIL,  -- reference name
cy:   INT  ← -1, 
idx:   INT  ← -1, 
drDir:   Dir  ← in, 
gate:   DrGate ← pos,
dualOut:  BOOL  ← FALSE,
inSh:   ROPE  ← NIL,
outSh:   ROPE  ← NIL,
inNm:   ROPE  ← NIL,  -- if not this then inRelatiesignal
fire:   ROPE  ← NIL,
fireV:   ROPE  ← NIL,
nPreChg:  ROPE  ← NIL,
in:    RelativeSignal ← [ ],
ref:   RelativeSignal ← [pol: pos], -- ph is latch phase
out:   RelativeSignal ← [ ],
pass:   BOOL  ← FALSE,
plaType:  PLAType ← hot,
drRowType: RowType ← conn ];
RelativeSignal: TYPE = CoreName.RelativeSignal;
ROPE:    TYPE = Core.ROPE;
Ph:     TYPE = CoreName.Ph;
DrGate:    TYPE = {neg, negAc, negBc, pos};
Dir:     TYPE = {in, out};
Polarity:    TYPE = CoreName.Polarity;
RowType: TYPE = {header, xheader, footer, xfooter, conn, dataUp, dataDn, blank, extend};
PLAType: TYPE = {precharged, hot};
PLAType: TYPE = {precharged, hot, decoder, static};
DrTileRec:   TYPE = RECORD[nconn: DrTileNonConn, conn: DrTileConn];
DrTileNonConn:  TYPE = ARRAY PLAType OF ARRAY RowType OF Core.CellType;
DrTileConn:   TYPE = ARRAY Dir OF REF DrTileArray;
DrTileArray:   TYPE = ARRAY DriveTileType OF Core.CellType;
DriveTileType:  TYPE = {inPos, inNeg, inBlank, gndAB, latchA, latchB, gateP, gateN, gateNA, gateNB, latch, posSing, negSing, posDual, negDual};
DrNmType:   TYPE = {in, nin, ref, nref, out, nout, inSh, ninSh, outSh, noutSh, unk};
DriveName:   PROC[drive: Drive, type: DrNmType ← unk] RETURNS[ name: ROPE];
GetDriverTiles: PROC RETURNS[tiles: REF DrTileRec];
ConnectDrives:  PROC [drives: Drives, inSh: ROPENIL] RETURNS[outSh: ROPE];
ReverseDrives:  PROC [drives: Drives] RETURNS[new: Drives];
DrivesToFrame:  PROC [name: ROPE, drives: Drives] RETURNS[cell: Core.CellType];
CapDrives:    PROC [drives: Drives, sIn, altOut: ROPENIL]
RETURNS[newDrives: Drives, sOut: ROPE ← NIL];
SpecificDrive: PROC[ dir: Dir, in: ROPE, out: ROPE, inverted, dual: BOOL ← FALSE ]
RETURNS[dr: IFUCoreDrive.Drive];
AdjustDriveOutPh:   PROC [     drives: Drives, names: ROPE];
AdjustDriveInPhRef: PROC [inLatchPh: Ph, drives: Drives, names: ROPE];
FindDrive:     PROC [drives: Drives, name: ROPE] RETURNS[drive: Drive];
RefToDrives:    PROC [refRec: REF, initial: DriveRec] RETURNS[drives: Drives];
RefToDriverFrame:  PROC[name: ROPE, refRec: REF, initial: DriveRec]
RETURNS[cell: Core.CellType, outSh: ROPE];
SetDShiftIO:   PROC[cellType: Core.CellType, sIn, sOut: ROPE];
GetDShiftIO:   PROC[cellType: Core.CellType] RETURNS [sIn, sOut: ROPE];
END.