<> <> <> <> DIRECTORY Core, CoreOps, Ports, PW, Rosemary, RosemaryUser, Sisyph; TGXOrTest: CEDAR PROGRAM IMPORTS CoreOps, Ports, PW, Rosemary, RosemaryUser, Sisyph = BEGIN MyTestProc: RosemaryUser.TestProc = { <> CycleXOrGate: PROC = { Step: TYPE = [0..4); ALevel: ARRAY Step OF Ports.Level _ [H, H, L, L]; BLevel: ARRAY Step OF Ports.Level _ [H, L, H, L]; OLevel: ARRAY Step OF Ports.Level _ [L, H, H, L]; FOR step: Step IN Step DO p[A].l _ ALevel[step]; p[B].l _ BLevel[step]; p[XOrAB].l _ OLevel[step]; Eval[]; ENDLOOP; }; p[A].l _ p[B].l _ p[XOrAB].l _ L; Eval[! Rosemary.Stop => RESUME]; CycleXOrGate[]; }; ct: Core.CellType _ Sisyph.ExtractSchematicByName["TGXOr.sch", Sisyph.Create[PW.OpenDesign["///Users/gunther.pa/chips/PrismCells"], Sisyph.defaultGlobalNames]]; Vdd: NAT = CoreOps.GetWireIndex[ct.public, "Vdd"]; Gnd: NAT = CoreOps.GetWireIndex[ct.public, "Gnd"]; A: NAT = CoreOps.GetWireIndex[ct.public, "A"]; B: NAT = CoreOps.GetWireIndex[ct.public, "B"]; XOrAB: NAT = CoreOps.GetWireIndex[ct.public, "XOrAB"]; [] _ Rosemary.SetFixedWire[ct.public[Vdd], H]; [] _ Rosemary.SetFixedWire[ct.public[Gnd], L]; FOR i: NAT IN [0..ct.public.size) DO [] _ Ports.InitPort[wire: ct.public[i], initType: l]; ENDLOOP; [] _ Ports.InitTesterDrive[wire: ct.public[A], initDrive: force]; [] _ Ports.InitTesterDrive[wire: ct.public[B], initDrive: driveStrong]; [] _ Ports.InitTesterDrive[wire: ct.public[XOrAB], initDrive: expect]; RosemaryUser.MakeStandardViewer[name: "TGXOr Tester", cellType: ct, testButtons: LIST[["MyTest", MyTestProc]], displayWires: RosemaryUser.DisplayPortLeafWires[wire: ct.public], flatten: TRUE]; END.