<> <> <> DIRECTORY Core, CoreFrame, CoreName, CoreXform, IFUSrc, IFUCoreData; IFUSrcPCFormBot: CEDAR PROGRAM IMPORTS CoreFrame, CoreName, IFUCoreData EXPORTS IFUSrc = BEGIN ROPE: TYPE = Core.ROPE; opAlBeBA: ROPE _ "( OpBA. NIL AlphaBA. BetaBA. )"; PCBALatchTop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCBranchBuf.", opAlBeBA, "PCAB.", "Sum."]; DebugPC: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "DebugPC", type: "DpDebugDr", top: PCBALatchTop, right: "( DebugPC )", in: "( PCAB. )", out: "( XBus. )", bot: PCBALatchTop, xform: IFUCoreData.Interleaved48 ]}; PCBALatch: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCBALatch", type: "DpLatch", top: PCBALatchTop, left: "( PhB VBB )", in: "( PCAB. )", out: "( PCBA. )", bot: PCAdderTop, xform: IFUCoreData.Interleaved48 ]}; PCAdderTop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCBranchBuf.", opAlBeBA, "PCBA.", "Sum."]; PCAdder: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "Adder", name: "PCAdder", top: PCAdderTop, right: "( GND )", in: "( PCBranchBuf. PCBA. )", out: "( Sum. )", bot: PCTargetLatchTop, xform: IFUCoreData.Interleaved48 ]}; PCTargetLatchTop: LIST OF REF = LIST ["XBus.", "PCBus.", NIL, opAlBeBA, "PCBA.", "Sum."]; PCTargetLatch: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCTargetLatch", type: "DpLatch", top: PCTargetLatchTop, left: "( PhB VBB )", in: "( Sum. )", out: "( TargetBA. )", bot: PCBusDriveOffsetTop, xform: IFUCoreData.Interleaved48 ]}; PCBusDriveOffsetTop: LIST OF REF = LIST ["XBus.", "PCBus.", "TargetBA.", opAlBeBA, "PCBA.", "Sum."]; PCBusDriveOffset: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCBusDriveOffset", type: "DpTriDr", top: PCBusDriveOffsetTop, right: "( PcBusSrcOffSetPCBA NotPcBusSrcOffSetPCBA )", in: "( Sum. )", out: "( PCBus. )", bot: PCMux1ASetUpTop, xform: IFUCoreData.Interleaved48 ]}; PCMux1ASetUpTop: LIST OF REF = LIST ["XBus.", "PCBus.", "TargetBA.", opAlBeBA, "PCBA.", "Sum."]; PCMux1ASetUp: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "SwitchBox", name: "PCMux1ASetUp", top: PCMux1ASetUpTop, left: NIL, right: NIL, bot: PCMux1ATop, xform: IFUCoreData.Interleaved48 ]}; PCMux1ATop: LIST OF REF = LIST ["XBus.", "PCBus.", "TargetBA.", opAlBeBA, "PCBA.", NIL, "GND", "VDD", "Sum."]; PCMux1A: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "Mux", name: "PCMux1A", top: PCMux1ATop, right: "( PcPipeSrcThisPCBA PcPipeSrcSeqPCBA PcPipeSrcOffSetPCBA )", in: "( PCBA. Sum. TargetBA. )", out: "( PCAltPipe1A. )", bot: PCAltLatch1ATop, xform: IFUCoreData.Interleaved48 ]}; PCAltLatch1ATop: LIST OF REF = LIST ["XBus.", "PCBus.", NIL, opAlBeBA, "PCBA.", "PCAltPipe1A."]; PCAltLatch1A: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCAltLatch1A", type: "DpLatch", top: PCAltLatch1ATop, left: "( LoadStage1Ac VBB )", in: "( PCAltPipe1A. )", out: "( PCAltPipe1AB. )", bot: PCLatch1ATop, xform: IFUCoreData.Interleaved48 ]}; PCLatch1ATop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCAltPipe1AB.", opAlBeBA, "PCBA."]; PCLatch1A: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCLatch1A", type: "DpLatch", top: PCLatch1ATop, left: "( LoadStage1Ac VBB )", in: "( PCBA. )", out: "( PCPipe1AB. )", bot: PCAltLatch1BTop, xform: IFUCoreData.Interleaved48 ]}; PCAltLatch1BTop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCAltPipe1AB.", opAlBeBA, "PCPipe1AB."]; PCAltLatch1B: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCAltLatch1B", type: "DpLatch", top: PCAltLatch1BTop, left: "( LoadStage1Bc VBB )", in: "( PCAltPipe1AB. )", out: "( PCAltPipe1BA. )", bot: PCLatch1BTop, xform: IFUCoreData.Interleaved48 ]}; PCLatch1BTop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCAltPipe1BA.", opAlBeBA, "PCPipe1AB."]; PCLatch1B: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCLatch1B", type: "DpLatch", top: PCLatch1BTop, left: "( LoadStage1Bc VBB )", in: "( PCPipe1AB. )", out: "( PCPipe1BA. )", bot: PCAltLatch2ATop, xform: IFUCoreData.Interleaved48 ]}; PCAltLatch2ATop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCAltPipe1BA.", opAlBeBA, "PCPipe1BA."]; PCAltLatch2A: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCAltLatch2A", type: "DpLatch", top: PCAltLatch2ATop, left: "( LoadStage2Ac VBB )", in: "( PCAltPipe1BA. )", out: "( PCAltPipe2AB. )", bot: PCLatch2ATop, xform: IFUCoreData.Interleaved48 ]}; PCLatch2ATop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCAltPipe2AB.", opAlBeBA, "PCPipe1BA."]; PCLatch2A: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCLatch2A", type: "DpLatch", top: PCLatch2ATop, left: "( LoadStage2Ac VBB )", in: "( PCPipe1BA. )", out: "( PCPipe2AB. )", bot: PCAltLatch2BTop, xform: IFUCoreData.Interleaved48 ]}; PCAltLatch2BTop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCAltPipe2AB.", opAlBeBA, "PCPipe2AB."]; PCAltLatch2B: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCAltLatch2B", type: "DpLatch", top: PCAltLatch2BTop, left: "( PhB VBB )", in: "( PCAltPipe2AB. )", out: "( PCAltPipe2BA. )", bot: PCLatch2BTop, xform: IFUCoreData.Interleaved48 ]}; PCLatch2BTop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCAltPipe2BA.", opAlBeBA, "PCPipe2AB."]; PCLatch2B: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCLatch2B", type: "DpLatch", top: PCLatch2BTop, left: "( PhB VBB )", in: "( PCPipe2AB. )", out: "( PCPipe2BA. )", bot: PCMux3ATop, xform: IFUCoreData.Interleaved48 ]}; PCMux3ATop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCAltPipe2BA.", opAlBeBA, "PCPipe2BA."]; PCMux3A: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "Mux", name: "PCMux3A", top: PCMux3ATop, left: "( Stage3AAbortBA Stage3ANormalBA )", in: "( PCPipe2BA. PCAltPipe2BA. )", out: "( PCPipe3A. )", bot: PCLatch3ATop, xform: IFUCoreData.Interleaved48 ]}; PCLatch3ATop: LIST OF REF = LIST ["XBus.", "PCBus.", NIL, opAlBeBA, NIL, "PCPipe3A."]; PCLatch3A: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCLatch3A", type: "DpLatch", top: PCLatch3ATop, left: "( LoadStage3Ac VBB )", in: "( PCPipe3A. )", out: "( PCPipe3AB. )", bot: PCLatch3BTop, xform: IFUCoreData.Interleaved48 ]}; PCLatch3BTop: LIST OF REF = LIST ["XBus.", "PCBus.", NIL, opAlBeBA, "PCPipe3AB."]; PCLatch3B: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCLatch3B", type: "DpLatch", top: PCLatch3BTop, left: "( PhB VBB )", in: "( PCPipe3AB. )", out: "( PCPipe3BA. )", bot: PCDrivePipe3Top, xform: IFUCoreData.Interleaved48 ]}; PCDrivePipe3Top: LIST OF REF = LIST ["XBus.", "PCBus.", "PCPipe3BA.", opAlBeBA]; PCDrivePipe3: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCDrivePipe3", type: "DpTriDr", top: PCDrivePipe3Top, right: "( PcBusSrcPipe3BA NotPcBusSrcPipe3BA )", in: "( PCPipe3BA. )", out: "( PCBus. )", bot: PCDriveStkTop, xform: IFUCoreData.Interleaved48 ]}; PCDriveStkTop: LIST OF REF = LIST ["XBus.", "PCBus.", "PCPipe3BA.", opAlBeBA]; PCDriveStk: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCDriveStk", type: "DpTriDr", top: PCDriveStkTop, right: "( PcBusSrcStackBA NotPcBusSrcStackBA )", in: "( PCStkTopAB. )", out: "( PCBus. )", bot: PCAdjust1Top, xform: IFUCoreData.Interleaved48 ]}; PCAdjust1Top: LIST OF REF = LIST ["XBus.", NIL, "PCPipe3BA.", opAlBeBA, "PCStkTopAB."]; PCAdjust1: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "SwitchBox", name: "PCAdjust1", top: PCAdjust1Top, left: NIL, right: NIL, bot: PCStackWtMuxTop, xform: IFUCoreData.Interleaved48 ]}; PCStackWtMuxTop: LIST OF REF = LIST ["XBus.", opAlBeBA, "PCPipe3BA.", NIL, "PCStkTopAB."]; PCStackWtMux: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "Mux", name: "PCStackWtMux", top: PCStackWtMuxTop, right: "( X1ADstStackBA NotX1ADstStackBA )", in: "( XBus. PCPipe3BA. )", out: "( PrePCStackWtDataA. )", bot: PCStackWtBufTop, xform: IFUCoreData.Interleaved48 ]}; PCStackWtBufTop: LIST OF REF = LIST ["XBus.", opAlBeBA, NIL, "PrePCStackWtDataA.", "PCStkTopAB."]; PCStackWtBuf: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCStackWtBuf", type: "DpBuf", top: PCStackWtBufTop, in: "( PrePCStackWtDataA. )", out: "( PCStackWtDataA. )", bot: PCStackXBusDrTop, xform: IFUCoreData.Interleaved48 ]}; PCStackXBusDrTop: LIST OF REF = LIST ["XBus.", opAlBeBA, NIL, "PCStackWtDataA.", "PCStkTopAB."]; PCStackXBusDr: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCStackXBusDr", type: "DpTriDr", top: PCStackXBusDrTop, right: "( X1ASrcStackPAc NotX1ASrcStackPAc )", -- from InstrDecode in: "( PCStkTopAB. )", out: "( XBus. )", bot: PCStackRdLatchATop, xform: IFUCoreData.Interleaved48 ]}; PCStackRdLatchATop: LIST OF REF = LIST ["XBus.", opAlBeBA, NIL, "PCStackWtDataA.", "PCStkTopAB."]; PCStackRdLatchA: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCStackRdLatchA", type: "DpLatch", top: PCStackRdLatchATop, left: "( PhA VBB )", in: "( SelPCStackRdDataA. )", out: "( PCStkTopAB. )", bot: PCStackRdMuxTop, xform: IFUCoreData.Interleaved48 ]}; PCStackRdMuxTop: LIST OF REF = LIST ["XBus.", opAlBeBA, "SelPCStackRdDataA.", "PCStackWtDataA."]; PCStackRdMux: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "Mux", name: "PCStackRdMux", top: PCStackRdMuxTop, left: "( Push3BA NotPush3BA )", in: "( PCStackWtDataA. PCStackRdDataA. )", out: "( SelPCStackRdDataA. )", bot: PCStackRdInvTop, xform: IFUCoreData.Interleaved48 ]}; PCStackRdInvTop: LIST OF REF = LIST ["XBus.", opAlBeBA, NIL, "PCStackWtDataA.", NIL, "PCStackRdDataA."]; PCStackRdInv: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCStackRdInv", type: "DpInv", top: PCStackRdInvTop, in: "( NotPCStackRdDataA. )", out: "( PCStackRdDataA. )", bot: PCStackRdPreChargeTop, xform: IFUCoreData.Interleaved48 ]}; PCStackRdPreChargeTop: LIST OF REF = LIST ["XBus.", opAlBeBA, NIL, "PCStackWtDataA.", "NotPCStackRdDataA."]; PCStackRdPreCharge: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "GPRow", name: "PCStackRdPreCharge", type: "DpPreChg", top: PCStackRdPreChargeTop, left: "( NotPhB )", out: "( NotPCStackRdDataA. )", bot: PCFormBotBot, xform: IFUCoreData.Interleaved48 ]}; PCFormBotBot: LIST OF REF = LIST ["XBus.", opAlBeBA, NIL, "PCStackWtDataA.", "NotPCStackRdDataA."]; PCFormBot: PUBLIC PROC RETURNS[cellType: Core.CellType] = { name: ROPE _ CoreName.RopeNm["IFUPCFormBot"]; IF (cellType _ CoreFrame.ReadFrameCache[name])=NIL THEN { cellType _ CoreFrame.NewFrameCells[ name: name, rec: [first: top], cells: LIST[ DebugPC[], PCBALatch[], PCAdder[], PCTargetLatch[], PCBusDriveOffset[], PCMux1ASetUp[], PCMux1A[], PCAltLatch1A[], PCLatch1A[], PCAltLatch1B[], PCLatch1B[], PCAltLatch2A[], PCLatch2A[], PCAltLatch2B[], PCLatch2B[], PCMux3A[], PCLatch3A[], PCLatch3B[], PCDrivePipe3[], PCDriveStk[], PCAdjust1[], PCStackWtMux[], PCStackWtBuf[], PCStackXBusDr[], PCStackRdLatchA[], PCStackRdMux[], PCStackRdInv[], PCStackRdPreCharge[] ] ]; CoreFrame.WriteFrameCache[cellType]}}; END.