DIRECTORY CD, Core, D2Basic, Properties, Rope, Route, RTBasic; SC: CEDAR DEFINITIONS = BEGIN RopeList: TYPE = LIST OF Rope.ROPE; Layer: TYPE = CD.Layer; Rect: TYPE = D2Basic.Rect; RefRect: TYPE = REF Rect; Pos: TYPE = D2Basic.Pos; Number: TYPE = D2Basic.Number; SideOrNone: TYPE = RTBasic.SideOrNone; Side: TYPE = RTBasic.Side; DirectionOrNone: TYPE = RTBasic.DirectionOrNone; Direction: TYPE = RTBasic.Direction; PropList: TYPE = Properties.PropList; Error: ERROR [errorType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; Signal: SIGNAL [signalType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; ErrorType: TYPE = {programmingError, callingError, noResource, other}; DesignRules: TYPE = REF DesignRulesRec; DesignRulesRec: TYPE = RECORD[ horizLayer, vertLayer: Rope.ROPE, rowRules, sideRules: Route.DesignRules, technology: PRIVATE REF ANY _ NIL, properties: PropList _ NIL]; CreateDesignRules: PROC [technologyKey: ATOM, horizLayer, vertLayer: Rope.ROPE, rowDirection: Direction, properties: PropList _ NIL] RETURNS [designRules: DesignRules]; Handle: TYPE = REF HandleRec; HandleRec: TYPE = RECORD [ name: Rope.ROPE _ NIL, coreCellType: Core.CellType _ NIL, rules: DesignRules _ NIL, properties: PropList _ NIL, parms: PRIVATE REF ANY _ NIL, structureData: PRIVATE REF ANY _ NIL, layoutData: PRIVATE REF ANY _ NIL]; Result: TYPE = REF ResultRec; ResultRec: TYPE = RECORD[ handle: Handle, object: CD.Object, rect: Rect _ [0, 0, 0, 0], polyLength, metalLength, metal2Length, polyToMetal, metalToMetal2: NAT _ 0, numIncompletes: NAT _ 0, incompleteNets: RopeList _ NIL]; CreateHandle: PROC [cellType: Core.CellType, cdDesign, libDesign: CD.Design, designRules: DesignRules, name: Rope.ROPE _ NIL, properties: PropList _ NIL] RETURNS [handle: Handle]; unconnectedProp: ATOM; InitialPlace: PROC [handle: Handle, numRows: NAT _ 0]; PosImprove: PROC [handle: Handle, maxCycles: INT _ 5]; OrientImprove: PROC [handle: Handle, maxCycles: INT _ 5]; PlaceImprove: PROC [handle: Handle, t0: REAL _ 100000.0, alpha: REAL _ 0.98, eqVarLimit: REAL _ 0.10, fzVarLimit: REAL _ 0.02, eqTabSize, fzTabSize: INT _ 200, seed: INT _ 0]; GlobalRoute: PROC [handle: Handle]; DetailRoute: PROC [handle: Handle] RETURNS [result: Result]; Destroy: PROC [handle: Handle]; CreateLayout: PROC [technologyKey: ATOM, horizLayer, vertLayer: Rope.ROPE, rowDirection: Direction, numRows: NAT, cellType: Core.CellType, cdDesign, libDesign: CD.Design _ NIL, name: Rope.ROPE _ NIL, properties: PropList _ NIL] RETURNS [object: CD.Object]; END.  SC.mesa ///StdCell/SC.mesa Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. Last Edited by: Preas, November 7, 1985 10:11:48 am PST Theory This interface defines the basic data structures and procedures to define a standard cell object from a Core description. Common Types Errors Design Rules Define the standard cell design rules. technologyKey values must correspond to one of the ChipNDale technologies. horizLayer, vertLayer should be "poly", "metal" or "metal2". StdCell Design Create a StdCellHandle. The StdCellHandle definition includes the design rules (conductor and via widths and spacings) for the routing channels as well as the circuit structure definition. Core does not permit pins to be unconnected; this is a problem! unconnected pins are signified by attaching them to a net with the unconnectedProp property. Standard Cell Optimization and Construction The following operations are available for a standard cell design. Determine an initial placement for the instances. Improve the positions of instances whithin rows. Improve the orientation of instances. Improve the placement for the instances. Determine strategic paths for the wiring that must cross cell rows. Determine actual wiring paths. Create a ChipNDale object and include the placement and routing in the object. This object will be included in design if design # NIL (form CreateHandle). Clean Up Remove circular references so garbage collection can work Sugar Create a standard cell object by performing the above operations Κ>˜Jšœ™Jšœ Οmœ7™BJ™7J™šΟk œ˜ Jšžœ˜J˜Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜—J˜JšΠbkœžœž œž˜head™Ibody™y—™ Jš œ žœžœžœžœ˜#Jšœžœžœ˜Jšœžœ˜Jšœ žœžœ˜Jšœžœ˜Jšœžœ˜Jšœ žœ˜&Jšœžœ˜Jšœžœ˜0Jšœ žœ˜$Jšœ žœ˜%—™JšΟnœžœ9žœžœ˜QJš œžœ:žœžœ˜TJšœ žœ7˜F—™ Jšœ žœžœ˜'šœžœžœ˜Jšœžœ˜!Jšœ'˜'Jš œ žœžœžœžœ˜"Jšœžœ˜J˜J˜—š  œžœžœžœ2žœžœ˜¨Jšœ“Οc™―——™Jšœžœžœ ˜šœ žœžœ˜Jšœ žœžœ˜Jšœžœ˜"Jšœžœ˜Jšœžœ˜Jš œžœžœžœžœ˜Jš œžœžœžœžœ˜%Jš œ žœžœžœžœ˜#J˜—Jšœžœžœ ˜šœ žœžœ˜Jšœ˜Jšœžœ˜J˜JšœCžœ˜KJšœžœ˜Jšœžœ˜ —J˜J˜š  œžœ0žœ.žœžœžœžœ˜³Jšœ½™½—J˜šœžœ˜šœ@™@Jšœ\™\———™+JšœB™BJ˜š  œžœžœ˜6J™1J™—š  œžœžœ˜6J™0J™—š  œžœžœ˜9J™%J™—š  œžœžœžœžœžœžœžœ˜―J™(J™—š  œžœ˜#J™CJ˜—š  œžœžœ˜