IFUAsmLSPipe.mesa
Copyright c 1985 by Xerox Corporation. All rights reserved.
Last Edited by July 7, 1985 9:33:00 am PDT
Curry, November 25, 1985 10:12:55 pm PST
DIRECTORY
CD,
Commander,
IFUAsm,
IFUPW,
Rope;
IFUAsmLSPipe: CEDAR PROGRAM
IMPORTS Commander, IFUAsm, IFUPW
EXPORTS IFUAsm =
BEGIN
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
lsPipeRP: IFUPW.RowParams = IFUPW.IFUDataColSeq;
List4:  PROC [r0, r1, r2, r3: Rope.ROPE] RETURNS[list: IFUPW.List] = IFUPW.List4;
LISTn:  PROC [r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15: REFNIL]
RETURNS[list: LIST OF REF] = IFUPW.LISTn;
op47AlphaBetaBA: LIST OF REF = IFUPW.LISTn[
IFUPW.List8[GND, GND, GND, GND, "OpBA.4", "OpBA.5", "OpBA.6", "OpBA.7"],
NIL,
"AlphaBA.",
"BetaBA."];
LSMux0ATop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4[ "L3BA.",  NIL,    "S3BA.",   "SLimNA."],
List4[ "LBA.",  NIL,   "SBA.",   NIL],
NIL,
List4[ "LAB.",  NIL,   "SAB.",   NIL] ];
LSMux0A: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUMuxRow[
design: design,
name:  "IFUAsmLSPipe.LSMux0A",
top:  LSMux0ATop,
leftCtl:  LIST[
"SLimitFmXAc",
"SLimitOldAc"],
in:   LISTn[
List4[ NIL,   NIL,   NIL,   "XBus.3"],
List4[ NIL,   NIL,   NIL,   "SLimAB."] ],
out:  LISTn[
List4[NIL,     NIL,   NIL,   "SLimABx."]],
bot:  LSLatch0ATop,
rp:   lsPipeRP ]};
LSLatch0ATop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.",  NIL,     "S3BA.",   "SLimNA."],
List4["LBA.",   NIL,    "SBA.",   "SLimAB."],
List4[NIL,   NIL,    NIL,    "SLimABx."],
List4["LAB.",   NIL,    "SAB.",   NIL] ];
LSLatch0A: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmLSPipe.LSLatch0A",
type:   LISTn["GPLatch"],
top:  LSLatch0ATop,
leftCtl: LIST["PhA", "VBB"],
in:   LISTn[List4["LBA.",  NIL, "SBA.", "SLimABx."]],
out:  LISTn[List4["LAB.",  NIL, "SAB.", "SLimAB."]],
bot:  LSDrSLimTop,
rp:   lsPipeRP ]};
LSDrSLimTop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.",  NIL,    "S3BA.",   "SLimNA."],
List4["LBA.",   NIL,   "SBA.",   "SLimAB."],
NIL,
List4["LAB.",   NIL,   "SAB.",   NIL] ];
LSDrSLim: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmLSPipe.LSDrSLim",
type:  LISTn["GPTriDr"],
top:  LSDrSLimTop,
leftCtl: LIST["XBusDstSLimAc", "not.XBusDstSLimAc"],
in:   LISTn[List4[GND, GND, GND, "SLimAB."]],
out:  LISTn["XBus."],
bot:  LSInvSLimTop,
rp:   lsPipeRP ]};
LSInvSLimTop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.",   NIL,     "S3BA.",   "SLimNA."],
List4["LBA.",    NIL,    "SBA.",   "SLimAB."],
NIL,
List4["LAB.",    NIL,    "SAB.",   NIL] ];
LSInvSLim: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmLSPipe.LSInvSLim",
type:  LISTn["GPInv"],
top:  LSInvSLimTop,
leftCtl: LIST["PCBusSrcPipe3Bc", "not.PCBusSrcPipe3Bc"],
in:   LISTn[List4[NIL, NIL, NIL, "SLimAB."]],
out:  LISTn[List4[NIL, NIL, NIL, "SLimNA."]],
bot:  LSConnect0Top,
rp:   lsPipeRP ]};
LSConnect0Top: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.",  NIL,     "S3BA.",   NIL],
List4["LBA.",   NIL,    "SBA.",   NIL],
NIL,
List4["LAB.",   NIL,    "SAB.",   NIL] ];
LSConnect0: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.SwitchBoxRow[
design: design,
name:  "IFUAsmLSPipe.LSConnect0",
rowType: IFUPW.cmosMet2,
topRP: lsPipeRP,
top:  LSConnect0Top,
left:  NIL,
right:  NIL,
bot:  LSConnect1Top,
botRP:  lsPipeRP ]};
LSConnect1Top: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4[ NIL,   "L3BA.",   NIL,   "S3BA."],
List4[ "LBA.",  NIL,   "SBA.",  NIL],
List4[ "LAB.",  NIL,   "SAB.",  NIL] ];
LSConnect1: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.SwitchBoxRow[
design: design,
name:  "IFUAsmLSPipe.LSConnect1",
rowType: IFUPW.cmosMet2,
topRP: lsPipeRP,
top:  LSConnect1Top,
left:  NIL,
right:  NIL,
bot:  LSMux02BTop,
botRP:  lsPipeRP ]};
LSMux02BTop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["LAB.",   "L3BA.",   "SAB.",   "S3BA."],
List4["LBA.",   NIL,   "SBA.",   NIL],
NIL,
List4["L2AB.",  "L2AB.",  "S2AB.",   "S2AB."] ];
LSMux02B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUMuxRow[
design: design,
name:  "IFUAsmLSPipe.LSMux02B",
top:  LSMux02BTop,
leftCtl:  IFUPW.Listn[
"Pipe2AdvAB",
"Pipe2KillAB",
"Pipe2CycAB"],
rightCtl:  IFUPW.Listn[
"PCLSPipeSrcHoldLastEntryBA",
"PCLSPipeSrcOldBA",
"PCLSPipeSrcRPPCnewLSBA",
"PCLSPipeSrcOffSetPCnewLSBA"],
in:  LISTn[
List4[NIL,    "L2AB.",    NIL,     "S2AB."],
List4[NIL,    GND,     NIL,     GND],
List4[NIL,    "L3AB.",    NIL,     "S3AB."],
List4["L1AB.",   NIL,    "S1AB.",   NIL],
List4["LAB.",    NIL,    "SAB.",   NIL],
List4["LBA.",    NIL,    "SBA.",   NIL],
List4["LBA.",    NIL,    "SBA.",    NIL] ],
out:  LISTn[List4["L0BAx.", "L2BAx.", "S0BAx.", "S2BAx."]],
bot:  LSLatch02BTop,
rp:   lsPipeRP ]};
LSLatch02BTop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["LAB.",    "L3BA.",    "SAB.",   "S3BA."],
List4["L1AB.",   "L3AB.",   "S1AB.",   "S3AB."],
List4["L0BAx.",   "L2BAx.",   "S0BAx.",   "S2BAx."],
List4["L2AB.",   NIL,    "S2AB.",   NIL] ];
LSLatch02B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmLSPipe.LSLatch02B",
type:   LISTn["GPLatch"],
top:  LSLatch02BTop,
leftCtl: LIST["PhB", "VBB"],
in:   LISTn[List4["L0BAx.",  "L2BAx.",   "S0BAx.",   "S2BAx."]],
out:  LISTn[List4["L0BA.",  "L2BA.",    "S0BA.",   "S2BA."]],
bot:  LSLatch13ATop,
rp:   lsPipeRP ]};
LSLatch13ATop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["LAB.",    "L3BA.",    "SAB.",   "S3BA."],
List4["L1AB.",   "L3AB.",   "S1AB.",   "S3AB."],
List4["L0BA.",   "L2BA.",   "S0BA.",    "S2BA."],
List4["L2AB.",   NIL,    "S2AB.",   NIL] ];
LSLatch13A: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmLSPipe.LSLatch13A",
type:   LISTn["GPLatch"],
top:  LSLatch13ATop,
leftCtl: LIST["PhA", "VBB"],
in:   LISTn[List4["L0BA.",  "L2BA.",    "S0BA.",   "S2BA."]],
out:  LISTn[List4["L1AB.",  "L3AB.",    "S1AB.",   "S3AB."]],
bot:  LSMux13BTop,
rp:   lsPipeRP ]};
LSMux13BTop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["LAB.",    "L3BA.",    "SAB.",   "S3BA."],
List4["L1AB.",   "L3AB.",   "S1AB.",   "S3AB."],
NIL,
List4["L2AB.",   NIL,    "S2AB.",   NIL] ];
LSMux13B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUMuxRow[
design: design,
name:  "IFUAsmLSPipe.LSMux13B",
top:  LSMux13BTop,
leftCtl:  IFUPW.Listn[
"Pipe1AdvAB",
"Pipe1KillAB",
"Pipe3FaultAB",
"Pipe3AdvAB",
"Pipe3TrapAB"],
in:  LISTn[
List4["L1AB.",   NIL,    "S1AB.",   NIL],
List4[GND,    NIL,    GND,    NIL],
List4[NIL,    "L4AB.",    NIL,     "S4AB."],
List4[NIL,    "L3AB.",    NIL,     "S3AB."],
List4[NIL,    "L3AB.",    NIL,     "S3AB."] ],
out:  LISTn[List4["L1ABx.", "L3BAx.", "S1ABx.", "S3BAx."]],
bot:  LSLatch13BTop,
rp:   lsPipeRP ]};
LSLatch13BTop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["LAB.",    "L3BA.",    "SAB.",   "S3BA."],
List4[NIL,    "L4AB.",   NIL,     "S4AB."],
List4["L1ABx.",   "L3BAx.",   "S1ABx.",   "S3BAx."],
List4["L2AB.",   NIL,    "S2AB.",   NIL] ];
LSLatch13B: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmLSPipe.LSLatch13B",
type:   LISTn["GPLatch"],
top:  LSLatch13BTop,
leftCtl: LIST["NotPipe3CycBc", "VBB"], -- same as Pipe1CycAB
in:   LISTn[List4["L1ABx.",  "L3BAx.",  "S1ABx.",  "S3BAx."]],
out:   LISTn[List4["L1BA.",  "L3BA.",  "S1BA.",   "S3BA."]],
bot:  LSLatch24ATop,
rp:   lsPipeRP ]};
LSLatch24ATop: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["LAB.",    "L3BA.",    "SAB.",   "S3BA."],
List4[NIL,    "L4AB.",   NIL,     "S4AB."],
List4["L1BA.",   "L3BA.",   "S1BA.",    "S3BA."],
List4["L2AB.",   NIL,    "S2AB.",   NIL] ];
LSLatch24A: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmLSPipe.LSLatch24A",
type:   LISTn["GPLatch"],
top:  LSLatch24ATop,
leftCtl: LIST["PhA", "VBB"],
in:   LISTn[List4["L1BA.",  "L3BA.",    "S1BA.",   "S3BA."]],
out:   LISTn[List4["L2AB.",  "L4AB.",    "S2AB.",   "S4AB."]],
bot:  LSPipeBot,
rp:   lsPipeRP ]};
LSPipeBot: LIST OF REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["LAB.",    NIL,    "SAB.",   NIL] ];
module:  Rope.ROPE ← "IFUAsmLSPipe";
LSPipe: PUBLIC IFUPW.Frame ← IFUPW.NFSFUP[module, y, LIST[
LSMux0A,
LSLatch0A,
LSDrSLim,
LSInvSLim,
LSConnect0,
LSConnect1,
LSMux02B,
LSLatch02B,
LSLatch13A,
LSMux13B,
LSLatch13B,
LSLatch24A ] ];
LSPipeCT: Commander.CommandProc =
{IFUPW.AssembleFrame[IFUAsm.RefDesign[], LSPipe, cmd ] };
Commander.Register   [proc:   LSPipeCT, key: module];
END.