PWRouteTestB:
CEDAR
PROGRAM
IMPORTS CD, CDBasics, CDCells, PW, PWRoute, Rope, RTBasic =
IRSize:
PROC [obj:
CD.Object]
RETURNS [size:
CD.Position] =
{size ← CDBasics.SizeOfRect[CD.InterestRect[obj]]};
TestIFUA:
PW.UserProc =
BEGIN
routerParams: PWRoute.RouterParams ← NEW[PWRoute.RouterParamsRec ← ["metal", "metal2", design.technology.key]];
left: CD.Object ← PW.Get[design, "IFUALeft"];
right: CD.Object ← PW.Get[design, "IFUARight"];
top: CD.Object ← NIL;
bottom: CD.Object ← PW.Get[design, "IFUABottom"];
test: CD.Object ← PWRoute.MakeChannel[bottom, top, left, right, NIL -- rect --, routerParams, FALSE, channel];
test: CD.Object ← PWRoute.AbutChRouteListY[LIST[bottom, top], LIST[left], LIST[right], routerParams];
RETURN[test];
END;
EUWireWidth: PWRoute.WireWidthProc ~ {
IF Rope.Equal[netName, "Vdd"] OR Rope.Equal[netName, "Gnd"] THEN wireWidth ← 736
ELSE wireWidth ← 32};
TestEURightChannel:
PW.UserProc =
BEGIN
use design RightChannel.dale
routerParams: PWRoute.RouterParams ← NEW[PWRoute.RouterParamsRec ← [trunkLayer: "metal2", branchLayer: "metal", technologyKey: design.technology.key, wireWidthProc: EUWireWidth]];
left: CD.Object ← PW.Get[design, "EUALeft"];
right: CD.Object ← PW.Get[design, "EUARight"];
top: CD.Object ← PW.Get[design, "EUATop"];
bottom: CD.Object ← PW.Get[design, "EUABottom"];
test: CD.Object ← PWRoute.AbutChRouteListX[LIST[left, right], LIST[bottom], LIST[top], routerParams];
RETURN[test];
END;
TestEUControl:
PW.UserProc =
BEGIN
use design EUControl.dale
routerParams: PWRoute.RouterParams ← NEW[PWRoute.RouterParamsRec ← [trunkLayer: "metal", branchLayer: "metal2", technologyKey: design.technology.key]];
left: CD.Object ← PW.Get[design, "EULeft"];
right: CD.Object ← PW.Get[design, "EURight"];
top: CD.Object ← PW.Get[design, "EUTop"];
bottom: CD.Object ← PW.Get[design, "EUBottom"];
test: CD.Object ← PWRoute.AbutChRouteListY[LIST[bottom, top], LIST[left], LIST[right], routerParams];
RETURN[test];
END;
TestSb2SidesB:
PW.UserProc =
BEGIN
routerParams: PWRoute.RouterParams ← NEW[PWRoute.RouterParamsRec ← [trunkLayer: "metal", branchLayer: "metal2", signalSinglePinNets: TRUE]];
vertical: CD.Object ← PW.Get[design, "Vertical"];
horizontal: CD.Object ← PW.Get[design, "Horizontal"];
sb: CD.Object ← PWRoute.AbutSbRoute[NIL, vertical, horizontal, NIL, horizontal, routerParams];
row: CD.Object ← PW.AbutListX[LIST[sb, vertical]];
test: CD.Object ← CDCells.CreateEmptyCell[];
dy: INT ← IRSize[row].y;
[] ← CDCells.IncludeOb[cell: test, ob: horizontal, trans: [[0, dy], original]];
[] ← CDCells.IncludeOb[cell: test, ob: row, trans: [[0 , 0], original]];
RTBasic.RepositionCell[test];
RETURN[test];
END;
TestIFULeftColumn:
PW.UserProc =
BEGIN
use design IFULeftColumn.dale
routerParams: PWRoute.RouterParams ← NEW[PWRoute.RouterParamsRec ← [trunkLayer: "metal2", branchLayer: "metal", technologyKey: design.technology.key, opt: noIncompletes]];
left: CD.Object ← PW.Get[design, "IFULtColumnLeft"];
right: CD.Object ← PW.Get[design, "IFULtColumnRight"];
bottom: CD.Object ← PW.Get[design, "IFULtColumnBottom"];
test: CD.Object ← PWRoute.AbutChRouteListX[LIST[left, right], LIST[bottom], NIL, routerParams];
RETURN[test];
END;
PW.Register[TestIFULeftColumn, "TestIFULeftColumn"];
PW.Register[TestEURightChannel, "TestEURightChannel"];
PW.Register[TestEUControl, "TestEUControl"];
PW.Register[TestIFUA, "TestIFUControl"];
PW.Register[TestSb2SidesB, "TestSb2SidesB"];
END.