DIRECTORY ReadConnection, SymTab, Rope, IP, IPParams; -- Intro: This interface and its implementation is not meant to be space nor time efficient. IPChipRose: CEDAR DEFINITIONS IMPORTS IPParams = BEGIN OPEN RC: ReadConnection; Ref: TYPE = REF Rep; Rep: TYPE = RECORD[ cellTypeName: Rope.ROPE, nets, ports, instances, types: SymTab.Ref ]; PortRec: TYPE = RECORD[ eqClass, net: Rope.ROPE, direction: RC.Direction --{Unknown, Input, Output, InputOutput} ]; NetRec: TYPE = RECORD[generation: RC.Generation]; InstanceRec: TYPE = RECORD[ type: Rope.ROPE, pinNets: LIST OF PinNetRec, origin: REF IP.IntVector _ NIL, --Set by initFile. origin # NIL (ie. instance has been intially placed) => active = TRUE orient: IP.Orientation -- set by initFile ]; PinNetRec: TYPE = RECORD[pin, net: Rope.ROPE]; TypeRec: TYPE = RECORD[ origin: IP.IntVector, --keep this so that relative pin positions can be computed instances: LIST OF Rope.ROPE, --All instances of this type pins: LIST OF REF IP.PinRep, --name, physicalPins, auxInfo shape: REF ShapeRep _ NIL, --width, height and the sizes of the four corners shapeFn: REF _ NIL, --Function for shape determintaion restriction: REF _ NIL -- Restriction on shape (and orientation) ]; ShapeRep: TYPE = IP.ShapeRep; EachNetAction: TYPE = PROC[net: Rope.ROPE, val: REF NetRec] RETURNS [quit: BOOL _ FALSE]; EachPortAction: TYPE = PROC[port: Rope.ROPE, val: REF PortRec] RETURNS [quit: BOOL _ FALSE]; EachTypeAction: TYPE = PROC[type: Rope.ROPE, val: REF TypeRec] RETURNS [quit: BOOL _ FALSE]; EachInstanceAction: TYPE = PROC[instance: Rope.ROPE, val: REF InstanceRec] RETURNS [quit: BOOL _ FALSE]; Which: TYPE = {net, port, type, instance}; CreateFrom: PROC[roseFile, chipFile, typFile, initFile: Rope.ROPE _ NIL, chipBeforeTyp: BOOL _ FALSE, debug: BOOL _ IPParams.DebugSystem] RETURNS [Ref]; Fetch: PROC[r: Ref, name: Rope.ROPE, what: Which] RETURNS [REF]; Nets: PROC[r: Ref, action: EachNetAction]; Ports: PROC[r: Ref, action: EachPortAction]; Types: PROC [r: Ref, action: EachTypeAction]; Instances: PROC[r: Ref, action: EachInstanceAction]; END. @-- File: IPChipRose.mesa Last Edited by: CSChow, February 1, 1985 10:37:26 pm PST -- The emphasis is on simplicity for the client and ease of implementaion (and change) -- for me. Its primary purpose is to extract design information -- from Rosemary (Y.sch), ChipNDale (X.dale) and IP's type definitions -- convert it into a more accessible representation. It is intended that -- this access to be done infrequently (eg. once) with the client building -- more space-time efficient representation from it. -- Remark: This is the only module that interfaces the system to 'external world' --(1) Entry for a port in ports --(2) Entry for a net in nets --(3) Entry for an instance in instances --(4) Entry for a type in types --The following 4 enumeration functions provide easy access to -- information in IPChipRose.Ref. Changing contents of val is permanent. -- NB: roseFile = Rosemary structure file; chipFile = File from chipNdale; -- typFile = Alternative to chipFile; initFile = initialization file; -- chipFile or typFile can be NIL as long as all types are definitions are available -- initFile is the initialization file for the placer -- if ~ debug then extract only those types used by instances in roseFile -- if chipBeforeTyp then chipFile has higher precedence than typFile -- Have to NARROW results yourself. Κ ˜J™J™8J™šΟk ˜ Jšœ˜J˜Jšœ˜Jšœ˜Jšœ ˜ —J˜JšΟc]˜]JšžW™WJšž@™@JšœžD™GJšœžF™IJšžK™KJšž4™4J™J™QJšœ™J˜šœ œ œ˜Jšœ œœœ˜1J˜Jšœœœ˜šœœœ˜Jšœœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜—J˜Jšœ™codešœ œœ˜Kšœ ˜ Kšœ œ˜Kšœ œ ž'˜?Kšœ˜J™—Jšœ™Jšœœœ œ ˜1J˜J˜Jšœ(™(šœ œœ˜Jšœ œ˜Jšœ œœ ˜Jšœœœ œžX˜yJšœœ žœž˜)Jšœ˜—Jšœ œœœ˜.J˜Jšœ™šœ œœ˜Jšœœ ž:˜QJšœ œœœž˜:Jš œœœœœ ž˜:Jšœœ œž1˜LJšœ œœž"˜6Jšœ œœž)˜AJšœ˜—J˜Jšœ œ˜J™K•StartOfExpansion[]šœ@™@KšžJ™JK˜KšΟn œœœ œœ œœœ˜YKšŸœœœ œœ œœœ˜\KšŸœœœ œœ œœœ˜\KšŸœœœœœœœœ˜hJ˜Jšœœ˜*J˜šŸ œœ-œœœœ œœ˜˜JšœJ™JJšœE™EJšœT™TJ™5JšœI™IJšœD™D—J˜š Ÿœœœœœ˜@Kšœ$™$—J˜JšŸœœ ˜*J˜JšŸœœ!˜,J˜JšŸœœ"˜-K˜KšŸ œœ%˜4K˜Jšœ˜J˜——…—>‹