DIRECTORY CD USING [Orientation, Position, Rect], Rope USING [ROPE]; IP: CEDAR DEFINITIONS = BEGIN IntVector: TYPE = CD.Position; -- RECORD [x, y: INT] NatVector: TYPE = RECORD [x, y: NAT]; -- could have used NatVector: TYPE = IntVector, but this provides -- more constraint to aid debugging Orientation: TYPE = CD.Orientation; --Essentially [0..7] _ 0 CornerTypes: TYPE = {sw, se, ne, nw}; EdgeTypes: TYPE = {south, east, north, west}; PolarityTypes: TYPE = {neg, pos}; OrientationTypes: TYPE = {hor, ver}; CoTypeRep: TYPE = RECORD[ name: Rope.ROPE, instances: LIST OF REF ComponentRep, pins: LIST OF REF PinRep, shapeInfo: ShapeInfoRec, any: REF _ NIL ]; ShapeInfoRec: TYPE = RECORD[ shape: REF ShapeRep, shapeFn: REF, restriction: REF ]; ShapeRep: TYPE = RECORD[ dim: REF NatVector, --should not be NIL cornerSpaces: RECORD[sw, se, ne, nw: REF NatVector _ NIL] ]; PinRep: TYPE = RECORD[ name: Rope.ROPE, physicalPins: LIST OF REF PhysicalPinRep _ NIL, auxInfo: REF _ NIL -- Haven't decided what to use this for ]; PhysicalPinRep: TYPE = RECORD[ coord: IntVector, --relative to owner side: PinSideType _ unknown, --The closest edge active: BOOL _ FALSE -- active <=> used in computation of net length ]; NetRep: TYPE = RECORD[ name: Rope.ROPE, pinNets: LIST OF REF PinNetRep _ NIL, any: REF _ NIL ]; PinNetRep: TYPE = RECORD[ name: Rope.ROPE, net: REF NetRep, owner: REF ComponentRep, --Component physicalPins: LIST OF REF PhysicalPinRep _ NIL, any: REF _ NIL ]; PortRep: TYPE = RECORD[ name, eqClass: Rope.ROPE, net: REF NetRep, position: REF IntVector _ NIL, -- position = NIL iff port is not placed any: REF _ NIL ]; ComponentRep: TYPE = RECORD [ name: Rope.ROPE, origin: IntVector, active: BOOL, prinChannels: RECORD [south, east, north, west: REF ChannelRep], shape: ShapeRep, cornerChannels: RECORD[sw, se, ne, nw: REF CornerChannelsRep _ NIL], type: REF CoTypeRep, orient: CD.Orientation, pinNets: LIST OF REF PinNetRep, any: REF _ NIL -- For holding anything ]; CornerChannelsRep: TYPE = RECORD[hor, ver: REF ChannelRep]; PinSideType: TYPE = {south, east, north, west, swHor, seHor, neHor, nwHor, swVer, seVer, neVer, nwVer, interior, unknown}; ChannelRep: TYPE = RECORD[ type: ChType, name: Rope.ROPE, slack: RECORD[neg, pos: INT], --neg = (left/bottom)-most & pos = (right/top)most width: NAT, --width is a property of the channel, slack is a result from geometrize coord: INT, boundary: REF ChBoundaryRep, chNode: NAT _ 0, statistics: ChStatRep, -- This is used in channel width estimation any: REF _ NIL --For holding anything ]; ChType: TYPE = OrientationTypes; IntersectionRep: TYPE = RECORD[ ch: REF ChannelRep, type: IntersectionType, any: REF _ NIL --For holding anything ]; IntersectionType: TYPE = [-1..1]; -- 1 => above/right, 0 = crossing, -1 => below/left ChStatRep: TYPE = RECORD[ activePin, -- number of active pins on this channel nonActivePin: INT _ 0, -- number of non active pins netFactor: REAL _ 0.0 --contribution from intersection between net and channel ]; --interior pins are not counted ChBoundaryRep: TYPE = RECORD[ owner: REF ChannelRep, negSideHd, negSideTl, posSideHd, posSideTl: LIST OF REF IntersectionNodeRep _ NIL, negEnd, posEnd: REF IntersectionNodeRep _ NIL, negComp, posComp: REF ComponentRep _ NIL ]; IntersectionNodeRep: TYPE = RECORD[ owner: REF ChannelRep, intersection: REF IntersectionRep, dual: REF IntersectionNodeRep _ NIL, negComp, posComp: REF ComponentRep _ NIL ]; Rect: TYPE = CD.Rect; --RECORD [x1, y1, x2, y2: INT; --So can use some of the packages in ChipNDale Error: ERROR [ec: ErrorCode _ programmingError, explanation: Rope.ROPE _ NIL]; ErrorCode: TYPE = {programmingError, callingError, noResource, doubleRegistration, missingRegistration, other}; END. ς--File: IP.mesa --Last Edited by: CSChow, February 1, 1985 8:17:19 am PST Preas, August 1, 1986 10:16:46 pm PDT --IP = Interactive (or Intelligent, if you're a believer) Placer --Most major/important records here have an 'any' field of REF ANY. -- This is for holding various various data with the records. -- Can be used by client or anybody. Client's responsibility to ensure no conflict. --Arithmetics --IPBasicsOps --IPTypeTab: This is the 'Type' record. --IPNetTab-- --IPPortTab-- --IPCoTab: this is the 'instance' record-- --IPCTG: This is the channel record-- -- Use in channel width estimation --IPCB -- --Rectangle abstraction, a more efficient one compared to Misc.Rect -- Errors & Signals -- Copied From ChipNDale: CD.mesa Κ Ξ˜Jšœ™™9Icode™%—J™J™@J™J™DJ™>J™SJ™šΟk ˜ K– "Cedar" stylešœœ˜'K– "Cedar" stylešœœœ˜—J˜šœœ œ˜J˜J™ – "Cedar" stylešœ œœ Οc˜!K– "Cedar" stylešž˜—– "Cedar" stylešœ œœœ˜&K– "Cedar" stylešžC˜CK– "Cedar" stylešœž ˜#—J˜Jšœ œœž˜=J˜J™ Jšœ œ˜%Jšœ œ˜-Jšœœ˜!Jšœœ˜$J˜J™J™'– "Cedar" stylešœ œœ˜K– "Cedar" stylešœ œ˜K– "Cedar" stylešœ œœœ˜$K– "Cedar" stylešœœœœ˜K– "Cedar" stylešœ˜K– "Cedar" stylešœœ˜K– "Cedar" stylešœ˜—K– "Cedar" style˜– "Cedar" stylešœœœ˜K– "Cedar" stylešœœ ˜K– "Cedar" stylešœ œ˜ K– "Cedar" stylešœ ˜K– "Cedar" stylešœ˜—K– "Cedar" style˜– "Cedar" stylešœ œœ˜K– "Cedar" stylešœœ ž˜(K– "Cedar" stylešœœœ œ˜9K– "Cedar" stylešœ˜—K– "Cedar" style™– "Cedar" stylešœœœ˜K– "Cedar" stylešœ œ˜K– "Cedar" styleš œœœœœ˜/K– "Cedar" stylešœ œœž(˜;K– "Cedar" style˜—K– "Cedar" style™– "Cedar" stylešœœœ˜K– "Cedar" stylešœž˜%K– "Cedar" stylešœž˜/K– "Cedar" stylešœœœž/˜EK– "Cedar" style˜—K– "Cedar" style™K– "Cedar" style™ ˜Jšœ œ˜Jš œ œœœ œ˜%Jšœœ˜J˜—K– "Cedar" style˜– "Cedar" stylešœ œœ˜K– "Cedar" stylešœ œ˜K– "Cedar" stylešœœ˜K– "Cedar" stylešœœž ˜$K– "Cedar" stylešœœœœ˜/K– "Cedar" stylešœœœ˜K– "Cedar" stylešœ˜—J˜J™ J˜šœ œœ˜J˜Jšœœ˜Jšœœ˜Jšœ œ œž(˜GK– "Cedar" stylešœœœ˜Jšœ˜—J™Jšœ*™*šœœœ˜Jšœ œ˜Jšœ˜Jšœœ˜Jšœœœ˜AJšœ˜Jšœœœœ˜DJšœœ ˜Jšœœ ˜Jšœ œœœ ˜Jšœœœž˜&Jšœ˜—K– "Cedar" style˜K– "Cedar" stylešœœœ œ ˜;K– "Cedar" style˜K– "Cedar" stylešœ œi˜zK– "Cedar" style˜K– "Cedar" style™K– "Cedar" style™%šœ œœ˜Jšœ˜Jšœ œ˜Jšœœ œž2˜PJšœœžG˜WJšœœ˜ Jšœ œ˜Jšœœ˜Jšœž+˜BJšœœœž˜%Jšœ˜—Jšœœ˜ šœœœ˜Jšœœ ˜Jšœ˜Jšœœœž˜%Jšœ˜—Jšœœ?˜UJ˜šœ œœ˜J™"Jšœ ž(˜5Jšœœž˜3Jšœ œž8˜OJšœž˜"—K– "Cedar" style™K– "Cedar" style™ – "Cedar" stylešœœœ˜K– "Cedar" stylešœœ ˜K– "Cedar" styleš œ,œœœœ˜RK– "Cedar" stylešœœœ˜.K– "Cedar" stylešœœ˜(K– "Cedar" stylešœ˜—šœœœ˜#Jšœœ ˜Jšœœ˜#Jšœœœ˜%Jšœœ˜(Jšœ˜—K– "Cedar" style˜K– "Cedar" style™C– "Cedar" stylešœœœž˜5K– "Cedar" stylešœž,˜.—K– "Cedar" style™K– "Cedar" style™K– "Cedar" stylešœ™K– "Cedar" style™!J˜JšΟbœœ6œœ˜NJšœ œ`˜oK– "Cedar" style˜K– "Cedar" stylešœ˜——…—Β‚