DIRECTORY Rope, Route, SC, SCPrivate, SCRowUtil, TerminalIO; SCSetUpLayoutImpl: CEDAR PROGRAM IMPORTS SCRowUtil EXPORTS SCPrivate SHARES SC = BEGIN SetUpLayout: PUBLIC PROCEDURE[handle: SC.Handle] RETURNS [canContinue: BOOL _ TRUE] = BEGIN GetRopeProp: PROCEDURE[key: Rope.ROPE, default: Rope.ROPE _ NIL] RETURNS [val: Rope.ROPE] = { RETURN[default]}; GetRopeListProp: PROCEDURE[key: Rope.ROPE, default: LIST OF Rope.ROPE _ NIL] RETURNS [val: LIST OF Rope.ROPE] = { RETURN[default]}; GetIntProp: PROCEDURE[key: Rope.ROPE, default: INT _ 0] RETURNS [val: INT] = { RETURN[default]}; GetBoolProp: PROCEDURE[key: Rope.ROPE, default: BOOL _ FALSE] RETURNS [val: BOOL] = { RETURN[default]}; GetFomProp: PROCEDURE[key: Rope.ROPE, default: SCPrivate.FomType] RETURNS [val: SCPrivate.FomType] = { RETURN[default]}; ProcClocks: PROCEDURE [descName: Rope.ROPE, lRSide: SCPrivate.LRSide] RETURNS [acSide: SCPrivate.AcBusSides] = BEGIN clockSignalNames: LIST OF Rope.ROPE _ GetRopeListProp[descName]; acSide _ NEW[SCPrivate.AcBusSidesRec]; FOR nameList: LIST OF Rope.ROPE _ clockSignalNames, nameList.rest WHILE nameList # NIL DO acSide.count _ acSide.count + 1 ENDLOOP; IF acSide.count > 0 THEN { index: NAT _ 0; acSide.sigs _ NEW[SCPrivate.AcBusSigsRec[acSide.count]]; FOR nameList: LIST OF Rope.ROPE _ clockSignalNames, nameList.rest WHILE nameList # NIL DO acSide.sigs[index].name _ nameList.first; acSide.sigs[index].onSide _ lRSide; index _ index + 1; ENDLOOP}; END; ProcPower: PROCEDURE [descName: Rope.ROPE, lRSide: SCPrivate.LRSide] RETURNS [powerSide: SCPrivate.PowerBus] = BEGIN powerSide _ NEW[SCPrivate.PowerBusRec]; powerSide.name _ descName; powerSide.onSide _ lRSide; END; layoutData: SCPrivate.LayoutData _ NARROW[NEW[SCPrivate.LayoutDataRec], SCPrivate.LayoutData]; layoutParms: SCPrivate.LayoutParms _ NEW[SCPrivate.LayoutParmsRec]; sideRules: Route.DesignRules _ handle.rules.sideRules; rowRules: Route.DesignRules _ handle.rules.rowRules; bottomRow: SCPrivate.BpRow _ NEW[SCPrivate.BpRowRec]; rightRow: SCPrivate.BpRow _ NEW[SCPrivate.BpRowRec]; topRow: SCPrivate.BpRow _ NEW[SCPrivate.BpRowRec]; leftRow: SCPrivate.BpRow _ NEW[SCPrivate.BpRowRec]; layoutData.bpRows _ NEW[SCPrivate.BpRowsRec]; layoutData.lgRows _ NEW[SCPrivate.LgRowsRec]; layoutData.sideChans[left] _ NEW[SCPrivate.SideChanRec]; layoutData.sideChans[right] _ NEW[SCPrivate.SideChanRec]; layoutData.rowChans _ NEW[SCPrivate.RowChansRec]; layoutData.layoutParms _ layoutParms; handle.layoutData _ layoutData; layoutParms.whichFom _ GetFomProp["FomType", wlFom]; layoutParms.useMaxRouteExits _ GetBoolProp["UseMaxRouteExits", TRUE]; layoutParms.useInteriorChanExits _ GetBoolProp["UseInteriorChanExits", TRUE]; layoutParms.numRows _ GetIntProp["NumRows", 0]; layoutParms.rowDirection _ handle.rules.rowRules.trunkDirection; layoutData.powerBuses[left] _ ProcPower[GetRopeProp["LeftPowerName", "Vdd"], left]; layoutData.powerBuses[right] _ ProcPower[GetRopeProp["RightPowerName", "Gnd"], right]; layoutData.acBuses[left] _ ProcClocks["LeftClocks", left]; layoutData.acBuses[right] _ ProcClocks["RightClocks", right]; FOR chan: SCPrivate.MaxChanSr IN SCPrivate.MaxChanSr DO channel: SCPrivate.RowChan _ NEW[SCPrivate.RowChanRec]; channel.exits _ NEW[SCPrivate.ExitArrayOb _ ALL []]; channel.chanNum _ chan; layoutData.rowChans.chans[chan] _ channel; IF SCRowUtil.FindRouteType[chan] = minRoute THEN {channel.initChanWidth _ rowRules.trunkToTrunk*15; channel.routeType _ minRoute} ELSE {channel.initChanWidth _ rowRules.trunkToTrunk*30; channel.routeType _ maxRoute} ENDLOOP; FOR side: SCPrivate.LRSide IN SCPrivate.LRSide DO channel: SCPrivate.SideChan _ NEW[SCPrivate.SideChanRec]; channel.side _ side; layoutData.sideChans[side] _ channel; channel.initSideChanWidth _ sideRules.trunkToTrunk*10; ENDLOOP; FOR row: NAT IN SCPrivate.MaxRowSr DO layoutData.lgRows.rows[row] _ NEW[SCPrivate.LgRowRec]; layoutData.lgRows.rows[row].rowNum _ row; ENDLOOP; layoutData.bpRows[bottom] _ bottomRow; bottomRow.bpSpacing _ GetIntProp["BottomBPSpacing", rowRules.branchToBranch]; bottomRow.initMaxBpsOnSide _ GetIntProp["BottomMaxBPs", 0]; bottomRow.routeSideChans _ GetBoolProp["BottomChanRoute", FALSE]; layoutData.bpRows[right] _ rightRow; rightRow.bpSpacing _ GetIntProp["RightBPSpacing", sideRules.trunkToTrunk]; rightRow.initMaxBpsOnSide _ GetIntProp["RightMaxBPs", 0]; rightRow.routeSideChans _ GetBoolProp["RightChanRoute", FALSE]; layoutData.bpRows[top] _ topRow; topRow.bpSpacing _ GetIntProp["TopBPSpacing", rowRules.branchToBranch]; topRow.initMaxBpsOnSide _ GetIntProp["TopMaxBPs", 0]; topRow.routeSideChans _ GetBoolProp["TopChanRoute", FALSE]; layoutData.bpRows[left] _ leftRow; leftRow.bpSpacing _ GetIntProp["LeftBPSpacing", sideRules.trunkToTrunk]; leftRow.initMaxBpsOnSide _ GetIntProp["LeftMaxBPs", 0]; leftRow.routeSideChans _ GetBoolProp["LeftChanRoute", FALSE]; RETURN[canContinue]; END; END. ςfile: ///stdcell/SCSetUpLayoutImpl.mesa -- Copyright (C) 1984, 1985 by Xerox Corporation. All rights reserved. last modified by Preas, September 4, 1985 5:57:58 pm PDT Frank Bowers February 6, 1986 9:55:23 am PST the high level Sloop initialization: get signals to route without feedthrus get Power signals get fom type get whether to use only maxRoute channels for exits get number of rows -- do the power buses -- do the ac buses initialize the channel widths side data io and row data Κ³˜Jšœ'™'JšΟcœ,™Gšœ8™8Icode™,—J˜Jšœ$™$J˜šΟk ˜ Jšœ˜J˜Jšžœ˜J˜ Jšœ ˜ Jšœ ˜ J˜—šœžœž˜ Jšžœ ˜Jšžœ ˜Jšžœžœ˜ J˜Jšž˜J˜šΟn œžœž œ žœ žœžœžœ˜VJšž˜J˜š Ÿ œž œ žœžœžœ˜@Jšžœ žœ˜Jšžœ ˜J˜—šŸœž œ žœ žœžœžœžœ˜LJšžœžœžœžœ˜$Jšžœ ˜J˜—š Ÿ œž œ žœ žœžœžœ˜NJšžœ ˜J˜—š Ÿ œž œ žœ žœžœ˜=Jšžœžœ˜Jšžœ ˜J˜—šŸ œž œ žœ˜AJšžœ˜$Jšžœ ˜—J˜Jšœ&™&šŸ œž œžœ˜EJšžœ!˜(J˜Jšž˜Jšœžœžœžœ˜@Jšœ žœ˜&š žœ žœžœžœ#žœ žœž˜YJ˜Jšžœ˜J˜—šžœžœ˜Jšœžœ˜Jšœžœ'˜8š žœ žœžœžœ#žœ žœž˜YJšœ)˜)Jšœ#˜#J˜Jšžœ˜ ——Jšžœ˜J˜—Jšœ™šŸ œž œžœ˜DJšžœ"˜)J˜Jšž˜Jšœ žœ˜'Jšœ˜Jšœ˜Jšžœ˜J˜—Jšœ#žœžœ1˜^KšœC˜CKšœ6˜6Kšœ4˜4Jšœžœ˜5Jšœžœ˜4Jšœžœ˜2Jšœžœ˜3J˜Jšœ-˜-Jšœ-˜-Jšœ8˜8Jšœ9˜9Jšœ1˜1Jšœ%˜%Jšœ˜J˜Jšœ ™ Jšœ4˜4J˜Jšœ3™3Jšœ?žœ˜EJšœGžœ˜MJ˜Jšœ™Jšœ/˜/Jšœ@˜@J˜J™JšœS˜SJšœV˜VJ™J™Jšœ:˜:Jšœ=˜=J˜Jšœ™šžœžœžœ˜8Jšœžœ˜7Jšœžœžœ˜5Jšœ˜Jšœ*˜*šžœ*ž˜0Jšœ2˜2Jšœ˜—šž˜Jšœ2˜2Jšœ˜—Jšžœ˜—J˜J˜Jšœ ™ šžœžœžœ˜2Jšœžœ˜9Jšœ˜Jšœ%˜%Jšœ6˜6Jšžœ˜—J˜Jšœ™šžœžœžœžœ˜&Jšœžœ˜6Jšœ)˜)Jšžœ˜—J˜Jšœ&˜&JšœM˜MJšœ;˜;Jšœ:žœ˜AJ˜Jšœ$˜$JšœJ˜JJšœ9˜9Jšœ8žœ˜?J˜Jšœ ˜ JšœG˜GJšœ5˜5Jšœ4žœ˜;J˜Jšœ"˜"JšœH˜HJšœ7˜7Jšœ6žœ˜=J˜Jšžœ˜Jšžœ˜—Jšžœ˜—J˜J˜—…—2Χ