IFUTestPLADo: Commander.CommandProc = {
pla: CellType;
cell: CellType;
args: LIST OF ROPE ← CommandTool.ParseToList[cmd].list;
public: Wire ← CoreOps.CreateWires[pubSize];
public[GND] ← CoreCreate.Seq["GND", 0];
public[VDD] ← CoreCreate.Seq["VDD", 0];
public[PhA] ← CoreCreate.Seq["PhA", 0];
public[PhB] ← CoreCreate.Seq["PhB", 0];
public[PhB1] ← CoreCreate.Seq["PhB1", 0];
public[NotPhA] ← CoreCreate.Seq["NotPhA", 0];
public[NotPhB] ← CoreCreate.Seq["NotPhB", 0];
public[in] ← CoreCreate.Seq["StateBA", size];
public[out] ← CoreCreate.Seq["NextBA", size];
public[DShA] ← CoreCreate.Seq["DShA", 0];
public[DShB] ← CoreCreate.Seq["DShB", 0];
public[DShWt] ← CoreCreate.Seq["DShWt", 0];
public[DShRd] ← CoreCreate.Seq["DShRd", 0];
public[DShIn] ← CoreCreate.Seq["ShiftIn", 0];
public[DShOut] ← CoreCreate.Seq["drShOutNotNextB.3", 0];
plaType ←
IF args=
NIL
OR args.first.Fetch[]='h
OR args.first.Fetch[]='H
THEN hot
ELSE precharged;
pla ← MakeTestPLA[plaType];
FOR bit:
INT
IN [0..size)
DO
[]𡤌oreOps.SetShortWireName[public[in][bit], IO.PutFR["StateBA.%g", IO.int[bit]]];
[]𡤌oreOps.SetShortWireName[public[out][bit], IO.PutFR["NextBA.%g", IO.int[bit]]];
ENDLOOP;
cell ← RestructuredCell[public, pla];
[] ← Rosemary.SetFixedWire[ public[GND], L];
[] ← Rosemary.SetFixedWire[ public[VDD], H];
[] ← Ports.InitPort[wire: public[PhA], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[PhB], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[PhB1], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[NotPhA], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[NotPhB], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[in], levelType: c, initDrive: none];
[] ← Ports.InitPort[wire: public[out], levelType: c, initDrive: drive];
[] ← Ports.InitPort[wire: public[DShA], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[DShB], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[DShWt], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[DShRd], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[DShIn], levelType: b, initDrive: none];
[] ← Ports.InitPort[wire: public[DShOut], levelType: b, initDrive: drive];
[] ← Ports.InitTesterDrive[wire: public[PhA], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[PhB], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[PhB1], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[NotPhA], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[NotPhB], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[in], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[out], initDrive: expect];
[] ← Ports.InitTesterDrive[wire: public[DShA], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[DShB], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[DShWt], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[DShRd], initDrive: force];
[] ← Ports.InitTesterDrive[wire: public[DShIn], initDrive: driveStrong];
[] ← Ports.InitTesterDrive[wire: public[DShOut], initDrive: expect];
RosemaryUser.RegisterTestProc[testNames[plaType], IFUTestPLATestProc];
tester ← RosemaryUser.TestProcedureViewer[
cellType: cell,
testButtons: LIST[testNames[plaType]],
name: testNames[plaType],
displayWires: RosemaryUser.DisplayPortLeafWires[cell] ];
};
cutSet: CoreFlat.CreateCutSet[labels: LIST["SimplePLA"]]]};
cutSet: CoreFlat.CreateCutSet[labels: LIST["SimplePLA", "UpOneLevel"]]]};