IFUAsmABCForm.mesa
Copyright c 1985 by Xerox Corporation. All rights reserved.
Last Edited by June 5, 1985 3:28:19 am PDT
DIRECTORY
CD,
Commander,
IFUAsm,
IFUPW,
Rope;
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.