DIRECTORY FS, IO, AbSets, LichenDataStructure; LichenDataOps: CEDAR DEFINITIONS IMPORTS AbSets, LichenDataStructure = BEGIN OPEN Sets:AbSets, LichenDataStructure; EnsureAllIn: PROC [design: Design]; EnsurePublic: PROC [ct: CellType]; EnsurePrivate: PROC [ct: CellType]; ExpansionKnown: PROC [ct: CellType] RETURNS [known: BOOL]; AssertionOp: TYPE = {ignore, report, check, establish}; MerelyCheckableAssertionOp: TYPE = AssertionOp [ignore .. check]; FailableAssertionOp: TYPE = AssertionOp [report .. check]; CheckDesign: PROC [design: Design, rep, norm: AssertionOp, comparable: MerelyCheckableAssertionOp]; CheckCellType: PROC [ct: CellType, rep, norm: AssertionOp, comparable: MerelyCheckableAssertionOp, interface, internals, instances: BOOL _ TRUE]; CheckCellTypes: PROC [cts: ConstSet--of CellType--, rep, norm: AssertionOp, comparable: MerelyCheckableAssertionOp, interface, internals, instances: BOOL _ TRUE]; NoteChange: PROC [cellType: CellType]; AddPort: PROC [p: PortPrivate _ []] RETURNS [port: Port]; FullyAddPort: PROC [p: PortPrivate _ [], andReportConnectionTo: CellInstance _ NIL] RETURNS [port: Port, connection: Wire _ NIL]; RemovePort: PROC [port: Port]; AddEdge: PROC [vs: ARRAY GraphDirection OF Vertex, port: Port]; AddEdges: PROC [vs: ARRAY GraphDirection OF Vertex, port: Port]; RemoveEdge: PROC [e: Edge]; RemoveEdges: PROC [e: Edge]; UnlinkPort: PROC [ci: CellInstance, port: Port]; UnlinkPorts: PROC [ci: CellInstance, ports: ConstSet--of Port--]; Instantiate: PROC [type, containingCT: CellType, names: ListData _ noListData, other: Assertions _ NIL] RETURNS [ci: CellInstance]; PortForWire: PROC [ct: CellType, internal: Wire, ci: CellInstance, mayAdd: BOOL] RETURNS [port: Port, external: Wire]; FullyInstantiate: PROC [type, containingCT: CellType, names: ListData _ noListData, other: Assertions _ NIL] RETURNS [ci: CellInstance]; CreateWire: PROC [containingCT: CellType, containingWire: Wire _ NIL, names: ListData _ noListData, other: Assertions _ NIL, copy: Wire _ NIL] RETURNS [w: Wire]; CreateIntermediary: PROC [from: Vertex, go: GraphDirection, containingCT: CellType, port: Port, names: ListData _ noListData, other: Assertions _ NIL] RETURNS [im: Intermediary]; CreateCellType: PROC [design: Design, cellTypeName: ROPE, class: CellClass, inheritNames, internals: BOOL, otherPublic, otherPrivate: Assertions _ NIL] RETURNS [ct: CellType]; CreateArray: PROC [design: Design, cellTypeName: ROPE, class: CellClass, eltType: CellType, size2, basePeriod: Size2, inheritNames: BOOL, otherPublic, otherPrivate: Assertions _ NIL] RETURNS [ct: CellType]; CrossNames: PROC [outer, inner: Set--of SteppyName--] RETURNS [ListData]; FetchVertex: PROC [ct: CellType, name: SteppyName] RETURNS [Vertex]; KnowVertexName: PROC [v: Vertex, name: SteppyName]; ForgetVertexName: PROC [v: Vertex, name: SteppyName]; IndexVertexNames: PROC [v: Vertex, names: Set _ Sets.nilSet]; UnindexVertexNames: PROC [v: Vertex]; KnowPortName: PROC [p: Port, name: SteppyName] RETURNS [new: BOOL] ~ INLINE {new _ p.PortNames.AddElt[SnV[name]]}; ForgetPortName: PROC [p: Port, name: SteppyName] RETURNS [knew: BOOL] ~ INLINE {knew _ p.PortNames.RemElt[SnV[name]]}; NoteLevelChange: PROC [w: Wire]; DeleteVertex: PROC [v: Vertex]; IsMirror: PROC [v: CellInstance] RETURNS [isMirror: BOOL]; AddMirror: PROC [CellType]; MergeNets: PROC [net1, net2: Wire] RETURNS [merged, doomed: Wire]; GroupWires: PROC [sibs: Seq--of wire--, parentNames: ListData] RETURNS [parent: Wire]; GroupPorts: PROC [sibs: Seq--of port--, parentNames: ListData] RETURNS [parent: Port]; ExpandName: PROC [fileName, defaultExtension: ROPE] RETURNS [fullFName: ROPE, cp: FS.ComponentPositions]; ParseSteppyName: PROC [raw: ROPE] RETURNS [SteppyName]; UnparseSteppyName: PROC [s: SteppyName] RETURNS [ROPE]; Log: PROC [fmt: ROPE, args: LORA _ NIL]; PrintOnLog: PROC [REF ANY]; END. าLichenDataOps.Mesa Last tweaked by Mike Spreitzer on February 2, 1988 12:45:09 pm PST = A ct B deisgn : EnsurePrivate[ct] Make sure interface is fully defined. Make sure the internals are as known as possible. Do we know how this cell type is decomposed? Adds as last child of parent, if any. Adds dummy wires by instances and groups in arrays. Edge for port.prev (if that's not NIL) must already be present. Will introduce Intermediaries, if necessary. Removes ancestor Intermediaries that have no children. Remove the edge for given port, which must be immediately connected. Remove the edges for given ports, which need not be immediately connected. If ci#NIL, ci.port is connected to external. Adds dummy wires. As last child of containingWire, if any. With same structure as copy, if given, leaf structure otherwise. The sibs must all be siblings; the parent is introduced in their place and the siblings are moved below the parent. Graph connections are fixed up. ส”– "cedar" style˜code™KšœB™B—K˜Kšฯk œœœ˜.K˜šัbnx œœ ˜ Kšœ˜#Kšœ˜K˜Kšœœฯnœ˜,K˜šŸ œœ˜#Kšœฯmœ œ™#—K˜šŸ œœ˜"K™%—K˜šŸ œœ˜#K™1—K˜šŸœœœ œ˜:K™,—K˜Kšœ œ&˜7Kšœœ!˜AKšœœ!˜:K˜KšŸ œœR˜cKšŸ œœqœœ˜‘Kš Ÿœœฯcœcœœ˜ขK˜KšŸ œœ˜&K˜šŸœœœ˜9K™%—š Ÿ œœ=œœ!œ˜K™3—KšŸ œœ˜šŸœœœœ˜?Kšœ"œ™?—šŸœœœœ˜@K™,—KšŸ œœ ˜šŸ œœ ˜K™6—šŸ œœ ˜0K™D—šŸ œœ#ก œ˜AK™J—KšŸ œœRœœ˜ƒšŸ œœ:œœ˜vKšœœ#™,—šŸœœRœœ˜ˆK™—š Ÿ œœ1œ4œœœ ˜กKšœ(™(K™@—KšŸœœzœœ˜ฒKš Ÿœœ œ-œ*œœ˜ฏKš Ÿ œœ œOœ*œœ˜ฮKšŸ œœกœœ ˜IKšŸ œœ"œ ˜DKšŸœœ˜3KšŸœœ˜5KšŸœœ'˜=KšŸœœ ˜%šŸ œœœœ˜BKšœœ'˜/—šŸœœœœ˜EKšœœ(˜0—KšŸœœ ˜ KšŸ œœ ˜KšŸœœœ œ˜:KšŸ œœ ˜KšŸ œœœ˜BšŸ œœ ก œœ˜VKšœ”™”—KšŸ œœ ก œœ˜VK˜Kš Ÿ œœœœ œœ˜iKšŸœœœœ˜7KšŸœœœœ˜7K˜Kš Ÿœœœœœ˜(KšŸ œœœœ˜K˜Kšœ˜——…—"ˆ