DIRECTORY CD, Core, Process, PWCore, Rope, RTCoreUtil, SC, SCExprGlobalRoute, SCExtras, SCPlaceUtil, SCPrivate, SCUtil; SCExtrasImpl: CEDAR PROGRAM IMPORTS Process, PWCore, Rope, RTCoreUtil, SC, SCExprGlobalRoute, SCExtras, SCPlaceUtil, SCPrivate, SCUtil EXPORTS SC SHARES SC = { debug: BOOLEAN _ FALSE; PosImprove: PUBLIC PROC [handle: SC.Handle, maxCycles: INT] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; SCPrivate.PosImprove[handle, areaFom, maxCycles]; IF debug THEN SCPlaceUtil.WriteCurPlace[handle]; Process.SetPriority[p]}; PosImproveWL: PUBLIC PROC [handle: SC.Handle, maxCycles: INT] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; SCPrivate.PosImprove[handle, wlFom, maxCycles]; IF debug THEN SCPlaceUtil.WriteCurPlace[handle]; Process.SetPriority[p]}; OrientImprove: PUBLIC PROC [handle: SC.Handle, maxCycles: INT] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; SCPrivate.OrientImprove[handle, areaFom, maxCycles]; IF debug THEN SCPlaceUtil.WriteCurPlace[handle]; Process.SetPriority[p]}; OrientImproveWL: PUBLIC PROC [handle: SC.Handle, maxCycles: INT] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; SCPrivate.OrientImprove[handle, wlFom, maxCycles]; IF debug THEN SCPlaceUtil.WriteCurPlace[handle]; Process.SetPriority[p]}; FTImprove: PUBLIC PROC [handle: SC.Handle, maxCycles: INT] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; SCPrivate.FTImprove[handle, wlFom, maxCycles]; IF debug THEN SCPlaceUtil.WriteCurPlace[handle]; Process.SetPriority[p]}; SAInitialPlace: PUBLIC PROC [handle: SC.Handle, widthFactor: REAL, seed: INT] RETURNS [initialResult: SC.SAInitialResult] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; initialResult _ SCPrivate.SAInitialPlace[handle, widthFactor, seed]; Process.SetPriority[p]}; SAGetParms: PUBLIC PROC [handle: SC.Handle, initialResult: SC.SAInitialResult, cellType: Core.CellType] RETURNS [saParms: SC.SAParms] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; saParms _ SCPrivate.SAGetParms[handle, initialResult, cellType]; Process.SetPriority[p]}; SAPlaceImprove: PUBLIC PROC [handle: SC.Handle, saParms: SC.SAParms, widthFactor: REAL, seed: INT] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; SCPrivate.SAPlaceImprove[handle, saParms, widthFactor, seed]; IF debug THEN SCPlaceUtil.WriteCurPlace[handle]; Process.SetPriority[p]}; SAPlaceImproveM: PUBLIC PROC [handle: SC.Handle, saParms: SC.SAParms, widthFactor: REAL, seed: INT] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; SCPrivate.SAPlaceImproveM[handle, saParms, widthFactor, seed]; IF debug THEN SCPlaceUtil.WriteCurPlace[handle]; Process.SetPriority[p]}; PlaceImprove: PUBLIC PROC [handle: SC.Handle, maxCycles: INT] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; SCPrivate.PlaceImprove[handle, maxCycles]; IF debug THEN SCPlaceUtil.WriteCurPlace[handle]; Process.SetPriority[p]}; ExprGlobalRoute: PUBLIC PROC [handle: SC.Handle] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; SCExprGlobalRoute.GlobalRouteAllNets[handle]; Process.SetPriority[p]}; ExprDetailRoute: PUBLIC PROC [handle: SC.Handle] RETURNS [result: SC.Result] = { p: Process.Priority _ Process.GetPriority[]; Process.SetPriority[Process.priorityBackground]; result _ SCExprGlobalRoute.DetailRoute[handle]; Process.SetPriority[p]}; CreateLayout: PUBLIC PROC [technologyKey: ATOM, horizLayer, vertLayer: Rope.ROPE, rowDirection: SC.Direction, numRows: NAT, cellType: Core.CellType, flattenCellType: RTCoreUtil.FlattenCellTypeProc, libName: Rope.ROPE _ NIL, name: Rope.ROPE _ NIL] RETURNS [object: CD.Object] = { widthFactor: REAL _ MAX[1.0, MIN[2.0, RTCoreUtil.GetCoreRealProp[cellType, SC.widthFactorProp, 1.1]]]; designRules: SC.DesignRules _ SC.CreateDesignRules[technologyKey, horizLayer, vertLayer, rowDirection]; handle: SC.Handle _ SC.CreateHandle[cellType, flattenCellType, libName, designRules, name]; SC.InitialPlace[handle, RTCoreUtil.GetCoreIntProp[cellType, SC.numRows, 0]]; SC.SAPlaceImprove[handle, SC.SAGetParms[handle, SC.SAInitialPlace[handle, widthFactor], cellType], widthFactor]; SC.GlobalRoute[handle]; object _ SC.DetailRoute[handle].object; }; StandardCellRouteX: PWCore.LayoutProc = { hMaterial: Rope.ROPE _ "metal"; vMaterial: Rope.ROPE _ "metal2"; rules: SC.DesignRules _ SC.CreateDesignRules[SCExtras.technologyKey, hMaterial, vMaterial, horizontal]; handle: SC.Handle _ SC.CreateHandle[cellType: cellType, flattenCellType: RTCoreUtil.defaultFlatten, libName: SCExtras.libName, designRules: rules]; SCUtil.ReadTWPlace[handle: handle]; SC.InitialPlace[handle, RTCoreUtil.GetCoreIntProp[cellType, SC.numRows, 0]]; SCExprGlobalRoute.GlobalRouteAllNets[handle]; obj _ SC.ExprDetailRoute[handle].object; }; StandardCellLayout: PWCore.LayoutProc = { saParms: SC.SAParms; initialResult: SC.SAInitialResult; hMaterial: Rope.ROPE _ "metal"; vMaterial: Rope.ROPE _ "metal2"; widthFactor: REAL _ MAX[1.0, MIN[2.0, RTCoreUtil.GetCoreRealProp[cellType, SC.widthFactorProp, 1.1]]]; rules: SC.DesignRules _ SC.CreateDesignRules[SCExtras.technologyKey, hMaterial, vMaterial, horizontal]; handle: SC.Handle _ SC.CreateHandle[cellType: cellType, flattenCellType: RTCoreUtil.defaultFlatten, libName: SCExtras.libName, designRules: rules]; SC.InitialPlace[handle, RTCoreUtil.GetCoreIntProp[cellType, SC.numRows, 0]]; initialResult _ SC.SAInitialPlace[handle, widthFactor]; saParms _ SC.SAGetParms[handle, initialResult, cellType]; SC.SAPlaceImprove[handle: handle, saParms: saParms, widthFactor: widthFactor]; SC.GlobalRoute[handle]; obj _ SC.DetailRoute[handle].object; }; StandardCellLayoutTWX: PWCore.LayoutProc = { twMsg: Rope.ROPE; hMaterial: Rope.ROPE _ "metal"; vMaterial: Rope.ROPE _ "metal2"; rules: SC.DesignRules _ SC.CreateDesignRules[SCExtras.technologyKey, hMaterial, vMaterial, horizontal]; handle: SC.Handle _ SC.CreateHandle[cellType: cellType, flattenCellType: RTCoreUtil.defaultFlatten, libName: SCExtras.libName, designRules: rules]; SC.InitialPlace[handle, RTCoreUtil.GetCoreIntProp[cellType, SC.numRows, 0]]; SCUtil.WriteTWFiles[handle: handle]; twMsg _ SCUtil.TWIt[handle.name]; IF twMsg#NIL THEN SC.Error[callingError, Rope.Cat[twMsg, ", Problem on Unix Placement Server. Check file ", handle.name, ".out"]]; SCUtil.ReadTWPlace[handle: handle]; SC.InitialPlace[handle, RTCoreUtil.GetCoreIntProp[cellType, SC.numRows, 0]]; SCExprGlobalRoute.GlobalRouteAllNets[handle]; obj _ SC.ExprDetailRoute[handle].object; }; SCLayoutAtom: ATOM _ PWCore.RegisterLayoutAtom[$SC, StandardCellLayout, SCExtras.StandardCellDecorate, SCExtras.StandardCellAttibutes]; SCRouteXAtom: ATOM _ PWCore.RegisterLayoutAtom[$SCRouteX, StandardCellRouteX, SCExtras.StandardCellDecorate, SCExtras.StandardCellAttibutes]; SCTWXAtom: ATOM _ PWCore.RegisterLayoutAtom[$SCRemoteX, StandardCellLayoutTWX, SCExtras.StandardCellDecorate, SCExtras.StandardCellAttibutes]; }. |SCExtrasImpl.mesa Copyright Σ 1985, 1986, 1987, 1988 by Xerox Corporation. All rights reserved. Bryan Preas, August 14, 1986 5:07:05 pm PDT Last Edited by: Bryan Preas March 26, 1988 6:52:36 pm PST Don Curry November 8, 1987 2:17:05 pm PST Jean-Marc Frailong October 14, 1987 6:12:37 pm PDT Cong, August 25, 1987 8:07:27 pm PDT Christian Le Cocq February 3, 1988 3:31:32 pm PST Standard Cell Optimization and Construction Improve the positions of instances whithin rows. Improve the positions of instances whithin rows using wire lenght as figure of merit. Improve the orientation of instances. Improve the orientation of instances using wire lenght as figure of merit. Improve the positions of instances whithin rows. Initialize for simulated annealing improvement. determine parameters for simulated placement. Improve the placement for the instances (one at a time) by simulated annealing. Improve the placement for the instances (one at a time) by simulated annealing. Improve the placement for the instances by exhaustive search. Determine strategic paths for the wiring that must cross cell rows. Uses minimum Stiener tree global routing Determine actual wiring paths. Works with ExprGlobalRoute Create a standard cell object by performing the above operations PWCore Interface The cellType to layout is a record cellType containing elements from MSI; the layout proc flattens the Core description and calls the standard cell router. Placement is obtained from timberwolf. The cellType to layout is a record cellType containing elements from MSI; the layout proc flattens the Core description and calls the standard cell placer and router. The cellType to layout is a record cellType containing elements from MSI; the layout proc flattens the Core description and calls the TimberWolf standard cell placer and SC router. Uses an experimental version of the Global Router Experimental Layout ATOMS Κm˜šœ™JšœN™NJšœ(Οkœ™,Icodešœ9™9K™)K™2Kšœ!™$Kšœ1™1—J˜š ˜ Jšœ+œ>˜m—J˜šΟb œœœ˜Kšœ$œ=˜jKšœ˜ Kšœœ˜ K˜Kšœœœ˜—head™+J˜š Οn œœœ œœ˜?K™0K˜Kšœ,˜,Kšœ0˜0Kšœ1˜1Kšœœ#˜0šœ˜K˜——š Ÿ œœœ œœ˜AK™UK˜Kšœ,˜,Kšœ0˜0Kšœ/˜/Kšœœ#˜0šœ˜K˜——š Ÿ œœœ œœ˜BK™%K˜Kšœ,˜,Kšœ0˜0Kšœ4˜4Kšœœ#˜0šœ˜K˜——š Ÿœœœ œœ˜DK™JK˜Kšœ,˜,Kšœ0˜0Kšœ2˜2Kšœœ#˜0šœ˜K˜——š Ÿ œœœ œœ˜>K™0K˜Kšœ,˜,Kšœ0˜0Kšœ.˜.Kšœœ#˜0šœ˜K˜——šŸœœœ œœœœœ˜}K™/K˜Kšœ,˜,Kšœ0˜0KšœD˜Dšœ˜K˜——šŸ œœœ œœ+œ œ ˜‰K™-K˜Kšœ,˜,Kšœ0˜0Kšœ@˜@Kšœ˜K˜—šŸœœœ œœœœ˜fK™OK˜Kšœ,˜,Kšœ0˜0Kšœ=˜=Kšœœ#˜0šœ˜K˜——šŸœœœ œœœœ˜gK™OK˜Kšœ,˜,Kšœ0˜0Kšœ>˜>Kšœœ#˜0šœ˜K˜——š Ÿ œœœ œœ˜AK™=K˜Kšœ,˜,Kšœ0˜0Kšœ*˜*Kšœœ#˜0šœ˜K˜——šŸœœœ œ ˜4K™CK™(K˜Kšœ,˜,Kšœ0˜0Kšœ-˜-Kšœ˜—K˜š Ÿœœœ œ œ œ ˜PKšœ™Kšœ™K˜Kšœ,˜,Kšœ0˜0Kšœ/˜/Kšœ˜K˜—šŸ œœœœœœœZœœ œœœ œ ˜–Kšœ@™@K˜Kš œ œœœ+œ˜fK˜Kšœ œœG˜gKšœœ œE˜[Kšœ:œ˜LKšœœœ>˜pKšœ˜Kšœ œ˜'Jšœ˜—K˜—™KšœEœ{™ΓšŸœ˜)Kšœœ ˜Kšœœ ˜ K˜KšœœœM˜gKšœœ œ}˜“Kšœ#˜#Kšœ:œ˜LKšœ-˜-Kšœœ ˜(Kšœ˜K˜—KšœEœ^™¦šŸœ˜)Kšœ œ ˜Kšœœ˜"Kšœœ ˜Kšœœ ˜ Kš œ œœœ+œ˜fK˜KšœœœM˜gKšœœ œ}˜“Kšœ:œ˜LKšœœ%˜7Kšœ œ-˜9KšœL˜NKšœ˜Kšœœ˜$Kšœ˜K˜—KšœEœbœ;™ηšŸœ˜,Kšœ œ˜Kšœœ ˜Kšœœ ˜ K˜KšœœœM˜gKšœœ œ}˜“Kšœ:œ˜LKšœ$˜$Jšœ!˜!Jšœœœœn˜‚Kšœ#˜#Kšœ:œ˜LKšœ-˜-Kšœœ ˜(Kšœ˜K˜—KšŸ œœu˜‡K˜Kšœ™KšŸ œœ{˜KšŸ œœ˜ŽK˜K˜Jšœ˜—J˜J˜J˜J˜—…—Έ+‘