PadFrame.mesa 
Copyright © 1986 by Xerox Corporation. All rights reversed.
Louis Monier April 23, 1986 11:32:05 am PST
Bertrand Serlet June 22, 1986 2:58:58 pm PDT
DIRECTORY CD, Core, CoreCreate;
PadFrame: CEDAR DEFINITIONS =
BEGIN
Common types
ROPE: TYPE = Core.ROPE;
Wire: TYPE = Core.Wire;
Generation of the Core
Core level: the top level cellType describing a chip is a record cellType containing n+1 instances: n pads and the inner. Every pad instance (excluding the inner) carries the property packagePinProp which is used to derive its geometrical position in the pad frame. The only instance without this property is the inner. Every pad cellType must have a public wire named "Pad" (for Bonnie).
packagePinProp: ATOM; -- on instances; type REF NAT; interpretation depends on package
AddPad: PUBLIC PROC [iL: CoreCreate.CellInstances, pad: CoreCreate.WR, type: ATOM, pos: NAT, pa1, pa2, pa3, pa4: CoreCreate.PA ← []] RETURNS [newInsts: CoreCreate.CellInstances];
type is the name of a pad of the library
AddPads: PUBLIC PROC [iL: CoreCreate.CellInstances, pad: Wire, type: ATOM, firstPos: NAT, reverse: BOOLFALSE, pa1, pa2, pa3, pa4: CoreCreate.PA ← []] RETURNS [newInsts: CoreCreate.CellInstances];
type is the name of a pad of the library
size of pad induces number of pad instanciated
Generation of the Layout
Layout: the layout atom is $PadFrame. The layout proc creates the four sides, inserts automatically extra power pads, places the inner and calls Cabbage to do the routing. The resulting cell is flattened so that the extra power pads and the routing are expanded. This style produces fixed-size PadFrames.
padDesign: CD.Design;
design containing the pads
padFrameParamsProp: ATOM; -- on cellType; type PadFrameParameters
PadFrameParameters: TYPE = REF PadFrameParametersRec;
PadFrameParametersRec: TYPE = RECORD [
horizLayer: ROPE,      -- "poly", "metal" or "metal2", runs length of area
vertLayer: ROPE,      -- branch goes across the area
nbPadsX, nbPadsY: NAT,    -- one pad is the corner in every side
centerDisplacement: CD.Position ← [0, 0]  -- quantity to be added to Cabbage.Center
];
END.