<> <> <> <> <<>> 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}; <> 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: ROPE _ NIL] 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: ROPE _ NIL] 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.