<> <> <> <> <> <> DIRECTORY CD, Core, CoreCreate; EUPadFrame: CEDAR DEFINITIONS = BEGIN <> <> <> <> ROPE: TYPE = Core.ROPE; Wire: TYPE = Core.Wire; WireSeq: TYPE = Core.WireSeq; CellType: TYPE = Core.CellType; CellInstance: TYPE = CoreCreate.CellInstance; PA: TYPE = CoreCreate.PA; WR: TYPE = CoreCreate.WR; <> Pads: TYPE = LIST OF Pad; Pad: TYPE = RECORD [public: WR, type: ATOM, pos: NAT, pas: LIST OF PA]; AddPad: PROC [pads: Pads, public: WR, type: ATOM, pos: NAT, pa1, pa2, pa3, pa4: PA _ []] RETURNS [Pads]; <> <<>> AddPadList: PROC [pads: Pads, public: WR, type: ATOM, pos: NAT, pas: LIST OF PA _ NIL] RETURNS [Pads]; <> <<>> AddPads: PROC [pads: Pads, public: Wire, type: ATOM, firstPos: NAT, reverse: BOOL _ FALSE, pa1, pa2, pa3, pa4: PA _ []] RETURNS [Pads]; <> <> CreatePadFrame: PROC [public: WireSeq, onlyInternal: WireSeq, innerInstance: CellInstance, pads: Pads, params: PadFrameParametersRec, name: ROPE _ NIL, props: Core.Properties _ NIL] RETURNS [fullChip: CellType]; <> <> <> <<>> PadFrameParameters: TYPE = REF PadFrameParametersRec; PadFrameParametersRec: TYPE = RECORD [ horizLayer: ROPE, -- "poly", "metal" or "metal2", runs length of area vertLayer: ROPE, -- branch goes across the area nbPadsX, nbPadsY: NAT, -- one pad is the corner in every side library: ROPE _ NIL, -- name of the library. Default means "Pads.dale" centerDisplacement: CD.Position _ [0, 0], -- quantity to be added to Cabbage.Center outerChanWidth: INT _ 8, -- width of channel at periphery in lambdas powerCellWidth : INT _ 100, -- width of power at periphery in lambdas padsData: REF PadsData _ NIL, -- used by implementation design: Design _ NIL -- used by implementation ]; padFrameParamsProp: PRIVATE ATOM; -- on cellType; type PadFrameParameters Design: PRIVATE TYPE = CD.Design; PadData: PRIVATE TYPE = RECORD [ instance: CellInstance _ NIL, trans: CD.Transformation _ [] -- [0, 0] is the lower-left of the cavity ]; PadsData: TYPE = RECORD [SEQUENCE nbOfPads: NAT OF PadData]; END.