DIRECTORY CoreClasses, SC, SCPrivate, Rope; SCInstUtil: CEDAR DEFINITIONS = BEGIN defltLgOrien: SCPrivate.Orientation; defltBpOrien: ARRAY SC.Side OF SCPrivate.Orientation; InstWidth: PROCEDURE[inst: SCPrivate.Instance] RETURNS[width: SC.Number]; InstHeight: PROCEDURE[inst: SCPrivate.Instance] RETURNS[height: SC.Number]; BpHeight: PROCEDURE[inst: SCPrivate.Instance] RETURNS[height: SC.Number]; BpWidth: PROCEDURE[inst: SCPrivate.Instance] RETURNS[width: SC.Number]; MinMaxBPOffset: PUBLIC PROCEDURE[handle: SC.Handle, side: SC.Side] RETURNS [minOffset, maxOffset: SC.Number]; BpOffsets: PROCEDURE[handle: SC.Handle, side: SC.Side, pos1, pos2: SCPrivate.ZMaxPosSr _ 0]; BpPos: PROCEDURE[handle: SC.Handle, inst: SCPrivate.Instance] RETURNS[result: SC.Number]; PinDescription: TYPE = RECORD [ xPos, yPos: SC.Number, sideOn: SC.Side]; PosOf: PROCEDURE[inst: SCPrivate.Instance, pin: SCPrivate.ObjectPin] RETURNS [pinDes: PinDescription]; PowerPosOf: PROCEDURE[handle: SC.Handle, row: SCPrivate.ZMaxRowSr, net: SCPrivate.Net, lRSide: SCPrivate.LRSide] RETURNS [xPos, yPos: SC.Number, found: BOOLEAN]; RotateRect: PROCEDURE[inst: SCPrivate.Instance, defRect: SC.Rect] RETURNS [newRect: SC.Rect]; LgOffsets: PROCEDURE[handle: SC.Handle, row: SCPrivate.ZMaxRowSr, pos1, pos2: SCPrivate.ZMaxPosSr _ 0]; AllOffsets: PROCEDURE[handle: SC.Handle]; AsgnChanPos: PROCEDURE[handle: SC.Handle]; ChansForInsts: PUBLIC PROCEDURE[handle: SC.Handle, insts: SCPrivate.InstanceList] RETURNS [touchesChan: SCPrivate.ChanSet]; CheckInst: PROCEDURE[handle: SC.Handle, inst: SCPrivate.Instance]; CheckInsts: PROCEDURE[handle: SC.Handle]; EnumerateInstances: PROC [handle: SC.Handle, eachInstance: EachInstanceProc] RETURNS [quit: BOOL]; EachInstanceProc: TYPE = PROC [instance: SCPrivate.Instance] RETURNS [quit: BOOL _ FALSE]; EnumeratePinsOnInst: PROC [instance: SCPrivate.Instance, eachPin: EachPinProc] RETURNS [quit: BOOL]; EachPinProc: TYPE = PROC [instance: SCPrivate.Instance, pin: NAT, netPin: SCPrivate.PinNet] RETURNS [quit: BOOL _ FALSE]; DefineInstance: PROCEDURE [handle: SC.Handle, instanceName: Rope.ROPE, object: SCPrivate.Object, coreInstance: CoreClasses.CellInstance, equivName: Rope.ROPE _ NIL] RETURNS [instance: SCPrivate.Instance _ NIL]; NumInstsOnList: PROCEDURE [instsances: SCPrivate.InstanceList] RETURNS [count: SCPrivate.ZMaxInstanceSr]; END. žfile ///StdCell/SCInstUtil.mesa Copyright c 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 find width of component at current orientation find height of component at current orientation find height of bp when considering side it is on this is perpendicular to side find width of bp when considering side it is on this is along to side find min and max offsets of bonding pads on side find offsets of bonding pads on side find position of inst on side FUNCTION assumes that channel and bp positions have been assigned. find the position (side, x, and y) of a component on a pin find the position (side, x, and y) of a power pin find the position of a rotated rectangle wintin a component determine offsets of components in row determine all component offsets assign current positions to horizontal and vertical channels find chans that these comps touch check row and position of a inst check row and position of a inst Κ>˜šœ™Icodešœ Οmœ1™<—J˜Jšœ™JšΟn œ1™=Jšž œ2™?Jšœžœ3™>Jšœžœ2™J˜šΟk ˜ J˜ JšŸœ˜J˜ Jšœ˜J˜—šœ ŸœŸ œ˜J˜JšŸ˜J˜$J˜5—˜Jšœ.™.Jšž œŸ œŸœŸœ ˜IJ˜Jšœ/™/Jšž œŸ œŸœ Ÿœ ˜KJ˜JšœO™OšžœŸ œŸœ Ÿœ ˜IJ˜—Jšœžœ<™FJšžœŸ œŸœŸœ ˜GJ˜Jšœ1™1šžœŸœŸ œ ŸœŸœŸœŸœ ˜nJ˜—Jšœ&™&šž œŸ œ ŸœŸœ,˜\J˜—Jšœ™JšœB™BJš žœŸ œ Ÿœ#Ÿœ Ÿœ ˜YJ˜Jšœ;™;šœŸœŸœ˜Jšœ ŸœŸœ˜(—šžœŸ œ4˜DJšŸœ˜!—J™Jšœ2™2šž œŸ œ ŸœQ˜qJšŸœŸœŸœ˜0J˜—Jšœ;™;šž œŸ œ$Ÿœ˜AJšŸœ Ÿœ˜—J˜Jšœ'™'šž œŸ œ ŸœH˜gJ˜—Jšœ ™ Jšž œŸ œ Ÿœ ˜*Jšœ=™=Jšž œŸ œ Ÿœ ˜*J˜Jšœ"™"šž œŸœŸ œ Ÿœ'˜QJšŸœ"˜)—J˜Jšœ!™!šž œŸ œ Ÿœ#˜BJ˜—Jšœ!™!Jšž œŸ œ Ÿœ ˜)J˜š žœŸœ Ÿœ)ŸœŸœ˜cJ˜Kš žœŸœŸœ ŸœŸœŸœ˜Z—K˜šžœŸœ6ŸœŸœ˜eJ˜Kšž œŸœŸœ%ŸœŸœŸœŸœ˜y—K˜š žœŸ œ ŸœŸœTŸœŸœ˜€KšŸœ!ŸœŸ˜-—J˜JšžœŸ œ&Ÿœ#˜iJšŸœ˜——…— N*