SC.mesa
Copyright Ó 1985, 1986, 1987 by Xerox Corporation. All rights reserved.
Last Edited by: Preas, August 24, 1987 3:43:20 pm PDT
DIRECTORY
CD, Core, CoreGeometry, DABasics, PWCore, Rope, Route, RTCoreUtil;
SC: CEDAR DEFINITIONS = BEGIN
Theory
This interface defines the basic data structures and procedures to define a standard cell object from a Core description.
Common Types
RopeList: TYPE = LIST OF Rope.ROPE;
Layer: TYPE = CD.Layer;
Rect: TYPE = CD.Rect;
RefRect: TYPE = REF Rect;
Pos: TYPE = CD.Position;
Number: TYPE = CD.Number;
SideOrNone: TYPE = DABasics.SideOrNone;
Side: TYPE = DABasics.Side;
Direction: TYPE = DABasics.Direction;
Errors
Error: ERROR [errorType: ErrorType ← callingError, explanation: Rope.ROPENIL];
Signal: SIGNAL [signalType: ErrorType ← callingError, explanation: Rope.ROPENIL];
ErrorType: TYPE = {programmingError, callingError, noResource, other};
Design Rules
DesignRules: TYPE = REF DesignRulesRec;
DesignRulesRec: TYPE = RECORD[
horizLayer, vertLayer: Rope.ROPE,
rowParms, sideParms: Route.DesignRulesParameters,
rowRules, sideRules: Route.DesignRules
];
CreateDesignRules: PROC [technologyKey: ATOM, horizLayer, vertLayer: Rope.ROPE, rowDirection: Direction] RETURNS [designRules: DesignRules];
Define the standard cell design rules. technologyKey values must correspond to one of the ChipNDale technologies. horizLayer, vertLayer should be "poly", "metal" or "metal2".
Standard Cell Handles and Results
Handle: TYPE = REF HandleRec;
HandleRec: TYPE = RECORD [
name: Rope.ROPENIL,
coreCellType: Core.CellType ← NIL,
rules: DesignRules ← NIL,
parms: PRIVATE REF ANYNIL,
structureData: PRIVATE REF ANYNIL,
layoutData: PRIVATE REF ANYNIL];
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, flattenCellType: RTCoreUtil.FlattenCellTypeProc, libName: Rope.ROPENIL, designRules: DesignRules, name: Rope.ROPENIL, decoration: CoreGeometry.Decoration] RETURNS [handle: Handle];
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.
Properties
numRows: ATOM;
Used to specify the number of rows for a standard cell assembly. Should be a property on Core cellType being laid out
sideProp, bottomSideValue, rightSideValue, topSideValue, leftSideValue, noSideValue: ATOM;
Used to specify the side on which a public pin is to be placed. sideProp with (mumble)Value should be a property/value on a public wire
rowProp: ATOM;
Used to specify the row on which a logic cell is to be placed. rowProp and and integer row number should be a property/value on a locig cell insatance
positionProp: ATOM;
Used to specify the position of a logic within a row or of an public pin on a side. May be used on public wire or a logic cell instance.
usePublicPositionsProp: ATOM;
Used to specify the position of a public in the schematic is to be retained int the layout
leftPowerProp, rightPowerProp: ATOM;
Used to specify the side on which power busses are to be placed. May be used on 0, 1 or 2 public wires.
investmentProp, veryLongValue, longValue, mediumValue, shortValue, veryShortValue: ATOM;
Used to specify indirectly the investment to make in placement.
t0SA, maxTStepSA, lambdaSA, tableSizeSA, limitSA: ATOM;
Used to specify DIRECTLY the investment to make in placement.
bottomMaxExits, rightMaxExits, topMaxExits, leftMaxExits: ATOM;
Used to specify the maximum number or exits on a side.
bottomExitSpacing, rightExitSpacing, topExitSpacing, leftExitSpacing: ATOM;
Used to specify the HINT for publics spacing on a side.
interestingProperties: RTCoreUtil.PropertyKeys;
Used to specify all the properties that aer interesting to SC
widthFactorProp: ATOM;
specifies the allowed length of the longest row compared to the minimun distance longest row
handleAtom: ATOM;
for internal use only
Standard Cell Optimization and Construction
The following operations are available for a standard cell design.
InitialPlace: PROC [handle: Handle, numRows: NAT ← 0];
Determine an initial placement for the instances.
PosImprove: PROC [handle: Handle, maxCycles: INT ← 5];
Improve the positions of instances within rows.
FTImprove: PROC [handle: Handle, maxCycles: INT ← 5];
Improve the positions of the feedthrus within rows.
PosImproveWL: PROC [handle: Handle, maxCycles: INT ← 5];
Improve the positions of instances within rows using wire lenght as figure of merit.
OrientImprove: PROC [handle: Handle, maxCycles: INT ← 5];
Improve the orientation of instances.
OrientImproveWL: PROC [handle: Handle, maxCycles: INT ← 5];
Improve the orientation of instances using wire lenght as figure of merit.
HowLongToWork: TYPE = {veryLong, long, medium, short, veryShort, noInvestmentProp};
SAParms: TYPE = RECORD [
t0: REAL ← 100000.0, maxTStep: REAL ← 0.75, lambda: REAL ← 0.7, tableSize, limit: INT ← 200];
SAInitialResult: TYPE = RECORD [
minScore, maxScore, minDelta, maxDelta, avgDelta, standardDeviation: REAL ← 0.0,
numTotal, numDecrease, numIncrease, numNeutral: INT ← 0];
SAInitialPlace: PROC [handle: Handle, widthFactor: REAL ← 1.1, seed: INT ← 0] RETURNS [initialResult: SAInitialResult];
Initialize for simulated annealing improvement.
SAGetParms: PROC [handle: Handle, initialResult: SAInitialResult, cellType: Core.CellType] RETURNS [saParms: SAParms];
determine parameters for simulated placement.
SAPlaceImprove: PROC [handle: Handle, saParms: SAParms, widthFactor: REAL ← 1.1, seed: INT ← 0];
Improve the placement for the instances (in pairs) by simulated annealing.
SAPlaceImproveM: PROC [handle: Handle, saParms: SAParms, widthFactor: REAL ← 1.1, seed: INT ← 0];
Improve the placement for the instances (one at a time) by simulated annealing.
PlaceImprove: PROC [handle: Handle, maxCycles: INT ← 0];
Improve the placement for the instances by exhaustive search.
GlobalRoute: PROC [handle: Handle];
Determine strategic paths for the wiring that must cross cell rows.
DetailRoute: PROC [handle: Handle] RETURNS [result: Result];
Determine actual wiring paths. Create a ChipNDale object and include the placement and routing in the object.
The cellType to layout is a record cellType containing elements from MSI; the layout proc flattens the Core description and calls the standard cell placer and router.
StandardCellLayout: PWCore.LayoutProc;
StandardCellDecorate: PWCore.DecorateProc;
Puts as property on public wires their side
StandardCellAttibutes: PUBLIC PWCore.AttributesProc; -- [cellType: Core.CellType]
Clean Up
Destroy: PROC [handle: Handle];
Remove circular references so garbage collection can work
Sugar
CreateLayout: PROC [technologyKey: ATOM, horizLayer, vertLayer: Rope.ROPE, rowDirection: Direction, numRows: NAT, cellType: Core.CellType, flattenCellType: RTCoreUtil.FlattenCellTypeProc, libName: Rope.ROPENIL, name: Rope.ROPENIL] RETURNS [object: CD.Object];
Create a standard cell object by performing the above operations
END.