file ///StdCell/SCInstUtil.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
compoments utility routines
-- InstWidth - find width of component at current orientation
-- InstHeight - find height of component at current orientation
-- BpHeight - find height of bp when considering side it is on
-- BpWidth - find width of bp when considering side it is on
-- MinMaxBPOffset - find min and max offsets of bonding pads on side
-- BpOffsets - find offsets of bonding pads on side
-- BpPos - find position of inst on side
-- PosOf- find the position (side, x, and y) of a component on a pin
-- PowerPosOf- find the position (side, x, and y) of a power pin
-- RotateRect- Rotate a rectangle of a cell
-- LgOffsets- determine offsets of components in row
-- AllOffsets - determine all component offsets
-- AsgnChanPos - assign current positions to horizontal and vertical channels
-- RowsForInsts - find rows that these comps are on
-- CheckInsts - check row and position of comps
-- CheckInst - check row and position of a inst
-- EnumeratePinsOnInst - enumerate the net pins on an instance
-- CDOrien - get the CD orientation on an instance
DIRECTORY
CD,
CoreClasses,
SC,
SCPrivate,
Rope;
SCInstUtil: CEDAR DEFINITIONS =
BEGIN
defltLgOrien: SCPrivate.Orientation;
defltBpOrien: ARRAY SC.Side OF SCPrivate.Orientation;
find width of component at current orientation
InstWidth: PROCEDURE[inst: SCPrivate.Instance] RETURNS[width: SC.Number];
find height of component at current orientation
InstHeight: PROCEDURE[inst: SCPrivate.Instance] RETURNS[height: SC.Number];
find height of bp when considering side it is on this is perpendicular to side
BpHeight: PROCEDURE[inst: SCPrivate.Instance] RETURNS[height: SC.Number];
find width of bp when considering side it is on this is along to side
BpWidth: PROCEDURE[inst: SCPrivate.Instance] RETURNS[width: SC.Number];
find min and max offsets of bonding pads on side
MinMaxBPOffset: PUBLIC PROCEDURE[handle: SC.Handle, side: SC.Side] RETURNS [minOffset, maxOffset: SC.Number];
find offsets of bonding pads on side
BpOffsets: PROCEDURE[handle: SC.Handle, side: SC.Side, pos1, pos2: SCPrivate.ZMaxPosSr ← 0];
find position of inst on side
FUNCTION assumes that channel and bp positions have been assigned.
BpPos: PROCEDURE[handle: SC.Handle, inst: SCPrivate.Instance] RETURNS[result: SC.Number];
find position of inst
assumes that channel and instance positions have been assigned.
InstPos: PUBLIC PROCEDURE[handle: SC.Handle, inst: SCPrivate.Instance] RETURNS[pos: SCPrivate.PQPos];
find the position (side, x, and y) of a component on a pin
PinDescription: TYPE = RECORD [
xPos, yPos: SC.Number, sideOn: SC.Side];
PosOf: PROCEDURE[inst: SCPrivate.Instance, pin: SCPrivate.ObjectPin]
RETURNS [pinDes: PinDescription];
find the position (side, x, and y) of a power pin
PowerPosOf: PROCEDURE[handle: SC.Handle, row: SCPrivate.ZMaxRowSr, net: SCPrivate.Net, lRSide: SCPrivate.LRSide]
RETURNS [xPos, yPos: SC.Number, found: BOOLEAN];
find the position of a rotated rectangle wintin a component
RotateRect: PROCEDURE[inst: SCPrivate.Instance, defRect: SC.Rect]
RETURNS [newRect: SC.Rect];
determine offsets of components in row
LgOffsets: PROCEDURE[handle: SC.Handle, row: SCPrivate.ZMaxRowSr, pos1, pos2: SCPrivate.ZMaxPosSr ← 0];
determine all component offsets
AllOffsets: PROCEDURE[handle: SC.Handle];
assign current positions to horizontal and vertical channels
AsgnChanPos: PROCEDURE[handle: SC.Handle];
find chans that these comps touch
ChansForInsts: PUBLIC PROCEDURE[handle: SC.Handle, insts: SCPrivate.InstanceList]
RETURNS [touchesChan: SCPrivate.ChanSet];
check row and position of a inst
CheckInst: PROCEDURE[handle: SC.Handle, inst: SCPrivate.Instance];
check row and position of a inst
CheckInsts: PROCEDURE[handle: SC.Handle];
EnumerateInstances: PROC [handle: SC.Handle, startInst, stopInst: SCPrivate.MaxInstanceSr, eachInstance: EachInstanceProc] RETURNS [quit: BOOL];
EnumerateAllInstances: PROC [handle: SC.Handle, eachInstance: EachInstanceProc] RETURNS [quit: BOOL];
EachInstanceProc: TYPE = PROC [instance: SCPrivate.Instance] RETURNS [quit: BOOLFALSE];
EnumeratePinsOnInst: PROC [instance: SCPrivate.Instance, eachPin: EachPinProc] RETURNS [quit: BOOL];
EachPinProc: TYPE = PROC [instance: SCPrivate.Instance, pin: NAT, netPin: SCPrivate.PinNet] RETURNS [quit: BOOLFALSE];
DefineInstance: PROCEDURE [handle: SC.Handle, instanceName: Rope.ROPE, object: SCPrivate.Object, coreInstance: CoreClasses.CellInstance, equivName: Rope.ROPENIL]
RETURNS [instance: SCPrivate.Instance ← NIL];
NumInstsOnList: PROCEDURE [instsances: SCPrivate.InstanceList] RETURNS [count: SCPrivate.ZMaxInstanceSr];
CDOrien: PUBLIC PROCEDURE[instance : SCPrivate.Instance] RETURNS [orien: CD.Orientation];
END.