<> <> <> <> DIRECTORY CD, RefTab, Stix; StixCompact: CEDAR DEFINITIONS = BEGIN OPEN Stix; <<>> <> <> CompactProc: TYPE = PROC [cellType: CellType, dr: DRules]; <> <<-- Input stix, output CD>> SimpleExpand: PROC [from, to: CD.Design, stCell: Object] RETURNS [mosOb: Object]; <> <<-- A group is a collection of StickPtr which are "rigidly attached" and move together during a compaction; a group is always defined with respect to an axis;>> <<-- A StickPtr can be in several groups: during an X compaction, a horizontal wire must be in at least two groups: remember that the wire can be thicker than a contact.>> Graph: TYPE = REF GraphRec; GraphRec: TYPE = RECORD[groups: SEQUENCE size: NAT OF Group]; Arc: TYPE = RECORD [g: Group, dist: NAT]; Groups: TYPE = LIST OF Group; -- sorted by coord Group: TYPE = REF GroupRec; GroupRec: TYPE = RECORD [ coord: INT, -- coordinate of the centerline of the group nodes: Nodes _ NIL, -- all nodes in the group insts: StickPtrs _ NIL, -- all instances having a node in the group <> newCoord: INT _ 0, -- target coordinate after compaction hasPinOnexternalEdge: BOOL _ FALSE -- if the group contains a right pin (X) or top pin (Y) ]; <<>> <<-- Compaction: think about adding constaints!>> CompactXCmd: PROC [from, to: CD.Design, stCell: Object] RETURNS [mosOb: Object]; CompactXYCmd: PROC [from, to: CD.Design, stCell: Object] RETURNS [mosOb: Object]; CompactX: CompactProc; CompactY: CompactProc; CompactXY: CompactProc; CompactYX: CompactProc; END. <<>>