DIRECTORY CD, Core, CoreCreate, CoreFlat, CoreOps, Logic, Ports, PW, Rosemary, RosemaryUser, Random, Sisyph; ArbPESimImpl: CEDAR PROGRAM IMPORTS CoreCreate, CoreFlat, CoreOps, Logic, Ports, PW, Rosemary, RosemaryUser, Random, Sisyph = BEGIN nInputs: INT = 8; nBits: INT = 3; range: INT = 8; rs: Random.RandomStream _ Random.Create[]; peType: Core.CellType _ NIL; tester: RosemaryUser.Tester _ NIL; ExtractCellType: PROC = { In: INT; -- ports nIn: INT; nMin: INT; design: CD.Design _ PW.OpenDesign["Arbiter24"]; cx: Sisyph.Context _ Sisyph.Create[design]; peType _ Sisyph.ExtractSchematicByName[name: "PE-8-3.icon", cx: cx]; In _ CoreOps.GetWireIndex[peType.public, "In"]; nIn _ CoreOps.GetWireIndex[peType.public, "nIn"]; nMin _ CoreOps.GetWireIndex[peType.public, "nMin"]; [] _ Rosemary.SetFixedWire[CoreCreate.FindWire[peType.public, "Vdd"], H]; [] _ Rosemary.SetFixedWire[CoreCreate.FindWire[peType.public, "Gnd"], L]; FOR i: INT IN [0..nInputs) DO [] _ Ports.InitPort[wire: peType.public[In][i], levelType: c]; [] _ Ports.InitTesterDrive[wire: peType.public[In][i], initDrive: force]; [] _ Ports.InitPort[wire: peType.public[nIn][i], levelType: c]; [] _ Ports.InitTesterDrive[wire: peType.public[nIn][i], initDrive: force]; ENDLOOP; [] _ Ports.InitPort[wire: peType.public[nMin], levelType: c, initDrive: force]; [] _ Ports.InitTesterDrive[wire: peType.public[nMin], initDrive: expect]; tester _ RosemaryUser.TestProcedureViewer[cellType: peType, testButtons: LIST["PERandomTest"], name: "Priority Encoder Test", -- displayWires: RosemaryUser.DisplayPortLeafWires[peType], -- cutSet: CoreFlat.CreateCutSet[labels: LIST[Logic.logicCutSet, Logic.macroCutSet]]]; }; iterations: INT _ 0; PERandomTestProc: RosemaryUser.TestProc = { In: INT = CoreOps.GetWireIndex[cellType.public, "In"]; -- ports nIn: INT = CoreOps.GetWireIndex[cellType.public, "nIn"]; nMin: INT = CoreOps.GetWireIndex[cellType.public, "nMin"]; iterations _ 0; DO min: NAT = rs.ChooseInt[0, range-1]; where: NAT = rs.ChooseInt[0, nInputs-1]; inputs: ARRAY [0..nInputs) OF INT; iterations _ iterations+1; FOR i: INT IN [0..nInputs) DO inputs[i] _ (IF i = where THEN min ELSE rs.ChooseInt[min, range-1]); p[In][i].c _ inputs[i]; p[nIn][i].c _ range-1-inputs[i]; ENDLOOP; p[nMin].c _ range-1-min; Eval[]; ENDLOOP; }; RosemaryUser.RegisterTestProc["PERandomTest", PERandomTestProc]; END. JArbPESimImpl.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. E. McCreight, March 11, 1987 11:25:07 am PST Last Edited by: McCreight October 19, 1987 3:06:30 pm PDT ioPort: Ports.Port; ioPort _ Ports.CreatePort[peType.public]; simulation _ Rosemary.InstantiateCellType[cellType: peType, testPort: ioPort]; Κ΄˜šœ™Icodešœ Οmœ1™˜>KšœI˜IKšœ?˜?KšœJ˜JKšžœ˜—KšœO˜OKšœI˜IK˜Kšœ)™)KšœN™NKšœIžœ1 >œ'žœ)˜Kšœ˜K˜—K˜Kšœ žœ˜K˜šŸœ˜+K˜KšŸœžœ0 ˜?Kšœžœ0˜8Kšœžœ2˜;Kšœ˜šž˜Kšœžœ˜$Kšœžœ˜(Kšœžœžœžœ˜"Kšœ˜šžœžœžœž˜Kšœ žœ žœžœ˜DKšœ˜Kšœ ˜ Kšžœ˜—Kšœ˜Kšœ˜Kšžœ˜—K˜K˜—Kšœ@˜@Kšžœ˜—J˜—…— @ >