IFUAsmABCForm:
CEDAR
PROGRAM
IMPORTS Commander, IFUAsm, IFUPW, Rope =
BEGIN
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
abcFormSeq: BOOL ← IFUAsm.sequential;
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."];
aOffset:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND, GND, "AOff.0", "AOff.1", "AOff.2"];
bOffset:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND, GND, "BOff.0", "BOff.1", "BOff.2"];
cOffset:
IFUPW.List =
IFUPW.List8
[GND, GND, GND, GND, GND, "COff.0", "COff.1", "COff.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"];
These need to be fixed
cBase: IFUPW.List = IFUPW.ProcRegToList[euConstant];
aBase: IFUPW.List = IFUPW.ProcRegToList[euAux];
iBase: IFUPW.List = IFUPW.ProcRegToList[ifuXBus];
fpAlu: IFUPW.List = IFUPW.ProcRegToList[fpAluClear];
fpMult: IFUPW.List = IFUPW.ProcRegToList[fpMultClear];
ABCRtSwitchingTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
op47AlphaBetaBA,
IFUPW.List4["LAB.", NIL, "SAB.", NIL] ];
ABCRtSwitching:
PROC[design:
CD.Design]
RETURNS[cell:
IFUPW.ObjName] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "ABCRtSwitching",
rowType: IFUPW.cmosMet2,
topSeq: abcFormSeq,
top: ABCRtSwitchingTop,
left:
LIST[
GND, VDD,
"AOff.0", "AOff.1", "AOff.2",
"BOff.0", "BOff.1", "BOff.2",
"COff.0", "COff.1", "COff.2"],
right: NIL,
bot: ABCRtArgFormTop,
botSeq: abcFormSeq,
fixGV: TRUE ]};
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:
IFUPW.ObjName] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "ABCRtArgForm",
top: ABCRtArgFormTop,
ctl:
LIST[
"ARtOSetB", "ARtAlpB", "ARtAlp03B", "ARtAlp47B",
"ARtOp47B", "ARtBetB", "ARtBet03B", "ARtBet47B",
"BRtOSetB", "BRtAlpB", "BRtAlp03B", "BRtAlp47B",
"BRtOp47B", "BRtBetB", "BRtBet03B", "BRtBet47B",
"CRtOSetB", "CRtAlpB", "CRtAlp03B", "CRtAlp47B",
"CRtOp47B", "CRtBetB", "CRtBet03B", "CRtBet47B"
],
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,
seq: abcFormSeq,
fixGV: TRUE ]};
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:
IFUPW.ObjName] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "ABCLtSwitching",
rowType: IFUPW.cmosMet2,
topSeq: abcFormSeq,
top: ABCLtSwitchingTop,
left: NIL,
right: NIL,
bot: ABCLtArgFormTop,
botSeq: abcFormSeq,
fixGV: TRUE ]};
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:
IFUPW.ObjName] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "ABCLtArgForm",
top: ABCLtArgFormTop,
ctl:
LIST[
"ALtCBaseB", "ALtABaseB", "ALtSB", "ALtLB", "ALtIRefB", "ASumLtZB",
"BLtCBaseB", "BLtABaseB", "BLtSB", "BLtLB", "BLtIRefB", "BSumLtZB",
"CLtFPAB", "CLtFPMB", "CLtABaseB", "CLtCBaseB", "CLtZB", "CLtLB", "CLtSB", "CLtIRefB"],
in:
LIST[
IFUPW.LISTn[cBase, NIL, NIL, NIL],
IFUPW.LISTn[aBase, NIL, NIL, NIL],
IFUPW.LISTn[iBase, NIL, NIL, NIL],
IFUPW.LISTn[GND, NIL, NIL, NIL],
IFUPW.LISTn["LAB.", NIL, NIL, NIL],
IFUPW.LISTn["SAB.", NIL, NIL, NIL],
IFUPW.LISTn[NIL, cBase, NIL, NIL],
IFUPW.LISTn[NIL, aBase, NIL, NIL],
IFUPW.LISTn[NIL, iBase, NIL, NIL],
IFUPW.LISTn[NIL, GND, NIL, NIL],
IFUPW.LISTn[NIL, "LAB.", NIL, NIL],
IFUPW.LISTn[NIL, "SAB.", NIL, NIL],
IFUPW.LISTn[NIL, NIL, fpAlu, NIL],
IFUPW.LISTn[NIL, NIL, fpMult, NIL],
IFUPW.LISTn[NIL, NIL, cBase, NIL],
IFUPW.LISTn[NIL, NIL, aBase, NIL],
IFUPW.LISTn[NIL, NIL, iBase, NIL],
IFUPW.LISTn[NIL, NIL, GND, NIL],
IFUPW.LISTn[NIL, NIL, "LAB.", NIL],
IFUPW.LISTn[NIL, NIL, "SAB.", NIL] ],
out: LIST[ IFUPW.List4["ALt.", "BLt.", "CLt.", NIL ] ] ,
bot: ABCAdderTop,
seq: abcFormSeq,
fixGV: TRUE ]};
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:
IFUPW.ObjName] = {
cell ←
IFUPW.IFUAdderRow[
design: design,
name: "ABCAdder",
ctl: LIST[GND, GND, GND, NIL],
top: ABCAdderTop,
in:
IFUPW.LISTn[
IFUPW.List4["ALt.", "BLt.", "CLt.", NIL],
IFUPW.List4["ARt.", "BRt.", "CRt.", NIL]],
out:
IFUPW.LISTn[
IFUPW.List4["ASum.", "BSum.", "CSum.", NIL]],
bot: ABCMux0BTop,
sums: 4,
seq: abcFormSeq ]};
blankIntrlvs: LIST[FALSE, FALSE, FALSE, TRUE],
ABCMux0BTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
IFUPW.List4["ASum.", "BSum.", "CSum.", NIL]];
ABCMux0B:
PROC[design:
CD.Design]
RETURNS[cell:
IFUPW.ObjName] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "ABCMux0B",
top: ABCMux0BTop,
ctl:
LIST[
"AFullSumB", "AModSumB",
"BFullSumB", "BModSumB",
"CFullSumB", "CModSumB" ],
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] ],
out: IFUPW.LISTn[IFUPW.List4["ASumx.", "BSumx.", "CSumx.", NIL]],
bot: ABCLatch0BTop,
seq: abcFormSeq,
fixGV: TRUE ]};
ABCLatch0BTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
NIL,
IFUPW.List4["ASumx.", "BSumx.", "CSumx.", NIL]];
ABCLatch0B:
PROC[design:
CD.Design]
RETURNS[cell:
IFUPW.ObjName] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "ABCLatch0B",
type: IFUPW.LISTn["GPLatch"],
top: ABCLatch0BTop,
ctl: LIST["PhA"],
in: IFUPW.LISTn[IFUPW.List4["ASumx.", "BSumx.", "CSumx.", NIL]],
out: IFUPW.LISTn[IFUPW.List4["AReg0BA.", "BReg0BA.", "CReg0BA.", NIL] ],
bot: ABCFormBot,
seq: abcFormSeq ]};
ABCFormBot:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
IFUPW.List4["AReg0BA.", "BReg0BA.", "CReg0BA.", NIL] ];
newDesign: Rope.ROPE ← IFUAsm.rootName.Cat["ABCForm"];
dataColRows:
LIST
OF
IFUPW.UserProc ←
LIST[
ABCRtSwitching,
ABCRtArgForm,
ABCLtSwitching,
ABCLtArgForm,
ABCAdder,
ABCMux0B,
ABCLatch0B ];
CDAssemble:
IFUPW.UserProc=
{RETURN[IFUPW.AssembleList[design, dataColRows]]};
CTAssemble: Commander.CommandProc =
{[ ] ← IFUPW.AssembleList[IFUAsm.refDesign, dataColRows, newDesign, cmd]};
IFUAsm.RegDataColRows [procs: dataColRows, name: newDesign.Cat["Cell"]];
Commander.Register [proc: CTAssemble, key: newDesign.Cat["Cell"]];
IFUPW.Register [userProc: CDAssemble, name: newDesign.Cat["Cell"]];
END.