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.ROPE ← NIL];
Signal: SIGNAL [signalType: ErrorType ← callingError, explanation: Rope.ROPE ← NIL];
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.ROPE ← NIL,
coreCellType: Core.CellType ← NIL,
rules: DesignRules ← 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,
stats: LIST OF ChannelStats ← NIL]; -- detailed stastics for evaluation; not rerurned in production mode
ChannelStats: TYPE = REF ChannelStatsRec;
ChannelStatsRec:
TYPE =
RECORD[
channel: INT ← 0,
netStats: LIST OF NetEntry ← NIL];
NetEntry: TYPE = REF NetEntryRec;
NetEntryRec:
TYPE =
RECORD[
name: Rope.ROPE ← NIL,
leftExit, rightExit: BOOL ← FALSE,
pinStats: LIST OF PinEntry ← NIL,
ftStats: LIST OF PinEntry ← NIL];
PinEntry: TYPE = REF PinEntryRec;
PinEntryRec:
TYPE =
RECORD[
bottom: BOOL ← FALSE,
position: INT ← 0];
CreateHandle:
PROC [cellType: Core.CellType, flattenCellType: RTCoreUtil.FlattenCellTypeProc, libName: Rope.
ROPE ←
NIL, designRules: DesignRules, name: Rope.
ROPE ←
NIL]
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.
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.
ExprGlobalRoute:
PROC [handle: Handle];
Determine strategic paths for the wiring that must cross cell rows. Uses experimental global routing
DetailRoute:
PROC [handle: Handle]
RETURNS [result: Result];
Determine actual wiring paths. Create a ChipNDale object and include the placement and routing in the object.
ExprDetailRoute:
PROC [handle: Handle]
RETURNS [result: Result];
Determine actual wiring paths. Create a ChipNDale object and include the placement and routing in the object. Uses experimental global routing
StandardCellPlaceTW:
PROC [cellType: Core.CellType];
send a placement ot Timberwolf for placement