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:
REF ←
NIL]
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.