DIRECTORY CD, Commander, IFUAsm, IFUPW, Rope; IFUAsmPCFormTop: CEDAR PROGRAM IMPORTS Commander, IFUAsm, IFUPW, Rope = BEGIN GND: Rope.ROPE = IFUPW.GND; VDD: Rope.ROPE = IFUPW.VDD; pcTopSeq: BOOL _ FALSE; LIST8: PUBLIC PROC [r0, r1, r2, r3, r4, r5, r6, r7: REF _ NIL ] RETURNS[list: LIST OF REF] = {RETURN[IFUPW.LISTn[r0, r1, r2, r3, r4, r5, r6, r7]]}; LIST6: PUBLIC PROC [r0, r1, r2, r3, r4, r5: REF _ NIL ] RETURNS[list: LIST OF REF] = {RETURN[IFUPW.LISTn[r0, r1, r2, r3, r4, r5]]}; abgdAB: IFUPW.List = IFUPW.List4["AlphaAB.", "BetaAB.", "GammaAB.", "DeltaAB."]; opNILAB: IFUPW.List = IFUPW.List4["OpAB.", NIL, NIL, NIL]; XopSetupOpTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, opNILAB ]; XopSetupOp: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "XopSetupOp", rowType: IFUPW.cmosMet2, topSeq: pcTopSeq, top: XopSetupOpTop, left: NIL, right: LIST["UserMode"], bot: XopSetupOpTop, botSeq: pcTopSeq, fixGV: TRUE ]}; XopGenRowTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, LIST6["OpAB.", NIL, IFUPW.List8[ NIL, NIL, NIL,"UserMode", "OpAB.0", "OpAB.1", "OpAB.2", "OpAB.3"], IFUPW.List8["OpAB.4", "OpAB.5", "OpAB.6", "OpAB.7", NIL, NIL, NIL, NIL] ] ]; XopGenRow: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "XopGenRow", type: LIST6["GPTriDr"], top: XopGenRowTop, ctl: IFUPW.Listn["PCBusSrcXopBc", "PCBusSrcXopBc'"], in: LIST6[ LIST6[ GND, GND, IFUPW.List8[GND,GND,GND,"UserMode", "OpAB.0", "OpAB.1", "OpAB.2", "OpAB.3"], IFUPW.List8["OpAB.4", "OpAB.5", "OpAB.6", "OpAB.7", GND,GND,GND,GND] ] ], out: LIST6["PCBus."], bot: TrapSetup0Top, seq: pcTopSeq ]}; TrapSetup0Top: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, opNILAB]; TrapSetup0: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "TrapSetup0", rowType: IFUPW.cmosMet2, topSeq: pcTopSeq, top: TrapSetup0Top, left: NIL, right: LIST[ "EPFaultB.0", "EPFaultB.1", "EPFaultB.2", "EPFaultB.3", "EUCondSel2AB.0", "EUCondSel2AB.1", "EUCondSel2AB.2", "EUCondSel2AB.3"], bot: TrapLatch0Top, botSeq: pcTopSeq, fixGV: TRUE ]}; TrapLatch0Top: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, LIST6["OpAB.", LIST6[ "EPFaultB.0", "EPFaultB.1", "EPFaultB.2", "EPFaultB.3"], LIST6[ "EUCondSel2AB.0", "EUCondSel2AB.1", "EUCondSel2AB.2", "EUCondSel2AB.3"], NIL ] ]; TrapLatch0: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "TrapLatch0", type: LIST6["GPLatch"], top: TrapLatch0Top, ctl: IFUPW.Listn["PhB"], in: LIST6[ LIST6[ NIL, LIST6[ "EPFaultB.0", "EPFaultB.1", "EPFaultB.2", "EPFaultB.3"], LIST6[ "EUCondSel2AB.0", "EUCondSel2AB.1", "EUCondSel2AB.2", "EUCondSel2AB.3"], NIL ] ], out: LIST6[ LIST6[ NIL, LIST6[ "EPFaultBA.0", "EPFaultBA.1", "EPFaultBA.2", "EPFaultBA.3"], LIST6[ "EUCondSel2BA.0", "EUCondSel2BA.1", "EUCondSel2BA.2", "EUCondSel2BA.3"], NIL ] ], bot: TrapSetup1Top, seq: pcTopSeq ]}; TrapSetup1Top: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, LIST6[ "OpAB.", LIST6[ "EPFaultBA.0", "EPFaultBA.1", "EPFaultBA.2", "EPFaultBA.3"], LIST6[ "EUCondSel2BA.0", "EUCondSel2BA.1", "EUCondSel2BA.2", "EUCondSel2BA.3"], NIL ] ]; TrapSetup1: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "TrapSetup1", rowType: IFUPW.cmosMet2, topSeq: pcTopSeq, top: TrapSetup1Top, left: NIL, right: LIST["ExceptCodeAB.0", "ExceptCodeAB.1", "ExceptCodeAB.2","ExceptCodeAB.3"], bot: TrapMux1Top, botSeq: pcTopSeq, fixGV: TRUE ]}; TrapMux1Top: LIST OF REF = LIST[ "XBus.", "PCBus.", abgdAB, LIST6[ "OpAB.", NIL, NIL, LIST6[ "EPFaultBA.0", "EPFaultBA.1", "EPFaultBA.2", "EPFaultBA.3"] ], NIL, LIST6[ NIL, NIL, NIL, LIST6[ "EUCondSel2BA.0", "EUCondSel2BA.1", "EUCondSel2BA.2", "EUCondSel2BA.3"] ], GND, VDD, LIST6[ NIL, NIL, NIL, LIST6[ "ExceptCodeAB.0", "ExceptCodeAB.1", "ExceptCodeAB.2","ExceptCodeAB.3"] ] ]; TrapMux1: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "TrapMux1", top: TrapMux1Top, ctl: IFUPW.Listn["TrapExcept", "TrapEUCC", "TrapFPFault", "TrapCacheFault"], in: LIST6[ LIST6[ GND, GND, IFUPW.List8[ GND, GND, GND, GND, GND, GND, GND, GND ], IFUPW.List8[ "ExceptCodeAB.0", "ExceptCodeAB.1", "ExceptCodeAB.2","ExceptCodeAB.3", GND, GND, GND, GND] ], LIST6[ GND, GND, IFUPW.List8[ GND, GND, GND, GND, GND, GND, GND, VDD ], IFUPW.List8[ "EUCondSel2BA.0", "EUCondSel2BA.1", "EUCondSel2BA.2", "EUCondSel2BA.3", GND, GND, GND, GND] ], LIST6[ GND, GND, IFUPW.List8[ GND, GND, GND, GND, GND, GND, VDD, GND ], IFUPW.List8[ "EPFaultBA.0", "EPFaultBA.1", "EPFaultBA.2", "EPFaultBA.3", GND, GND, GND, GND] ], LIST6[ GND, GND, IFUPW.List8[ GND, GND, GND, GND, GND, GND, VDD, VDD ], IFUPW.List8[ "EPFaultBA.0", "EPFaultBA.1", "EPFaultBA.2", "EPFaultBA.3", GND, GND, GND, GND] ] ], out: LIST6["TrapPCA."], bot: TrapLatch1Top, seq: pcTopSeq, fixGV: TRUE ]}; TrapLatch1Top: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, opNILAB, "TrapPCA."]; TrapLatch1: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "TrapLatch1", type: LIST6["GPLatch"], top: TrapLatch1Top, ctl: IFUPW.Listn["PhA"], in: LIST6["TrapPCA."], out: LIST6["TrapPCAB."], bot: TrapDrivePCBusTop, seq: pcTopSeq ]}; TrapDrivePCBusTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, opNILAB, "TrapPCAB." ]; TrapDrivePCBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "TrapDrivePCBus", type: LIST6["GPTriDr"], top: TrapDrivePCBusTop, ctl: IFUPW.Listn["PCBusSrcTrapBc", "PCBusSrcTrapBc'"], in: LIST6["TrapPCAB."], out: LIST6["PCBus."], bot: ABGDDrivePCBusTop, seq: pcTopSeq ]}; ABGDDrivePCBusTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, opNILAB ]; ABGDDrivePCBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "ABGDDrivePCBus", type: LIST6["GPTriDr"], top: ABGDDrivePCBusTop, ctl: IFUPW.Listn["PCBusSrcABGDBc", "PCBusSrcABGDBc'"], in: LIST6[abgdAB], out: LIST6["PCBus."], bot: XABTop, seq: pcTopSeq ]}; XABTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, opNILAB]; XAB: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "XAB", type: LIST6["GPLatch"], top: XABTop, ctl: IFUPW.Listn["PhA"], in: LIST6["XBus."], out: LIST6["XAB."], bot: XABDrivePCBusTop, seq: pcTopSeq ]}; XABDrivePCBusTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, opNILAB, "XAB." ]; XABDrivePCBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "XABDrivePCBus", type: LIST6["GPTriDr"], top: XABDrivePCBusTop, ctl: IFUPW.Listn["PCBusSrcXaBc", "PCBusSrcXaBc'"], in: LIST6["XAB."], out: LIST6["PCBus."], bot: BranchOffsetSetupTop, seq: pcTopSeq ]}; BranchOffsetSetupTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", abgdAB, opNILAB, "XAB." ]; BranchOffsetSetup: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "BranchOffsetSetup", rowType: IFUPW.cmosMet2, topSeq: pcTopSeq, top: BranchOffsetSetupTop, left: NIL, right: NIL, bot: BranchOffsetMuxTop, botSeq: pcTopSeq, fixGV: TRUE ]}; LISTOpAlphaBetaAB: LIST OF REF = LIST6["OpAB.", NIL, "AlphaAB.", "BetaAB."]; LISTOpAlphaBetaBA: LIST OF REF = LIST6["OpBA.", NIL, "AlphaBA.", "BetaBA."]; alphaSign: IFUPW.List = IFUPW.List8["AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7"]; betaSign: IFUPW.List = IFUPW.List8["BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7"]; signedAlpBet: LIST OF REF = LIST6[alphaSign, alphaSign, "AlphaAB.", "BetaAB."]; signedAlpha: LIST OF REF = LIST6[alphaSign, alphaSign, alphaSign, "AlphaAB."]; signedBeta: LIST OF REF = LIST6[betaSign, betaSign, betaSign, "BetaAB."]; BranchOffsetMuxTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "PCBus.", abgdAB, LISTOpAlphaBetaAB, "XAB.", NIL, GND, VDD, signedAlpha, signedBeta ]; BranchOffsetMux: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "BranchOffsetMux", top: BranchOffsetMuxTop, ctl: LIST["PCBrAlphaA","PCBrBetaA","PCBrAlphaBetaA","PCBrABGDA","PCBrXaA"], in: LIST6[ signedAlpha, signedBeta, signedAlpBet, abgdAB, "XAB."], out: LIST6["PCBranchOSetA."], bot: BranchOffsetLatchTop, seq: pcTopSeq, fixGV: TRUE ]}; BranchOffsetLatchTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", NIL, LISTOpAlphaBetaAB, NIL, "PCBranchOSetA."]; BranchOffsetLatch: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "BranchOffsetLatch", type: LIST6["GPLatch"], top: BranchOffsetLatchTop, ctl: IFUPW.Listn["PhA"], in: LIST6["PCBranchOSetA."], out: LIST6["PCBranchOSetAB."], bot: BranchPhaseMuxTop, seq: pcTopSeq ]}; oplength: LIST OF REF = LIST6[ GND, GND, GND, IFUPW.List8[GND, GND, GND, GND, GND, "OpLengthBA.0", "OpLengthBA.1", "OpLengthBA.2"]]; BranchPhaseMuxTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranchOSetAB.", LISTOpAlphaBetaAB]; BranchPhaseMux: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "BranchPhaseMux", top: BranchPhaseMuxTop, ctl: IFUPW.Listn["PhA", "PhB"], in: LIST6[oplength, "PCBranchOSetAB." ], out: LIST6["PCBranch."], bot: BranchBufferTop, seq: pcTopSeq, fixGV: TRUE ]}; BranchBufferTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranch.", LISTOpAlphaBetaAB, oplength]; BranchBuffer: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "BranchBuffer", type: LIST6["GPBuf"], top: BranchBufferTop, ctl: NIL, in: LIST6["PCBranch."], out: LIST6["PCBranchBuf."], bot: OpLengthBranchSetupTop, seq: pcTopSeq ]}; OpLengthBranchSetupTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranchBuf.", LISTOpAlphaBetaAB, oplength ]; OpLengthBranchSetup: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "OpLengthBranchSetup", rowType: IFUPW.cmosMet2, topSeq: pcTopSeq, top: OpLengthBranchSetupTop, left: NIL, right: LIST["OpLengthBA.0", "OpLengthBA.1", "OpLengthBA.2"], bot: OpAlphaBetaLatchTop, botSeq: pcTopSeq, fixGV: TRUE ]}; OpAlphaBetaLatchTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranchBuf.", LISTOpAlphaBetaAB]; OpAlphaBetaLatch: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "OpAlphaBetaLatch", type: LIST6["GPLatch"], top: OpAlphaBetaLatchTop, ctl: IFUPW.Listn["PhB"], in: LIST6[LISTOpAlphaBetaAB], out: LIST6[LISTOpAlphaBetaBA], bot: NPCLatchTop, seq: pcTopSeq ]}; NPCLatchTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranchBuf.", LISTOpAlphaBetaBA]; NPCLatch: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "NPCLatch", type: LIST6["GPLatch"], top: NPCLatchTop, ctl: IFUPW.Listn["PhB"], in: LIST6["PCBus."], out: LIST6["NPCBA."], bot: PCABMuxTop, seq: pcTopSeq ]}; PCABMuxTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranchBuf.", LISTOpAlphaBetaBA, NIL, "NPCBA."]; PCABMux: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "PCABMux", top: PCABMuxTop, ctl: IFUPW.Listn["PCPlusLengthBA", "MacroJumpBA", "nGetNextInstBA'"], in: LIST6["SumA.", "NPCBA.", "NPCBA."], out: LIST6["PCA."], bot: PCABLatchTop, seq: pcTopSeq, fixGV: TRUE ]}; PCABLatchTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranchBuf.", LISTOpAlphaBetaBA, "PCA.", "SumA."]; PCABLatch: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "PCABLatch", type: LIST6["GPLatch"], top: PCABLatchTop, ctl: IFUPW.Listn["PhA"], in: LIST6["PCA."], out: LIST6["PCAB."], bot: PCDrivePCBusTop, seq: pcTopSeq ]}; PCDrivePCBusTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranchBuf.", LISTOpAlphaBetaBA, "PCAB.", "SumA."]; PCDrivePCBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "PCDrivePCBus", type: LIST6["GPTriDr"], top: PCDrivePCBusTop, ctl: IFUPW.Listn["PCBusSrcPCBc", "PCBusSrcPCBc'"], in: LIST6["PCAB."], out: LIST6["PCBus."], bot: PCBALatchTop, seq: pcTopSeq ]}; PCBALatchTop: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranchBuf.", LISTOpAlphaBetaBA, "PCAB.", "SumA."]; PCBALatch: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "PCBALatch", type: LIST6["GPLatch"], top: PCBALatchTop, ctl: IFUPW.Listn["PhA"], in: LIST6["PCAB."], out: LIST6["PCBA."], bot: PCFormBot, seq: pcTopSeq ]}; PCFormBot: LIST OF REF = LIST6[ "XBus.", "PCBus.", "PCBranchBuf.", LISTOpAlphaBetaBA, "PCBA.", "SumA."]; newDesign: Rope.ROPE _ IFUAsm.rootName.Cat["PCFormTop"]; dataColRows: LIST OF IFUPW.UserProc _ LIST[ XopSetupOp, XopGenRow, TrapSetup0, TrapLatch0, TrapSetup1, TrapMux1, TrapLatch1, TrapDrivePCBus, ABGDDrivePCBus, XAB, XABDrivePCBus, BranchOffsetSetup, BranchOffsetMux, BranchOffsetLatch, BranchPhaseMux, BranchBuffer, OpLengthBranchSetup, OpAlphaBetaLatch, NPCLatch, PCABMux, PCABLatch, PCDrivePCBus, PCBALatch ]; CDAssemble: IFUPW.UserProc= {RETURN[IFUPW.AssembleList[design, dataColRows]]}; CTAssemble: Commander.CommandProc = {[ ] _ IFUPW.AssembleList[IFUAsm.refDesign, dataColRows, newDesign, cmd]}; IFUAsm.RegDataColRows [procs: dataColRows, name: newDesign.Cat["Cell"]]; Commander.Register [proc: CTAssemble, key: newDesign.Cat["Cell"]]; IFUPW.Register [userProc: CDAssemble, name: newDesign.Cat["Cell"]]; END. ŠIFUAsmPCFormTop.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by June 24, 1985 9:32:12 pm PDT ÊÓ˜šœ™Jšœ<™˜J—J˜JšœI˜IJšœF˜FJšœ9˜GJ˜Jšœ˜—J™J™—…—6DL¡