IFUAsmABCForm:
CEDAR
PROGRAM
IMPORTS Commander, IFUAsm, IFUPW
EXPORTS IFUAsm =
BEGIN
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
abcFormRP: IFUPW.RowParams = IFUPW.IFUDataColNSeq;
alpha: Rope.ROPE = "AlphaBA.";
beta: Rope.ROPE = "BetaBA.";
op47AlphaBetaBA:
LIST
OF
REF =
IFUPW.LISTn[
IFUPW.List8[GND, GND, GND, GND, "OpBA.4", "OpBA.5", "OpBA.6", "OpBA.7"],
NIL,
"AlphaBA.",
"BetaBA."];
One:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND, GND, GND, GND, VDD];
aOffset:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND, GND, "ARegOffBA.0", "ARegOffBA.1", "ARegOffBA.2"];
bOffset:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND, GND, "BRegOffBA.0", "BRegOffBA.1", "BRegOffBA.2"];
cOffset:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND, GND, "CRegOffBA.0", "CRegOffBA.1", "CRegOffBA.2"];
aSum17:
IFUPW.List =
IFUPW.List8
[GND,"ASum.1","ASum.2","ASum.3","ASum.4","ASum.5","ASum.6","ASum.7"];
bSum17:
IFUPW.List =
IFUPW.List8
[GND,"BSum.1","BSum.2","BSum.3","BSum.4","BSum.5","BSum.6","BSum.7"];
cSum17:
IFUPW.List =
IFUPW.List8
[GND,"CSum.1","CSum.2","CSum.3","CSum.4","CSum.5","CSum.6","CSum.7"];
alpha03:
IFUPW.List =
IFUPW.List8
[GND,GND,GND,GND,"AlphaBA.0","AlphaBA.1","AlphaBA.2","AlphaBA.3"];
alpha47:
IFUPW.List =
IFUPW.List8
[GND,GND,GND,GND,"AlphaBA.4","AlphaBA.5","AlphaBA.6","AlphaBA.7"];
beta03:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND,"BetaBA.0", "BetaBA.1", "BetaBA.2", "BetaBA.3"];
beta47:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND,"BetaBA.4", "BetaBA.5", "BetaBA.6", "BetaBA.7"];
op47:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND, "OpBA.4", "OpBA.5", "OpBA.6", "OpBA.7"];
cBase: IFUPW.List = IFUPW.ProcRegToList[euConstant];
aBase: IFUPW.List = IFUPW.ProcRegToList[euAux];
ABCRtSwitchingTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
op47AlphaBetaBA,
IFUPW.List4["LAB.", NIL, "SAB.", NIL] ];
ABCRtSwitching:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmABCForm.ABCRtSwitching",
rowType: IFUPW.cmosMet2,
topRP: abcFormRP,
top: ABCRtSwitchingTop,
left: NIL,
right:
LIST[
GND, VDD,
"ARegOffBA.0", "ARegOffBA.1", "ARegOffBA.2",
"BRegOffBA.0", "BRegOffBA.1", "BRegOffBA.2",
"CRegOffBA.0", "CRegOffBA.1", "CRegOffBA.2"],
bot: ABCRtArgFormTop,
botRP: abcFormRP ]};
ABCRtArgFormTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
NIL,
IFUPW.LISTn["LAB.", NIL, "SAB.", NIL],
IFUPW.LISTn[alpha, alpha, alpha, NIL],
IFUPW.LISTn[alpha03, alpha03, alpha03, NIL],
NIL,
GND,
VDD,
IFUPW.LISTn[aOffset, bOffset, cOffset, NIL],
IFUPW.LISTn[op47, op47, op47, NIL],
IFUPW.LISTn[beta, beta, beta, NIL],
IFUPW.LISTn[beta03, beta03, beta03, NIL] ];
ABCRtArgForm:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmABCForm.ABCRtArgForm",
top: ABCRtArgFormTop,
rightCtl:
LIST[
"ARegRtOp47BA", "ARegRtAlphaBA", "ARegRtAlpha03BA", "ARegRtAlpha47BA",
"ARegRtOffsetBA", "ARegRtBetaBA", "ARegRtBeta03BA", "ARegRtBeta47BA",
"BRegRtOp47BA", "BRegRtAlphaBA", "BRegRtAlpha03BA", "BRegRtAlpha47BA",
"BRegRtOffsetBA", "BRegRtBetaBA", "BRegRtBeta03BA", "BRegRtBeta47BA",
"CRegRtOp47BA", "CRegRtAlphaBA", "CRegRtAlpha03BA", "CRegRtAlpha47BA",
"CRegRtOffsetBA", "CRegRtBetaBA", "CRegRtBeta03BA", "CRegRtBeta47BA"
],
in:
LIST[
IFUPW.LISTn[aOffset, NIL, NIL, NIL],
IFUPW.LISTn[alpha, NIL, NIL, NIL],
IFUPW.LISTn[alpha03, NIL, NIL, NIL],
IFUPW.LISTn[alpha47, NIL, NIL, NIL],
IFUPW.LISTn[op47, NIL, NIL, NIL],
IFUPW.LISTn[beta, NIL, NIL, NIL],
IFUPW.LISTn[beta03, NIL, NIL, NIL],
IFUPW.LISTn[beta47, NIL, NIL, NIL],
IFUPW.LISTn[NIL, bOffset, NIL, NIL],
IFUPW.LISTn[NIL, alpha, NIL, NIL],
IFUPW.LISTn[NIL, alpha03, NIL, NIL],
IFUPW.LISTn[NIL, alpha47, NIL, NIL],
IFUPW.LISTn[NIL, op47, NIL, NIL],
IFUPW.LISTn[NIL, beta, NIL, NIL],
IFUPW.LISTn[NIL, beta03, NIL, NIL],
IFUPW.LISTn[NIL, beta47, NIL, NIL],
IFUPW.LISTn[NIL, NIL, cOffset, NIL],
IFUPW.LISTn[NIL, NIL, alpha, NIL],
IFUPW.LISTn[NIL, NIL, alpha03, NIL],
IFUPW.LISTn[NIL, NIL, alpha47, NIL],
IFUPW.LISTn[NIL, NIL, op47, NIL],
IFUPW.LISTn[NIL, NIL, beta, NIL],
IFUPW.LISTn[NIL, NIL, beta03, NIL],
IFUPW.LISTn[NIL, NIL, beta47, NIL] ],
out: LIST[ IFUPW.List4["ARt.", "BRt.", "CRt.", NIL] ],
bot: ABCLtSwitchingTop,
rp: abcFormRP ]};
ABCLtSwitchingTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
NIL,
IFUPW.List4["LAB.", NIL, "SAB.", NIL],
NIL,
NIL,
IFUPW.List4["ARt.", "BRt.", "CRt.", NIL] ];
ABCLtSwitching:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmABCForm.ABCLtSwitching",
rowType: IFUPW.cmosMet2,
topRP: abcFormRP,
top: ABCLtSwitchingTop,
left: NIL,
right: NIL,
bot: ABCLtArgFormTop,
botRP: abcFormRP ]};
ABCLtArgFormTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
NIL,
IFUPW.List4["LAB.", "LAB.", "SAB.", NIL],
IFUPW.List4["SAB.", "SAB.", "LAB.", NIL],
NIL,
IFUPW.List4["ARt.", "BRt.", "CRt.", NIL] ];
GND,
VDD,
IFUPW.LISTn[cBase, cBase, cBase, NIL],
IFUPW.LISTn[aBase, aBase, aBase, NIL],
IFUPW.LISTn[iBase, iBase, iBase, NIL],
IFUPW.LISTn[GND, GND, GND, NIL] ];
ABCLtArgForm:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmABCForm.ABCLtArgForm",
top: ABCLtArgFormTop,
rightCtl:
LIST[
"ARegLtCBaseBA", "ARegLtABaseBA", "ARegLtSBA", "ARegLtLBA", "ARegLtZeroBA",
"BRegLtCBaseBA", "BRegLtABaseBA", "BRegLtSBA", "BRegLtLBA", "BRegLtZeroBA",
"CRegLtCBaseBA", "CRegLtABaseBA", "CRegLtSBA", "CRegLtLBA", "CRegLtZeroBA"],
in:
LIST[
IFUPW.LISTn[cBase, NIL, NIL, NIL],
IFUPW.LISTn[aBase, NIL, NIL, NIL],
IFUPW.LISTn["SAB.", NIL, NIL, NIL],
IFUPW.LISTn["LAB.", NIL, NIL, NIL],
IFUPW.LISTn[GND, NIL, NIL, NIL],
IFUPW.LISTn[NIL, cBase, NIL, NIL],
IFUPW.LISTn[NIL, aBase, NIL, NIL],
IFUPW.LISTn[NIL, "LAB.", NIL, NIL],
IFUPW.LISTn[NIL, "SAB.", NIL, NIL],
IFUPW.LISTn[NIL, GND, NIL, NIL],
IFUPW.LISTn[NIL, NIL, cBase, NIL],
IFUPW.LISTn[NIL, NIL, aBase, NIL],
IFUPW.LISTn[NIL, NIL, "SAB.", NIL],
IFUPW.LISTn[NIL, NIL, "LAB.", NIL],
IFUPW.LISTn[NIL, NIL, GND, NIL] ],
out: LIST[ IFUPW.List4["ALt.", "BLt.", "CLt.", NIL ] ] ,
bot: ABCAdderTop,
rp: abcFormRP ]};
ABCAdderTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
NIL,
NIL,
NIL,
IFUPW.List4["ALt.", "BLt.", "CLt.", NIL],
IFUPW.List4["ARt.", "BRt.", "CRt.", NIL] ];
ABCAdder:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUAdderRow[
design: design,
name: "IFUAsmABCForm.ABCAdder",
rightCtl: LIST[GND, GND, GND, GND],
top: ABCAdderTop,
in:
IFUPW.LISTn[
IFUPW.List4["ALt.", "BLt.", "CLt.", "StateAB."],
IFUPW.LISTn["ARt.", "BRt.", "CRt.", One]],
out:
IFUPW.LISTn[
IFUPW.List4["ASum.", "BSum.", "CSum.", "StatePlusOneB."]],
bot: ABCMux0BTop,
sums: 4,
rp: abcFormRP ]};
blankIntrlvs: LIST[FALSE, FALSE, FALSE, TRUE],
ABCMux0BTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
IFUPW.List4["ASum.", "BSum.", "CSum.", "StatePlusOneB."],
NIL,
IFUPW.List4[NIL, NIL, NIL, "StateAB."]];
ABCMux0B:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmABCForm.ABCMux0B",
top: ABCMux0BTop,
rightCtl:
LIST[
"ARegModFullBA", "ARegModHalfBA",
"BRegModFullBA", "BRegModHalfBA",
"CRegModFullBA", "CRegModHalfBA",
"MicroCycleNextClearBA", "MicroCycleNextHoldBA", "MicroCycleNextNextBA" ],
in:
IFUPW.LISTn[
IFUPW.LISTn["ASum.", NIL, NIL, NIL],
IFUPW.LISTn[aSum17, NIL, NIL, NIL],
IFUPW.LISTn[NIL, "BSum.", NIL, NIL],
IFUPW.LISTn[NIL, bSum17, NIL, NIL],
IFUPW.LISTn[NIL, NIL, "CSum.", NIL],
IFUPW.LISTn[NIL, NIL, cSum17, NIL],
IFUPW.LISTn[NIL, NIL, NIL, GND],
IFUPW.LISTn[NIL, NIL, NIL, "StateAB."],
IFUPW.LISTn[NIL, NIL, NIL, "StatePlusOneB."] ],
out: IFUPW.LISTn[IFUPW.List4["ASumx.", "BSumx.", "CSumx.", "StateB."]],
bot: ABCLatch0BTop,
rp: abcFormRP ]};
ABCLatch0BTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
NIL,
IFUPW.List4["ASumx.", "BSumx.", "CSumx.", "StateB."],
IFUPW.List4[NIL, NIL, NIL, "StateAB."]];
ABCLatch0B:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmABCForm.ABCLatch0B",
type: IFUPW.LISTn["GPLatch"],
top: ABCLatch0BTop,
leftCtl: LIST["PhA", "VBB"],
in: IFUPW.LISTn[IFUPW.List4["ASumx.", "BSumx.", "CSumx.", "StateB."]],
out: IFUPW.LISTn[IFUPW.List4["AReg0BA.", "BReg0BA.", "CReg0BA.", "StateBA."] ],
bot: ABCFormBot,
rp: abcFormRP ]};
ABCFormBot:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
IFUPW.List4["AReg0BA.", "BReg0BA.", "CReg0BA.", "StateBA."],
NIL,
IFUPW.List4[NIL, NIL, NIL, "StateAB."]];
module: Rope.ROPE ← "IFUAsmABCForm";
ABCForm:
PUBLIC
IFUPW.Frame ←
IFUPW.
NFSFUP[module, y,
LIST[
ABCRtSwitching,
ABCRtArgForm,
ABCLtSwitching,
ABCLtArgForm,
ABCAdder,
ABCMux0B,
ABCLatch0B ] ];
ABCFormCT: Commander.CommandProc =
{IFUPW.AssembleFrame[IFUAsm.RefDesign[], ABCForm, cmd ] };
Commander.Register [proc: ABCFormCT, key: module];
END.