TestLP.mesa
Copyright © 1986 by Xerox Corporation. All rights reserved.
Last Edited by: Krivacic April 10, 1987 1:05:00 pm PST
Last Edited by: Alan Bell September 25, 1987 2:55:13 pm PDT
DIRECTORY
Basics, BitOps, CD, CDCommandOps, CDProperties, CDSequencer, CDIO, Core, CoreFlat, CDViewer, Ports, Rosemary, RosemaryUser, Sisyph, TamPorts, TamDefs;
TestLP: CEDAR PROGRAM
IMPORTS CDCommandOps, CoreFlat, CDProperties, Ports, Rosemary, RosemaryUser, Sisyph, TamPorts
~ BEGIN OPEN TamDefs;
load, nByteSel, selIBufData, shiftSel, selCur, selNext, selWrite, nWtIBuf, clock, xBus, opCode, ibufN, d1, d2, r, euControl, nEuControl, muxBus, euCC: NATLAST[NAT];
Vdd, Gnd: NAT;
cellType: Core.CellType ← NIL;
tester: RosemaryUser.Tester;
design: CD.Design ← NIL;
-- EU Unit ---------------------------------------------
EUSimpleTest: RosemaryUser.TestProc = {
--PROC [cellType: Core.CellType, p: Ports.Port, Eval: PROC]--
EUInitPortIndicies[cellType];
TamPorts.SetP[p, d1, 1];
TamPorts.SetP[p, d2, 2];
TamPorts.SetP[p, euControl, 27H];
TamPorts.SetP[p, nEuControl, 58H];
TamPorts.CheckP[p, r, 3];
TamPorts.SetP[p, muxBus, 0];
Eval[];
TamPorts.SetP[p, d1, 3];
TamPorts.SetP[p, d2, 2];
TamPorts.SetP[p, euControl, 21H];
TamPorts.SetP[p, nEuControl, 5EH];
TamPorts.CheckP[p, r, 2];
Eval[];
-- Add
TamPorts.SetP[p, d1, 3];
TamPorts.SetP[p, d2, 2];
TamPorts.SetP[p, euControl, 10H];
TamPorts.SetP[p, nEuControl, 6FH];
TamPorts.CheckP[p, r, 5];
Eval[];
TamPorts.SetP[p, d1, 3];
TamPorts.SetP[p, d2, 2];
TamPorts.SetP[p, euControl, 11H];
TamPorts.SetP[p, nEuControl, 6EH];
TamPorts.CheckP[p, r, 6];
Eval[];
-- Shift
TamPorts.SetP[p, d1, 3];
TamPorts.SetP[p, d2, 4];
TamPorts.SetP[p, euControl, 30H];
TamPorts.SetP[p, nEuControl, 0FH];
TamPorts.SetP[p, muxBus, 2];
TamPorts.CheckP[p, r, 0C0000001H];
Eval[];
-- Priority
TamPorts.SetP[p, d1, 8FFFFFFH];
TamPorts.SetP[p, d2, 4];
TamPorts.SetP[p, euControl, 40H];
TamPorts.SetP[p, nEuControl, 3FH];
TamPorts.SetP[p, muxBus, 2];
TamPorts.CheckP[p, r, 00000001BH];
Eval[];
};
EUCDExtract: PROC [comm: CDSequencer.Command] = {
--Extract Logical Unit
design ← comm.design;
cellType ← Sisyph.ExtractSchematicByName["ExecutionUnits.icon", Sisyph.Create[design]];
EUInitPortIndicies[cellType];
[] ← Ports.InitPorts[cellType, ls, force, "D1", "D2", "MuxBus", "EUControl", "nEUControl"];
[] ← Ports.InitPorts[cellType, ls, none, "R", "euCC"];
Ports.ITDList[cellType.public, LIST[d1, d2, euControl, nEuControl, muxBus], force];
Ports.ITDList[cellType.public, LIST[r, euCC], none];
[] ← Rosemary.SetFixedWire[cellType.public[Vdd], H];
[] ← Rosemary.SetFixedWire[cellType.public[Gnd], L];
tester ←
RosemaryUser.TestProcedureViewer[
cellType: cellType,
testButtons: LIST["EuSimpleTest"],
name: "Execution Unit Tester",
displayWires: RosemaryUser.DisplayPortLeafWires[cellType],
cutSet: CoreFlat.CreateCutSet[
labels: LIST["Logic", "LogicMacro"],
cellTypes: LIST["LU", "Adder", "Shifter", "Priority", "ExecutionUnits"]
]
];
CDProperties.PutDesignProp[design, $DAUserRoseDisplay, tester.display];
};
EUInitPortIndicies: PROC [ct: Core.CellType] ~ {
[d1, d2, r, euControl, nEuControl, muxBus, euCC] ← Ports.PortIndexes[ct.public, "D1", "D2", "R", "EUControl", "nEUControl", "MuxBus", "euCC"];
Vdd ← Ports.PortIndex[ct.public, "Vdd"];
Gnd ← Ports.PortIndex[ct.public, "Gnd"];
};
-- Instruction Buffer Tester ----------------------------------------------------
InstDPSimpleTest: RosemaryUser.TestProc = {
--PROC [cellType: Core.CellType, p: Ports.Port, Eval: PROC]--
InstDPInitPortIndicies[cellType];
TamPorts.SetP[p, nByteSel, 070H];
TamPorts.SetP[p, load, 1];
TamPorts.SetP[p, selIBufData, 2];
TamPorts.SetP[p, shiftSel, 4];
TamPorts.SetP[p, selCur, 8];
TamPorts.SetP[p, selNext, 4 ];
TamPorts.SetP[p, nWtIBuf, 0];
TamPorts.SetP[p, xBus, 03020100H];
TamPorts.SetP[p, selWrite, 8];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, xBus, 07060504H];
TamPorts.SetP[p, selWrite, 4];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, xBus, 0B0A0908H];
TamPorts.SetP[p, selWrite, 2];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, xBus, 0F0E0D0CH];
TamPorts.SetP[p, selWrite, 1];
TamPorts.GoClock[p, clock, Eval];
    -- Fill buffer
TamPorts.SetP[p, xBus, 0];
TamPorts.SetP[p, selWrite, 80H];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, selWrite, 40H];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, selWrite, 20H];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, selWrite, 10H];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, selWrite, 00H];
TamPorts.GoClock[p, clock, Eval];
    -- Sit a Cycle
TamPorts.SetP[p, selWrite, 0];
TamPorts.SetP[p, nWtIBuf, 1];
TamPorts.SetP[p, shiftSel, 0];
TamPorts.SetP[p, selIBufData, 1];
TamPorts.SetP[p, nByteSel, 000H];
TamPorts.GoClock[p, clock, Eval];
    -- 1st Read & Compare
TamPorts.SetP[p, selCur, 8];
TamPorts.SetP[p, selNext, 4 ];
TamPorts.SetP[p, shiftSel, 8];
TamPorts.CheckP[p, opCode, 0];
TamPorts.CheckP[p, d1, 04030201H];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, shiftSel, 4];
TamPorts.CheckP[p, opCode, 1];
TamPorts.CheckP[p, d1, 05040302H];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, shiftSel, 2];
TamPorts.CheckP[p, opCode, 2];
TamPorts.CheckP[p, d1, 06050403H];
TamPorts.GoClock[p, clock, Eval];
TamPorts.SetP[p, shiftSel, 1];
TamPorts.CheckP[p, opCode, 3];
TamPorts.CheckP[p, d1, 07060504H];
TamPorts.GoClock[p, clock, Eval];
TamPorts.GoClock[p, clock, Eval];
TamPorts.GoClock[p, clock, Eval];
};
InstDPCDExtract: PROC [comm: CDSequencer.Command] = {
--Extract Logical Unit
design ← comm.design;
cellType ← Sisyph.ExtractSchematicByName["InstDP.icon", Sisyph.Create[design]];
InstDPInitPortIndicies[cellType];
[] ← Ports.InitPorts[cellType, l, none, "Vdd", "Gnd"];
[] ← Ports.InitPorts[cellType, ls, force, "R", "load", "nByteSel", "SelIBufData", "ShiftSel", "SelCur", "SelNext", "SelWrite", "nWtIBuf", "CK", "XBus"];
[] ← Ports.InitPorts[cellType, ls, none, "D1", "IbufN", "OpCode"];
Ports.ITDList[cellType.public, LIST[r, load, nByteSel, selIBufData, shiftSel, selCur, selNext, selWrite, nWtIBuf, clock, xBus], force];
Ports.ITDList[cellType.public, LIST[d1, opCode, ibufN], none];
[] ← Rosemary.SetFixedWire[cellType.public[Vdd], H];
[] ← Rosemary.SetFixedWire[cellType.public[Gnd], L];
tester ←
RosemaryUser.TestProcedureViewer[
cellType: cellType,
testButtons: LIST["InstDPSimpleTest/Cut"],
name: "Instruction Unit Tester /Cut",
displayWires: RosemaryUser.DisplayPortLeafWires[cellType],
cutSet: CoreFlat.CreateCutSet[
labels: LIST["Logic", "LogicMacro"],
cellTypes: LIST["LU", "Adder", "Shifter", "Priority", "InstDP"]
]
];
CDProperties.PutDesignProp[design, $DAUserRoseDisplay, tester.display];
};
InstDPCDExtractSwitch: PROC [comm: CDSequencer.Command] = {
--Extract Logical Unit
design ← comm.design;
cellType ← Sisyph.ExtractSchematicByName["InstDP.icon", Sisyph.Create[design]];
InstDPInitPortIndicies[cellType];
[] ← Ports.InitPorts[cellType, ls, force, "R", "load", "nByteSel", "SelIBufData", "ShiftSel", "SelCur", "SelNext", "SelWrite", "nWtIBuf", "CK", "XBus"];
[] ← Ports.InitPorts[cellType, ls, none, "D1", "IbufN", "OpCode"];
Ports.ITDList[cellType.public, LIST[r, load, nByteSel, selIBufData, shiftSel, selCur, selNext, selWrite, nWtIBuf, clock, xBus], force];
Ports.ITDList[cellType.public, LIST[d1, opCode, ibufN], none];
[] ← Rosemary.SetFixedWire[cellType.public[Vdd], H];
[] ← Rosemary.SetFixedWire[cellType.public[Gnd], L];
tester ←
RosemaryUser.TestProcedureViewer[
cellType: cellType,
testButtons: LIST["InstDPSimpleTest/Switch"],
name: "Instruction Unit Tester /Switch",
displayWires: RosemaryUser.DisplayPortLeafWires[cellType] ,
cutSet: CoreFlat.CreateCutSet[
labels: LIST["Logic", "LogicMacro"],
cellTypes: LIST["IBuf6TCell"]
]
];
CDProperties.PutDesignProp[design, $DAUserRoseDisplay, tester.display];
};
InstDPInitPortIndicies: PROC [ct: Core.CellType] ~ {
[r, load, nByteSel, selIBufData, shiftSel, selCur, selNext, selWrite, nWtIBuf, clock, xBus] ← Ports.PortIndexes[ct.public, "R", "load", "nByteSel", "SelIBufData", "ShiftSel", "SelCur", "SelNext", "SelWrite", "nWtIBuf", "CK", "XBus"];
[d1, opCode, ibufN] ← Ports.PortIndexes[ct.public, "D1", "OpCode", "IbufN"];
Vdd ← Ports.PortIndex[ct.public, "Vdd"];
Gnd ← Ports.PortIndex[ct.public, "Gnd"];
};
-- Rosemary Registration ----------------------------------------------------
RosemaryUser.RegisterTestProc["EuSimpleTest", EUSimpleTest];
CDCommandOps.RegisterWithMenu[
menu: $ProgramMenu,
entry: "Extract & Rosmary EU",
doc: "",
proc: EUCDExtract
];
RosemaryUser.RegisterTestProc["InstDPSimpleTest/Cut", InstDPSimpleTest];
CDCommandOps.RegisterWithMenu[
menu: $ProgramMenu,
entry: "Extract & Rosmary InstDP / Cut",
doc: "",
proc: InstDPCDExtract
];
RosemaryUser.RegisterTestProc["InstDPSimpleTest/Switch", InstDPSimpleTest];
CDCommandOps.RegisterWithMenu[
menu: $ProgramMenu,
entry: "Extract & Rosmary InstDP / Switch",
doc: "",
proc: InstDPCDExtractSwitch
];
END.