<> <> <> <> <<@CabbageTest.cm>> DIRECTORY Cabbage, CD, Connections, PW, PWPins, Rope; CabbageTest: CEDAR PROGRAM IMPORTS Cabbage, Connections, PW, PWPins = BEGIN TestBasicCabbage: PW.UserProc = BEGIN routerParams: Cabbage.PadRingParams _ NEW[Cabbage.PadRingParamsRec _ ["metal2", "metal", design.technology.key]]; left: Cabbage.Object _ PW.Get[design, "BasicLeft"]; right: Cabbage.Object _ PW.Get[design, "BasicRight"]; top: Cabbage.Object _ PW.Get[design, "BasicTop"]; bottom: Cabbage.Object _ PW.Get[design, "BasicBottom"]; inner: Cabbage.Object _ PW.Get[design, "BasicInner"]; innerPos: CD.Position _ Cabbage.Center[inner, NIL, bottom, NIL, right, NIL, top, NIL, left, routerParams]; connections: Connections.Table _ GetConnections[inner, bottom, right, top, left]; test: Cabbage.Object _ Cabbage.PadRoute[inner, NIL, bottom, NIL, right, NIL, top, NIL, left, innerPos, connections, routerParams]; RETURN[test]; END; TestPadLimited: PW.UserProc = BEGIN routerParams: Cabbage.PadRingParams _ NEW[Cabbage.PadRingParamsRec _ ["metal2", "metal", design.technology.key]]; left: Cabbage.Object _ PW.Get[design, "PinLimitedLeft"]; right: Cabbage.Object _ PW.Get[design, "PinLimitedRight"]; top: Cabbage.Object _ PW.Get[design, "PinLimitedTop"]; bottom: Cabbage.Object _ PW.Get[design, "PinLimitedBottom"]; inner: Cabbage.Object _ PW.Get[design, "PinLimitedInner"]; innerPos: CD.Position _ Cabbage.Center[inner, NIL, bottom, NIL, right, NIL, top, NIL, left, routerParams]; connections: Connections.Table _ GetConnections[inner, bottom, right, top, left]; test: Cabbage.Object _ Cabbage.PadLimitedRoute[inner, NIL, bottom, NIL, right, NIL, top, NIL, left, innerPos, connections, routerParams]; RETURN[test]; END; TestFSM: PW.UserProc = BEGIN routerParams: Cabbage.PadRingParams _ NEW[Cabbage.PadRingParamsRec _ ["metal", "metal2", design.technology.key]]; left: Cabbage.Object _ PW.Get[design, "FSMLeft"]; right: Cabbage.Object _ PW.Get[design, "FSMRight"]; top: Cabbage.Object _ PW.Get[design, "FSMTop"]; bottom: Cabbage.Object _ PW.Get[design, "FSMBottom"]; inner: Cabbage.Object _ PW.Get[design, "FSMTest"]; innerPos: CD.Position _ Cabbage.Center[inner, NIL, bottom, NIL, right, NIL, top, NIL, left, routerParams]; connections: Connections.Table _ GetConnections[inner, bottom, right, top, left]; test: Cabbage.Object _ Cabbage.PadRoute[inner, NIL, bottom, NIL, right, NIL, top, NIL, left, innerPos, connections, routerParams]; RETURN[test]; END; GetConnections: PROC [inner, bottom, right, top, left: Cabbage.Object] RETURNS [connections: Connections.Table] ~ { UseAll: Connections.PinFilterProc ~ {keepIt _ TRUE}; UseTop: Connections.PinFilterProc ~ {keepIt _ PWPins.GetSide[obj, inst].side=top}; UseLeft: Connections.PinFilterProc ~ {keepIt _ PWPins.GetSide[obj, inst].side=left}; UseBottom: Connections.PinFilterProc ~ {keepIt _ PWPins.GetSide[obj, inst].side=bottom}; UseRight: Connections.PinFilterProc ~ {keepIt _ PWPins.GetSide[obj, inst].side=right}; connections _ Connections.CreateForRopes[]; Connections.InsertPins[connections, inner, UseAll]; Connections.InsertPins[connections, bottom, UseTop]; Connections.InsertPins[connections, right, UseLeft]; Connections.InsertPins[connections, top, UseBottom]; Connections.InsertPins[connections, left, UseRight]; }; PW.Register[TestFSM, "TestFSM"]; PW.Register[TestBasicCabbage, "TestBasicCabbage"]; PW.Register[TestPadLimited, "TestPadLimited"]; END.