IFUSrcPCFormBot.mesa
Copyright c 1986 by Xerox Corporation. All rights reserved.
Curry, September 16, 1986 9:09:35 am PDT
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.