<> <> <> <> DIRECTORY Core, CoreClasses, CoreFlat, DABasics, Pipal, PipalInt, PipalMos, RefTab; PipalCore: CEDAR DEFINITIONS IMPORTS Pipal = BEGIN <> <> <> <> <> <> Decoration: TYPE = REF DecorationRec; <> <> <<>> <> DecorationRec: TYPE = PRIVATE RECORD [ name: Core.ROPE, -- Documentation purpose only portProp: ATOM, -- Hangs on each public wire to specify the ports of the public. Ports should be understood as the more general meaning of "interface geometry". objectProp: ATOM, -- Hangs on some cellTypes to specify the corresponding object. Currently only cellTypes of the recordCellClass and transistors have this decoration. geometryProp: ATOM, -- Hangs on every internal wires of record cellTypes to specify the geometry of the internal (but only at this level in the record). transProp: ATOM -- hangs on every CoreClasses.CellInstance of record cellTypes to specify the corresponding transformation. ]; layoutDecoration: Decoration; schematicsDecoration: Decoration; rawLayoutDecoration: Decoration; CreateDecoration: PROC [name: Core.ROPE, coreSave: BOOL _ FALSE] RETURNS [decoration: Decoration]; <> <> <> <> <> <<>> HasPort: PROC [decoration: Decoration, public: Core.Wire] RETURNS [BOOL]; <> GetPort: PROC [decoration: Decoration, public: Core.Wire] RETURNS [port: Pipal.Object _ Pipal.void]; <<>> PutPort: PROC [decoration: Decoration, public: Core.Wire, port: Pipal.Object]; <> <<>> AddPort: PROC [decoration: Decoration, public: Core.Wire, port: Pipal.Object]; <> <> <<>> PutClippedPort: PROC [decoration: Decoration, public: Core.Wire, abutBox: PipalInt.Rectangle, subPort: Pipal.Object]; <> <<>> PutRecordPorts: PROC [decoration: Decoration, record: Core.CellType, abutBox: PipalInt.Rectangle]; <> <> <<>> <> <> <<>> HasObject: PROC [decoration: Decoration, cellType: Core.CellType] RETURNS [BOOL]; <<>> GetObject: PROC [decoration: Decoration, cellType: Core.CellType] RETURNS [object: Pipal.Object]; <<>> PutObject: PROC [decoration: Decoration, cellType: Core.CellType, object: Pipal.Object]; <> <> <<>> HasGeometry: PROC [decoration: Decoration, wire: Core.Wire] RETURNS [BOOL]; <> GetGeometry: PROC [decoration: Decoration, wire: Core.Wire] RETURNS [geometry: Pipal.Object _ Pipal.void]; <<>> PutGeometry: PROC [decoration: Decoration, wire: Core.Wire, geometry: Pipal.Object]; <> <> <<>> AddGeometry: PROC [decoration: Decoration, wire: Core.Wire, geometry: Pipal.Object]; <> <> <<>> EachFlatWireProc: TYPE = PROC [wire: Core.Wire, flatWire: CoreFlat.FlatWireRec, trans: PipalInt.Transformation] RETURNS [quit: BOOL _ FALSE]; <> <> EachFlatCellProc: TYPE = PROC [bindings: CoreFlat.Bindings, cell: Core.CellType, flatCell: CoreFlat.FlatCellTypeRec, trans: PipalInt.Transformation] RETURNS [quit: BOOL _ FALSE]; < CoreFlat.FlatWire]. When cell=root, bindings=NIL>> <> LeafProc: TYPE = PROC [cellType: Core.CellType, bindings: CoreFlat.Bindings] RETURNS [BOOL]; <> EnumerateFlatGeometry: PROC [decoration: Decoration, root: Core.CellType, target: CoreFlat.FlatCellTypeRec _ CoreFlat.allFlatCells, leafProc: LeafProc, eachFlatWire: EachFlatWireProc _ NIL, eachFlatCell: EachFlatCellProc _ NIL] RETURNS [quit: BOOL]; <> <> <> <> <> <> <<>> EnumerateAllGeometry: PROC [decoration: Decoration, cell: Core.CellType, wire: Core.Wire, each: PipalInt.EachChildProc, trans: PipalInt.Transformation] RETURNS [quit: BOOL]; <> <> <<>> GetAllGeometry: PROC [decoration: Decoration, cell: Core.CellType, wire: Core.Wire] RETURNS [geometry: Pipal.Object]; <> <> <> <<>> HasTrans: PROC [decoration: Decoration, cellInstance: CoreClasses.CellInstance] RETURNS [BOOL]; <> <<>> GetTrans: PROC [decoration: Decoration, cellInstance: CoreClasses.CellInstance] RETURNS [trans: PipalInt.Transformation]; <> <<>> PutTrans: PROC [decoration: Decoration, cellInstance: CoreClasses.CellInstance, trans: PipalInt.Transformation]; <> <> <> <> <> Side: TYPE = DABasics.Side; Sides: TYPE = DABasics.Sides; noSide: Sides = DABasics.noSide; RegisterRoutingLayer: PROC [layer: PipalMos.Layer]; GetSides: PROC [abutBox: PipalInt.Rectangle, trans: PipalInt.Transformation, port: Pipal.Object] RETURNS [sides: Sides _ noSide]; EachPinProc: TYPE = PROC [min, max: INT, side: Side, layer: PipalMos.Layer] RETURNS [quit: BOOL _ FALSE]; EnumerateSides: PROC [decoration: Decoration, cellType: Core.CellType, wire: Core.Wire, eachPin: EachPinProc] RETURNS [quit: BOOL]; <> EachWirePinProc: TYPE = PROC [wire: Core.Wire, min, max: INT, side: Side, layer: PipalMos.Layer] RETURNS [quit: BOOL _ FALSE]; EnumerateWireSides: PROC [decoration: Decoration, cellType: Core.CellType, eachWirePin: EachWirePinProc] RETURNS [quit: BOOL]; <> <> EnumerateNonOverlappingSides: PROC [decoration: Decoration, cellType: Core.CellType, eachWirePin: EachWirePinProc] RETURNS [quit: BOOL]; <> EachSortedPinProc: TYPE = PROC [wire: Core.Wire, min, max: INT, layer: PipalMos.Layer] RETURNS [quit: BOOL _ FALSE]; EnumerateSortedSides: PROC [decoration: Decoration, cellType: Core.CellType, side: Side, eachSortedPin: EachSortedPinProc] RETURNS [quit: BOOL]; <> <> <> CreateShell: PROC [decoration: Decoration, cellType: Core.CellType, withCuteFonts: BOOL _ FALSE] RETURNS [shell: Pipal.Object]; <> <> <> <> CheckInterface: PROC [decoration: Decoration, cellType: Core.CellType] RETURNS [ok: BOOL]; <> <<>> CheckInternal: PROC [decoration: Decoration, record: Core.CellType] RETURNS [ok: BOOL]; <> <> EnumerateNeighbors: PROC [decoration: Decoration, touch: PipalMos.TouchProc, inX: BOOL, ct1, ct2: Core.CellType, eachPair: PROC [Core.Wire, Core.Wire] RETURNS [quit: BOOL _ FALSE]] RETURNS [BOOL]; <> <> <> <<>> WirePair: TYPE = RECORD [wire1, wire2: Core.Wire]; CreateNeighborsCache: PROC RETURNS [cache: RefTab.Ref]; <> CachedEnumerateNeighbors: PROC [decoration: Decoration, touch: PipalMos.TouchProc, inX: BOOL, ct1, ct2: Core.CellType, cache: RefTab.Ref] RETURNS [LIST OF WirePair]; <> <> END.