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