IFUAsmLSForm:
CEDAR
PROGRAM
IMPORTS Commander, IFUAsm, IFUPW
EXPORTS IFUAsm =
BEGIN
List: TYPE = IFUPW.List;
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
lsFormRP: IFUPW.RowParams = IFUPW.IFUDataColNSeq;
List4: PROC [r0, r1, r2, r3: Rope.ROPE] RETURNS[list: IFUPW.List] = IFUPW.List4;
LISTn: PROC [r0, r1, r2, r3, r4, r5, r6, r7: REF ← NIL] RETURNS[list: LIST OF REF] = {RETURN[IFUPW.LISTn[r0, r1, r2, r3, r4, r5, r6, r7]]};
op47AlphaBetaBA:
LIST
OF
REF =
IFUPW.LISTn[
IFUPW.List8[GND, GND, GND, GND, "OpBA.4", "OpBA.5", "OpBA.6", "OpBA.7"],
NIL,
"AlphaBA.",
"BetaBA."];
LStackRdPreChargeTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
op47AlphaBetaBA, -- Op03 dropped here
NIL,
List4[NIL, NIL, NIL, "LStackWtDataA."],
List4[NIL, NIL, NIL, "LStackRdDataA."] ];
LStackRdPreCharge:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmLSForm.LStackRdPreCharge",
type: IFUPW.LISTn["GPPreChg"],
top: LStackRdPreChargeTop,
leftCtl: LIST["PhB"],
in: NIL,
out: IFUPW.LISTn[List4[NIL, NIL, NIL, "LStackRdDataA."]],
bot: LStackRdMuxTop,
rp: lsFormRP ]};
LStackRdMuxTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
op47AlphaBetaBA,
NIL,
List4[NIL, NIL, NIL, "LStackWtDataA."],
List4[NIL, NIL, NIL, "LStackRdDataA."] ];
LStackRdMux:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmLSForm.LStackRdMux",
top: LStackRdMuxTop,
rightCtl: LIST["Push3BA", "NotPush3BA"],
in:
IFUPW.LISTn[
List4[NIL, NIL, NIL, "LStackWtDataA."],
List4[NIL, NIL, NIL, "LStackRdDataA."] ],
out: IFUPW.LISTn[List4[NIL, NIL, NIL, "SelLStackRdDataA."]],
bot: LStackRdLatchATop,
rp: lsFormRP ]};
LStackRdLatchATop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
op47AlphaBetaBA,
NIL,
List4[NIL, NIL, NIL, "LStackWtDataA."],
NIL,
List4[NIL, NIL, NIL, "SelLStackRdDataA."]];
LStackRdLatchA:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmLSForm.LStackRdLatchA",
type: IFUPW.LISTn["GPLatch"],
top: LStackRdLatchATop,
leftCtl: LIST["PhA", "VBB"],
in: IFUPW.LISTn[List4[NIL, NIL, NIL, "SelLStackRdDataA."]],
out: IFUPW.LISTn[List4[NIL, NIL, NIL, "LStkTopAB."]],
bot: LStackXBusDrTop,
rp: lsFormRP ]};
LStackXBusDrTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
op47AlphaBetaBA,
NIL,
List4[NIL, NIL, NIL, "LStackWtDataA."],
NIL,
List4[NIL, NIL, NIL, "LStkTopAB."]];
LStackXBusDr:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmLSForm.LStackXBusDr",
type: IFUPW.LISTn["GPTriDr"],
top: LStackXBusDrTop,
rightCtl: LIST["X1ASrcStackPBA","NotX1ASrcStackPBA"],
in: IFUPW.LISTn[List4[NIL, NIL, NIL, "LStkTopAB."]],
out: IFUPW.LISTn[List4[NIL, NIL, NIL, "XBus."]],
bot: LStackWtBufTop,
rp: lsFormRP ]};
LStackWtBufTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
op47AlphaBetaBA,
NIL,
List4[NIL, NIL, NIL, "LStackWtDataA."],
NIL,
List4[NIL, NIL, NIL, "LStkTopAB."]];
LStackWtBuf:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmLSForm.LStackWtBuf",
type: IFUPW.LISTn["GPBuf"],
top: LStackWtBufTop,
in: IFUPW.LISTn[List4[NIL, NIL, NIL, "PreLStackWtDataA."]],
out: IFUPW.LISTn[List4[NIL, NIL, NIL, "LStackWtDataA."]],
bot: LStackWtMuxTop,
rp: lsFormRP ]};
LStackWtMuxTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
op47AlphaBetaBA,
List4[NIL, NIL, NIL, "PreLStackWtDataA."],
NIL,
NIL,
List4[NIL, NIL, NIL, "LStkTopAB."]];
LStackWtMux:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmLSForm.LStackWtMux",
top: LStackWtMuxTop,
rightCtl: LIST["X1ADstStackBA", "NotX1ADstStackBA"],
in: IFUPW.LISTn["XBus.", List4[NIL, NIL, NIL, "L3BA."]],
out: IFUPW.LISTn[List4[NIL, NIL, NIL, "PreLStackWtDataA."]],
bot: LSMuxSwitchingTop,
rp: lsFormRP ]};
LSMuxSwitchingTop:
LIST
OF
REF = LISTn[
"XBus.",
op47AlphaBetaBA,
NIL,
NIL,
List4[NIL, NIL, NIL, "L3BA."],
List4[NIL, NIL, NIL, "LStkTopAB."] ];
LSMuxSwitching:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmLSForm.LSMuxSwitching",
rowType: IFUPW.cmosMet2,
topRP: lsFormRP,
top: LSMuxSwitchingTop,
left: NIL,
right: NIL,
bot: LSArgFormMuxTop,
botRP: lsFormRP ]};
LSArgFormMuxTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.", "LStkTopAB.", NIL, NIL],
NIL,
NIL,
NIL,
GND,
VDD,
List4[NIL, "AlphaBA.", NIL, "AlphaBA."]];
LSArgFormMux:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmLSForm.LSArgFormMux",
top: LSArgFormMuxTop,
rightCtl:
LIST[
"LSourceLtLBA", "LSourceLtSBA", "LSourceLtZeroBA", "LSourceLtL3BA",
"LSourceRtZeroBA", "LSourceRtAlphaBA", "LSourceRtStackBA", "LSourceRtOneBA",
"SSourceLtSBA", "SSourceLtLBA", "SSourceLtZeroBA", "SSourceLtS3BA",
"SSourceRtDeltaSBA", "SSourceRtAlphaBA", "SSourceRtZeroBA", "SSourceRtOneBA"],
in:
IFUPW.LISTn[
List4["LAB.", NIL, NIL, NIL],
List4["SAB.", NIL, NIL, NIL],
List4[GND, NIL, NIL, NIL],
List4["L3BA.", NIL, NIL, NIL],
List4[NIL, GND, NIL, NIL],
List4[NIL, "AlphaBA.", NIL, NIL],
List4[NIL, "LStkTopAB.", NIL, NIL],
List4[NIL, VDD, NIL, NIL],
List4[NIL, NIL, "SAB.", NIL],
List4[NIL, NIL, "LAB.", NIL],
List4[NIL, NIL, GND, NIL],
List4[NIL, NIL, "S3BA.", NIL],
List4[NIL, NIL, NIL, "SDeltaB."],
List4[NIL, NIL, NIL, "AlphaBA."],
List4[NIL, NIL, NIL, GND],
List4[NIL, NIL, NIL, VDD] ],
out: LISTn[List4["LSumLtx.", "LSumRtx.", "SSumLtx.", "SSumRtx."]],
bot: LSCrossConnLSABTop,
rp: lsFormRP ]};
LSCrossConnLSABTop:
LIST
OF
REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.", NIL, "S3BA.", "SDeltaB."],
List4["LSumLtx.", "LSumRtx.", "SSumLtx.", "SSumRtx."],
List4["SAB.", NIL, "LAB.", NIL],
List4["LAB.", NIL, "SAB.", NIL] ];
LSCrossConnLSAB:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmLSForm.LSCrossConnLSAB",
rowType: IFUPW.cmosMet2,
topRP: lsFormRP,
top: LSCrossConnLSABTop,
left: NIL,
right: NIL,
bot: LSArgFormBufTop,
botRP: lsFormRP ]};
LSArgFormBufTop:
LIST
OF
REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.", NIL, "S3BA.", "SDeltaB."],
List4["LSumLtx.", "LSumRtx.", "SSumLtx.", "SSumRtx."],
NIL,
List4["LAB.", NIL, "SAB.", NIL] ];
LSArgFormBuf:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmLSForm.LSArgFormBuf",
type: LISTn["GPBuf"],
top: LSArgFormBufTop,
leftCtl: LIST[NIL],
in: LISTn[List4["LSumLtx.", "LSumRtx.", "SSumLtx.", "SSumRtx."] ],
out: LISTn[ List4["LSumLt.", "LSumRt.", "SSumLt.", "SSumRt."] ],
bot: LSPreAdderAdjustTop,
rp: lsFormRP ]};
LSPreAdderAdjustTop:
LIST
OF
REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.", NIL, "S3BA.", "SDeltaB."],
List4["LSumLt.", "LSumRt.", "SSumLt.", "SSumRt."],
NIL,
List4["LAB.", NIL, "SAB.", NIL] ];
LSPreAdderAdjust:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmLSForm.LSPreAdderAdjust",
rowType: IFUPW.cmosMet2,
topRP: lsFormRP,
top: LSPreAdderAdjustTop,
left: NIL,
right: LIST["PopSaBA", "PopSbBA", "PushScBA"],
bot: LSAdderTop,
botRP: lsFormRP ]};
LSAdderTop:
LIST
OF
REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.", NIL, "S3BA.", "SDeltaB." ],
LISTn["LSumLt.", NIL, "SSumLt.", "PopSaBA" ], -- not "PopSaBA."
LISTn["LSumRt.", NIL, "SSumRt.", "PopSbBA" ], -- not "PopSbBA."
List4["LAB.", NIL, "SAB.", NIL ] ];
LSAdder:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUAdderRow[
design: design,
name: "IFUAsmLSForm.LSAdder",
rightCtl: LIST[GND, GND, GND, "PushScBA"],
top: LSAdderTop,
in: LISTn[
LISTn["LSumLt.", "SLimNA.", "SSumLt.", "PopSaBA"], -- not "PopSaBA."
LISTn["LSumRt.", "SAB.", "SSumRt.", "PopSbBA"] ], -- not "PopSbBA."
out: LISTn[ List4["LSum.", "SLimTest.", "SSum.", "SDeltaB."]],
bot: LSPostAdderTop,
sums: 4,
rp: lsFormRP ]};
LSPostAdderTop:
LIST
OF
REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.", "SLimNA.", "S3BA.", NIL ],
List4["LSum.", "SLimTest.", "SSum.", NIL ],
NIL,
List4["LAB.", "SAB.", "SAB.", NIL ] ];
LSPostAdder:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmLSForm.LSPostAdder",
rowType: IFUPW.cmosMet2,
topRP: lsFormRP,
top: LSPostAdderTop,
left: LIST["LSum.0", "SSum.0", "SLimTest.0", "SLimTest.1","SLimTest.2","SLimTest.3"],
right: NIL, -- XXX Fix this - Signals above are not needed
bot: LSLatchBTop,
botRP: lsFormRP ]};
LSum17:
LIST
OF
REF ← LISTn
[GND,"LSum.1","LSum.2","LSum.3","LSum.4","LSum.5","LSum.6","LSum.7"];
SSum17:
LIST
OF
REF ← LISTn
[GND,"SSum.1","SSum.2","SSum.3","SSum.4","SSum.5","SSum.6","SSum.7"];
SLimTest47:
LIST
OF
REF ← LISTn
[GND,GND,GND,GND, "SLimTest.4", "SLimTest.5", "SLimTest.6","SLimTest.7"];
SLimTBA47:
LIST
OF
REF ← LISTn
[NIL,NIL,NIL,NIL, "SLimTBA.4", "SLimTBA.5", "SLimTBA.6","SLimTBA.7"];
LSLatchBTop:
LIST
OF
REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.", NIL, "S3BA.", "SLimNA."],
LISTn[LSum17, NIL, SSum17, SLimTest47],
NIL,
List4["LAB.", NIL, "SAB.", NIL] ];
LSLatchB:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmLSForm.LSLatchB",
type: LISTn["GPLatch"],
top: LSLatchBTop,
leftCtl: LIST["PhB", "VBB"],
in: LISTn[LISTn[LSum17, NIL, SSum17, SLimTest47]],
out: LISTn[LISTn["LBA.", NIL, "SBA.", SLimTBA47]],
bot: LSSwitchOutSLimitTestTop,
rp: lsFormRP ]};
LSSwitchOutSLimitTestTop:
LIST
OF
REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.", NIL, "S3BA.", "SLimNA."],
LISTn["LBA.", NIL, "SBA.", SLimTBA47],
NIL,
List4["LAB.", NIL, "SAB.", NIL] ];
LSSwitchOutSLimitTest:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmLSForm.LSSwitchOutSLimitTest",
rowType: IFUPW.cmosMet2,
topRP: lsFormRP,
top: LSSwitchOutSLimitTestTop,
left: LIST["SLimTBA.4", "SLimTBA.5", "SLimTBA.6","SLimTBA.7"],
right: NIL,
bot: LSFormBot,
botRP: lsFormRP ]};
LSFormBot:
LIST
OF
REF = LISTn[
"XBus.",
op47AlphaBetaBA,
List4["L3BA.", NIL, "S3BA.", "SLimNA."],
List4["LBA.", NIL, "SBA.", NIL],
NIL,
List4["LAB.", NIL, "SAB.", NIL] ];
module: Rope.ROPE ← "IFUAsmLSForm";
LSForm:
PUBLIC
IFUPW.Frame ←
IFUPW.
NFSFUP[module, y,
LIST[
LStackRdPreCharge,
LStackRdMux,
LStackRdLatchA,
LStackXBusDr,
LStackWtBuf,
LStackWtMux,
LSMuxSwitching,
LSArgFormMux,
LSCrossConnLSAB,
LSArgFormBuf,
LSPreAdderAdjust,
LSAdder,
LSPostAdder,
LSLatchB,
LSSwitchOutSLimitTest ] ];
LSFormCT: Commander.CommandProc =
{IFUPW.AssembleFrame[IFUAsm.RefDesign[], LSForm, cmd ] };
Commander.Register [proc: LSFormCT, key: module];
END.