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.