<> <> <> <> <<>> DIRECTORY CD, Commander, IFUAsm, IFUPLAInstrDecode, IFUPW, Rope; IFUAsmABCPipe: CEDAR PROGRAM IMPORTS Commander, IFUAsm, IFUPW EXPORTS IFUAsm = BEGIN GND: Rope.ROPE = IFUPW.GND; VDD: Rope.ROPE = IFUPW.VDD; abcPipeRP: IFUPW.RowParams = IFUPW.IFUDataColNSeq; exceptCodeAB: IFUPW.List = LIST[ "ExceptCodeAB.0", "ExceptCodeAB.1", "ExceptCodeAB.2", "ExceptCodeAB.3", "ExceptCodeAB.4", "ExceptCodeAB.5", "ExceptCodeAB.6", "ExceptCodeAB.7"]; microStateAB: IFUPW.List = IFUPW.List8[ "StateAB.0", "StateAB.1", "StateAB.2", "StateAB.3", "StateAB.4", "StateAB.5", "StateAB.6", "StateAB.7"]; euDControls: IFUPW.List = IFUPW.List8[ "EUAluLeftSrc1BA.0", "EUAluLeftSrc1BA.1", "EUAluRightSrc1BA.0", "EUAluRightSrc1BA.1", "EUStore2ASrc1BA.0", "EUStore2ASrc1BA.1", NIL, NIL]; fixedJump: IFUPW.List = IFUPW.CardToList8[IFUPLAInstrDecode.fixedMicroJump]; fieldAddr: IFUPW.List = IFUPW.ProcRegToList[euField]; junkAddr: IFUPW.List = IFUPW.ProcRegToList[euJunk]; marAddr: IFUPW.List = IFUPW.ProcRegToList[euMAR]; ABCMicroStateOutTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", "CReg0BA.", "StateBA."], NIL, IFUPW.List4[NIL, NIL, NIL, "StateAB."]]; ABCMicroStateOut: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmABCPipe.ABCMicroStateOut", rowType: IFUPW.cmosMet2, topRP: abcPipeRP, top: ABCMicroStateOutTop, left: exceptCodeAB, right: microStateAB, bot: ABCMicroStateMuxATop, botRP: abcPipeRP ]}; ABCMicroStateMuxATop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", "CReg0BA.", "StateBA."], NIL, IFUPW.List4[NIL, NIL, NIL, "StateAB."], IFUPW.List4[NIL, NIL, NIL, "ExceptCodeAB."]]; ABCMicroStateMuxA: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmABCPipe.ABCMicroStateMuxA", top: ABCMicroStateMuxATop, leftCtl: LIST["MicroStateContAB", "MicroStateJumpAB", "MicroStateExcepAB"], in: IFUPW.LISTn[ IFUPW.LISTn[ NIL, NIL, NIL, "StateBA."], IFUPW.LISTn[ NIL, NIL, NIL, fixedJump], IFUPW.LISTn[ NIL, NIL, NIL, "ExceptCodeAB."] ], out: IFUPW.LISTn[IFUPW.List4[ NIL, NIL, NIL, "StateA."]], bot: ABCLatch1ATop, rp: abcPipeRP ]}; <<>> ABCLatch1ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", "CReg0BA.", NIL], IFUPW.List4[NIL, NIL, NIL, "StateA."], IFUPW.List4[NIL, NIL, NIL, "StateAB."] ]; ABCLatch1A: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmABCPipe.ABCLatch1A", type: IFUPW.LISTn["GPLatch"], top: ABCLatch1ATop, leftCtl: LIST["PhA", "VBB"], in: IFUPW.LISTn[IFUPW.LISTn["AReg0BA.", "BReg0BA.", "CReg0BA.", "StateA."] ], out: IFUPW.LISTn[IFUPW.List4["AReg1AB.", "BReg1AB.", "CReg1AB.", "StateAB."]], bot: ABCMux1BTop, rp: abcPipeRP ]}; <<>> ABCMux1BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", NIL, NIL], IFUPW.List4["AReg1AB.", "BReg1AB.", "CReg1AB.", NIL] ]; ABCMux1B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmABCPipe.ABCMux1B", top: ABCMux1BTop, leftCtl: LIST["Pipe1KillAB", "Pipe1AdvAB"], in: IFUPW.LISTn[ IFUPW.LISTn[ GND, GND, junkAddr, GND], IFUPW.LISTn[ "AReg1AB.", "BReg1AB.", "CReg1AB.", NIL] ], out: IFUPW.LISTn[IFUPW.List4["AReg1B.", "BReg1B.", "CReg1B.", NIL]], bot: ABCLatch1BTop, rp: abcPipeRP ]}; <<>> ABCLatch1BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", NIL, NIL], NIL, IFUPW.List4["AReg1B.", "BReg1B.", "CReg1B.", NIL] ]; ABCLatch1B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmABCPipe.ABCLatch1B", type: IFUPW.LISTn["GPLatch"], top: ABCLatch1BTop, leftCtl: LIST["NotPipe1CycBc", "VBB"], in: IFUPW.LISTn[IFUPW.List4["AReg1B.", "BReg1B.", "CReg1B.", NIL]], out: IFUPW.LISTn[IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg1BA.", NIL]], bot: ABCMatch1PrepTop, rp: abcPipeRP ]}; <<>> ABCMatch1PrepTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", NIL, NIL], IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg1BA.", NIL] ]; ABCMatch1Prep: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmABCPipe.ABCMatch1Prep", rowType: IFUPW.cmosMet2, topRP: abcPipeRP, top: ABCMatch1PrepTop, left: NIL, right: NIL, bot: ABCMatch1GateTop, botRP: abcPipeRP ]}; ABCMatch1GateTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.LISTn["AReg0BA.", "BReg0BA.", NIL, NIL], IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg1BA.", NIL], IFUPW.List4["CReg1BA.", "CReg1BA.", "CReg1BA.", NIL] ]; -- duplicate ABCMatch1Gate: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmABCPipe.ABCMatch1Gate", type: IFUPW.LISTn["GPXor"], top: ABCMatch1GateTop, leftCtl: NIL, in: LIST[ IFUPW.LISTn["AReg0BA.", "BReg0BA.", fieldAddr, NIL], IFUPW.List4["CReg1BA.", "CReg1BA.", "CReg1BA.", NIL] ], out: LIST[ IFUPW.List4["AC2x.", "BC2x.", "CF2x.", NIL]], bot: ABCMatch1Top, rp: abcPipeRP ]}; ABCMatch1Top: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.LISTn["AReg0BA.", "BReg0BA.", NIL, NIL], IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg1BA.", NIL], IFUPW.List4["AC2x.", "BC2x.", "CF2x.", NIL] ]; ABCMatch1: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUMatchRow[ design: design, name: "IFUAsmABCPipe.ABCMatch1", chkFor: LIST[GND], top: ABCMatch1Top, in1: 3, -- input index col2: 4, -- blank column col3: 5, -- blank column sideOuts: IFUPW.List4["AC2MatchB", "BC2MatchB", "C2IsFieldB", NIL], outsSide: left, bot: CLatch2ATop, rp: abcPipeRP ]}; <<>> CLatch2ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", NIL, NIL], IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg1BA.", NIL] ]; CLatch2A: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmABCPipe.CLatch2A", type: IFUPW.LISTn["GPLatch"], top: CLatch2ATop, leftCtl: LIST["PhA", "VBB"], in: LIST[IFUPW.List4[NIL, NIL, "CReg1BA.", NIL] ], out: LIST[IFUPW.List4[NIL, NIL, "CReg2AB.", NIL]], bot: CMux2BTop, rp: abcPipeRP ]}; <<>> CMux2BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", NIL, NIL], IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg2AB.", NIL] ]; CMux2B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmABCPipe.CMux2B", top: CMux2BTop, leftCtl: LIST["Pipe2KillAB", "Pipe2AdvAB"], in: IFUPW.LISTn[ IFUPW.LISTn[ GND, GND, junkAddr, NIL], IFUPW.LISTn[ NIL, NIL, "CReg2AB.", NIL] ], out: IFUPW.LISTn[IFUPW.LISTn[NIL, NIL, "CReg2B.", NIL]], bot: CLatch2BTop, rp: abcPipeRP ]}; <<>> CLatch2BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", NIL, NIL], IFUPW.List4["AReg1BA.", "BReg1BA.", NIL, NIL], IFUPW.List4[NIL, NIL, "CReg2B.", NIL] ]; CLatch2B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmABCPipe.CLatch2B", type: IFUPW.LISTn["GPLatch"], top: CLatch2BTop, leftCtl: LIST["NotPipe2CycBc", "VBB"], in: IFUPW.LISTn[IFUPW.List4[NIL, NIL, "CReg2B.", NIL]], out: IFUPW.LISTn[IFUPW.List4[NIL, NIL, "CReg2BA.", NIL]], bot: ABCMatch2PrepTop, rp: abcPipeRP ]}; <<>> ABCMatch2PrepTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", NIL, NIL], IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg2BA.", NIL] ]; ABCMatch2Prep: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmABCPipe.ABCMatch2Prep", rowType: IFUPW.cmosMet2, topRP: abcPipeRP, top: ABCMatch2PrepTop, left: NIL, right: NIL, bot: ABCMatch2GateTop, botRP: abcPipeRP ]}; ABCMatch2GateTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.LISTn["AReg0BA.", "BReg0BA.", NIL, NIL], IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg2BA.", NIL], IFUPW.List4["CReg2BA.", "CReg2BA.", "CReg2BA.", NIL] ]; -- duplicate ABCMatch2Gate: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmABCPipe.ABCMatch2Gate", type: IFUPW.LISTn["GPXor"], top: ABCMatch2GateTop, leftCtl: NIL, in: LIST[ IFUPW.LISTn["AReg0BA.", "BReg0BA.", fieldAddr, NIL], IFUPW.List4["CReg2BA.", "CReg2BA.", "CReg2BA.", NIL] ], out: LIST[ IFUPW.List4["AC3x.", "BC3x.", "CF3x.", NIL]], bot: ABCMatch2Top, rp: abcPipeRP ]}; ABCMatch2Top: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg2BA.", NIL], IFUPW.List4["AC3x.", "BC3x.", "CF3x.", NIL] ]; -- duplicate ABCMatch2: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUMatchRow[ design: design, name: "IFUAsmABCPipe.ABCMatch2", chkFor: LIST[GND], top: ABCMatch2Top, in1: 3, -- input index col2: 4, -- blank column col3: 5, -- blank column sideOuts: IFUPW.List4["AC3MatchB", "BC3MatchB", "C3IsFieldB", NIL], outsSide: left, bot: CLatch3ATop, rp: abcPipeRP ]}; <<>> CLatch3ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg2BA.", NIL] ]; CLatch3A: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmABCPipe.CLatch3A", type: IFUPW.LISTn["GPLatch"], top: CLatch3ATop, leftCtl: LIST["PhA", "VBB"], in: LIST[IFUPW.List4[NIL, NIL, "CReg2BA.", NIL] ], out: LIST[IFUPW.List4[NIL, NIL, "CReg3AB.", NIL]], bot: CMux3BTop, rp: abcPipeRP ]}; CMux3BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg3AB.", NIL] ]; CMux3B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmABCPipe.CMux3B", top: CMux3BTop, leftCtl: LIST["Pipe3FaultAB", "Pipe3TrapAB", "Pipe3AdvAB"], in: IFUPW.LISTn[ IFUPW.LISTn[ NIL, NIL, marAddr, NIL], IFUPW.LISTn[ NIL, NIL, junkAddr, NIL], IFUPW.LISTn[ NIL, NIL, "CReg3AB.", NIL] ], out: IFUPW.LISTn[IFUPW.LISTn[NIL, NIL, "CReg3B.", NIL]], bot: CLatch3BTop, rp: abcPipeRP ]}; CLatch3BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4[NIL, NIL, "CReg3B.", NIL], IFUPW.List4["AReg1BA.", "BReg1BA.", NIL, NIL] ]; CLatch3B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmABCPipe.CLatch3B", type: IFUPW.LISTn["GPLatch"], top: CLatch3BTop, leftCtl: LIST["NotPipe3CycBc", "VBB"], in: IFUPW.LISTn[IFUPW.List4[NIL, NIL, "CReg3B.", NIL]], out: IFUPW.LISTn[IFUPW.List4[NIL, NIL, "CReg3BA.", NIL]], bot: ABCDrXBusTop, rp: abcPipeRP ]}; ABCDrXBusTop: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, IFUPW.List4["AReg1BA.", "BReg1BA.", "CReg3BA.", NIL] ]; ABCDrXBus: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmABCPipe.ABCDrXBus", type: IFUPW.LISTn["GPTriDr"], top: ABCDrXBusTop, leftCtl: LIST["PhB", "not.PhB"], in: LIST[IFUPW.LISTn["AReg1BA.", "BReg1BA.", "CReg3BA.", euDControls] ], out: LIST["XBus."], bot: ABCPipeBot, rp: abcPipeRP ]}; <<>> ABCPipeBot: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, NIL, IFUPW.LISTn[NIL, NIL, NIL, euDControls]]; module: Rope.ROPE _ "IFUAsmABCPipe"; ABCPipe: PUBLIC IFUPW.Frame _ IFUPW.NFSFUP[module, y, LIST[ ABCMicroStateOut, ABCMicroStateMuxA, ABCLatch1A, ABCMux1B, ABCLatch1B, ABCMatch1Prep, ABCMatch1Gate, ABCMatch1, CLatch2A, CMux2B, CLatch2B, ABCMatch2Prep, ABCMatch2Gate, ABCMatch2, CLatch3A, CMux3B, CLatch3B, ABCDrXBus ] ]; ABCPipeCT: Commander.CommandProc = {IFUPW.AssembleFrame[IFUAsm.RefDesign[], ABCPipe, cmd ] }; Commander.Register [proc: ABCPipeCT, key: module]; END. <<>> <<>>