IFUAsmPCFormTop:
CEDAR
PROGRAM
IMPORTS Commander, IFUAsm, IFUPW
EXPORTS IFUAsm =
BEGIN
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
pcTopRP: IFUPW.RowParams = IFUPW.IFUDataColNSeq;
LIST8:
PUBLIC
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]]};
LIST6:
PUBLIC
PROC [r0, r1, r2, r3, r4, r5:
REF ←
NIL ]
RETURNS[list:
LIST
OF
REF] =
{RETURN[IFUPW.LISTn[r0, r1, r2, r3, r4, r5]]};
abgdAB: IFUPW.List = IFUPW.List4["AlphaAB.", "BetaAB.", "GammaAB.", "DeltaAB."];
opNILAB: IFUPW.List = IFUPW.List4["OpAB.", NIL, NIL, NIL];
XopSetupOpTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
opNILAB ];
XopSetupOp:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmPCFormTop.XopSetupOp",
rowType: IFUPW.cmosMet2,
topRP: pcTopRP,
top: XopSetupOpTop,
left: NIL,
right: LIST["UserMode0AB"],
bot: XopSetupOpTop,
botRP: pcTopRP ]};
XopGenRowTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
LIST6["OpAB.",
NIL,
IFUPW.List8[ NIL, NIL, NIL,"UserMode0AB", "OpAB.0", "OpAB.1", "OpAB.2", "OpAB.3"],
IFUPW.List8["OpAB.4", "OpAB.5", "OpAB.6", "OpAB.7", NIL, NIL, NIL, NIL] ] ];
XopGenRow:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.XopGenRow",
type: LIST6["GPTriDr"],
top: XopGenRowTop,
rightCtl: IFUPW.Listn["PCBusSrcXopGenBc", "not.PCBusSrcXopGenBc"],
in: LIST6[ LIST6[
GND,
GND,
IFUPW.List8[GND,GND,GND,"UserMode0AB", "OpAB.0", "OpAB.1", "OpAB.2", "OpAB.3"],
IFUPW.List8["OpAB.4", "OpAB.5", "OpAB.6", "OpAB.7", GND,GND,GND,GND] ] ],
out: LIST6["PCBus."],
bot: TrapSetup0Top,
rp: pcTopRP ]};
TrapSetup0Top:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
opNILAB];
TrapSetup0:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmPCFormTop.TrapSetup0",
rowType: IFUPW.cmosMet2,
topRP: pcTopRP,
top: TrapSetup0Top,
left: NIL,
right:
LIST[
"DPFaultB.0", "DPFaultB.1", "DPFaultB.2", "DPFaultB.3",
"EUCondSel2AB.0", "EUCondSel2AB.1", "EUCondSel2AB.2", "EUCondSel2AB.3"],
bot: TrapLatch0Top,
botRP: pcTopRP ]};
TrapLatch0Top:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
LIST6["OpAB.",
LIST6[ "DPFaultB.0", "DPFaultB.1", "DPFaultB.2", "DPFaultB.3"],
LIST6[ "EUCondSel2AB.0", "EUCondSel2AB.1", "EUCondSel2AB.2", "EUCondSel2AB.3"],
NIL ] ];
TrapLatch0:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.TrapLatch0",
type: LIST6["GPLatch"],
top: TrapLatch0Top,
leftCtl: IFUPW.Listn["PhB", "VBB"],
in: LIST6[
LIST6[
NIL,
LIST6[ "DPFaultB.0", "DPFaultB.1", "DPFaultB.2", "DPFaultB.3"],
LIST6[ "EUCondSel2AB.0", "EUCondSel2AB.1", "EUCondSel2AB.2", "EUCondSel2AB.3"],
NIL ] ],
out: LIST6[
LIST6[
NIL,
LIST6[ "DPFaultBA.0", "DPFaultBA.1", "DPFaultBA.2", "DPFaultBA.3"],
LIST6[ "EUCondSel2BA.0", "EUCondSel2BA.1", "EUCondSel2BA.2", "EUCondSel2BA.3"],
NIL ] ],
bot: TrapSetup1Top,
rp: pcTopRP ]};
TrapSetup1Top:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
LIST6[
"OpAB.",
LIST6[ "DPFaultBA.0", "DPFaultBA.1", "DPFaultBA.2", "DPFaultBA.3"],
LIST6[ "EUCondSel2BA.0", "EUCondSel2BA.1", "EUCondSel2BA.2", "EUCondSel2BA.3"],
NIL ] ];
TrapSetup1:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmPCFormTop.TrapSetup1",
rowType: IFUPW.cmosMet2,
topRP: pcTopRP,
top: TrapSetup1Top,
left: LIST["ExceptCodeAB.4", "ExceptCodeAB.5", "ExceptCodeAB.6","ExceptCodeAB.7"],
right: NIL,
bot: TrapMux1Top,
botRP: pcTopRP ]};
TrapMux1Top:
LIST
OF
REF =
LIST[
"XBus.",
"PCBus.",
abgdAB,
LIST6[
"OpAB.",
NIL,
NIL,
LIST6[ "DPFaultBA.0", "DPFaultBA.1", "DPFaultBA.2", "DPFaultBA.3"] ],
NIL,
LIST6[
NIL,
NIL,
NIL,
LIST6[ "EUCondSel2BA.0", "EUCondSel2BA.1", "EUCondSel2BA.2", "EUCondSel2BA.3"] ],
GND,
VDD,
LIST6[
NIL,
NIL,
NIL,
LIST6[ "ExceptCodeAB.4", "ExceptCodeAB.5", "ExceptCodeAB.6","ExceptCodeAB.7"] ] ];
TrapMux1:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmPCFormTop.TrapMux1",
top: TrapMux1Top,
leftCtl: IFUPW.Listn["NotExceptCodeAB.1", "ExceptCodeAB.2", "not.ExceptCodeAB.3"],
in: LIST6[
LIST6[
GND,
GND,
IFUPW.List8[ GND, GND, GND, GND, GND, GND, GND, GND ],
IFUPW.List8[ "ExceptCodeAB.4", "ExceptCodeAB.5", "ExceptCodeAB.6","ExceptCodeAB.7", GND, GND, GND, GND] ],
LIST6[
GND,
GND,
IFUPW.List8[ GND, GND, GND, GND, GND, GND, VDD, GND ],
IFUPW.List8[ "DPFaultBA.0", "DPFaultBA.1", "DPFaultBA.2", "DPFaultBA.3", GND, GND, GND, GND] ],
LIST6[
GND,
GND,
IFUPW.List8[ GND, GND, GND, GND, GND, GND, GND, VDD ],
IFUPW.List8[ "EUCondSel2BA.0", "EUCondSel2BA.1", "EUCondSel2BA.2", "EUCondSel2BA.3", GND, GND, GND, GND] ] ],
out: LIST6["TrapPCA."],
bot: TrapLatch1Top,
rp: pcTopRP ]};
TrapLatch1Top:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
opNILAB,
"TrapPCA."];
TrapLatch1:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.TrapLatch1",
type: LIST6["GPLatch"],
top: TrapLatch1Top,
leftCtl: IFUPW.Listn["PhA", "VBB"],
in: LIST6["TrapPCA."],
out: LIST6["TrapPCAB."],
bot: TrapDrivePCBusTop,
rp: pcTopRP ]};
TrapDrivePCBusTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
opNILAB,
"TrapPCAB." ];
TrapDrivePCBus:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.TrapDrivePCBus",
type: LIST6["GPTriDr"],
top: TrapDrivePCBusTop,
rightCtl: IFUPW.Listn["PCBusSrcTrapGenBc", "not.PCBusSrcTrapGenBc"],
in: LIST6["TrapPCAB."],
out: LIST6["PCBus."],
bot: ABGDDrivePCBusTop,
rp: pcTopRP ]};
ABGDDrivePCBusTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
opNILAB ];
ABGDDrivePCBus:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.ABGDDrivePCBus",
type: LIST6["GPTriDr"],
top: ABGDDrivePCBusTop,
rightCtl: IFUPW.Listn["PCBusSrcAlpBetGamDelBc", "not.PCBusSrcAlpBetGamDelBc"],
in: LIST6[abgdAB],
out: LIST6["PCBus."],
bot: XABTop,
rp: pcTopRP ]};
XABTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
opNILAB];
XAB:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.XAB",
type: LIST6["GPLatch"],
top: XABTop,
leftCtl: IFUPW.Listn["PhA", "VBB"],
in: LIST6["XBus."],
out: LIST6["XAB."],
bot: XABDrivePCBusTop,
rp: pcTopRP ]};
XABDrivePCBusTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
opNILAB,
"XAB." ];
XABDrivePCBus:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.XABDrivePCBus",
type: LIST6["GPTriDr"],
top: XABDrivePCBusTop,
rightCtl: IFUPW.Listn["PCBusSrcXaBc", "not.PCBusSrcXaBc"],
in: LIST6["XAB."],
out: LIST6["PCBus."],
bot: BranchOffsetSetupTop,
rp: pcTopRP ]};
BranchOffsetSetupTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
abgdAB,
opNILAB,
"XAB." ];
BranchOffsetSetup:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmPCFormTop.BranchOffsetSetup",
rowType: IFUPW.cmosMet2,
topRP: pcTopRP,
top: BranchOffsetSetupTop,
left: NIL,
right: NIL,
bot: BranchOffsetMuxTop,
botRP: pcTopRP ]};
LISTOpAlphaBetaAB: LIST OF REF = LIST6["OpAB.", NIL, "AlphaAB.", "BetaAB."];
LISTOpAlphaBetaBA: LIST OF REF = LIST6["OpBA.", NIL, "AlphaBA.", "BetaBA."];
alphaSign: IFUPW.List = IFUPW.List8["AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7", "AlphaAB.7"];
betaSign: IFUPW.List = IFUPW.List8["BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7", "BetaAB.7"];
signedAlpBet: LIST OF REF = LIST6[alphaSign, alphaSign, "AlphaAB.", "BetaAB."];
signedAlpha: LIST OF REF = LIST6[alphaSign, alphaSign, alphaSign, "AlphaAB."];
signedBeta: LIST OF REF = LIST6[betaSign, betaSign, betaSign, "BetaAB."];
BranchOffsetMuxTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
abgdAB,
LISTOpAlphaBetaAB,
"XAB.",
NIL,
GND,
VDD,
signedAlpha,
signedBeta ];
BranchOffsetMux:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmPCFormTop.BranchOffsetMux",
top: BranchOffsetMuxTop,
leftCtl: LIST["PCBrAlphaA","PCBrBetaA","PCBrAlphaBetaA","PCBrABGDA","PCBrXaA"],
in: LIST6[
signedAlpha,
signedBeta,
signedAlpBet,
abgdAB,
"XAB."],
out: LIST6["PCBranchOSetA."],
bot: BranchOffsetLatchTop,
rp: pcTopRP ]};
BranchOffsetLatchTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
NIL,
LISTOpAlphaBetaAB,
NIL,
"PCBranchOSetA."];
BranchOffsetLatch:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.BranchOffsetLatch",
type: LIST6["GPLatch"],
top: BranchOffsetLatchTop,
leftCtl: IFUPW.Listn["PhA", "VBB"],
in: LIST6["PCBranchOSetA."],
out: LIST6["PCBranchOSetAB."],
bot: BranchPhaseMuxTop,
rp: pcTopRP ]};
oplength:
LIST
OF
REF = LIST6[
GND,
GND,
GND,
IFUPW.List8[GND, GND, GND, GND, GND, "OpLengthBA.0", "OpLengthBA.1", "OpLengthBA.2"]];
BranchPhaseMuxTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranchOSetAB.",
LISTOpAlphaBetaAB];
BranchPhaseMux:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmPCFormTop.BranchPhaseMux",
top: BranchPhaseMuxTop,
leftCtl: IFUPW.Listn["PhA", "PhB"],
in: LIST6[oplength, "PCBranchOSetAB." ],
out: LIST6["PCBranch."],
bot: BranchBufferTop,
rp: pcTopRP ]};
BranchBufferTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranch.",
LISTOpAlphaBetaAB,
oplength];
BranchBuffer:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.BranchBuffer",
type: LIST6["GPBuf"],
top: BranchBufferTop,
leftCtl: NIL,
in: LIST6["PCBranch."],
out: LIST6["PCBranchBuf."],
bot: OpLengthBranchSetupTop,
rp: pcTopRP ]};
OpLengthBranchSetupTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranchBuf.",
LISTOpAlphaBetaAB,
oplength ];
OpLengthBranchSetup:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmPCFormTop.OpLengthBranchSetup",
rowType: IFUPW.cmosMet2,
topRP: pcTopRP,
top: OpLengthBranchSetupTop,
left: LIST["OpLengthBA.0", "OpLengthBA.1", "OpLengthBA.2"],
right: NIL,
bot: OpAlphaBetaLatchTop,
botRP: pcTopRP ]};
OpAlphaBetaLatchTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranchBuf.",
LISTOpAlphaBetaAB];
OpAlphaBetaLatch:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.OpAlphaBetaLatch",
type: LIST6["GPLatch"],
top: OpAlphaBetaLatchTop,
leftCtl: IFUPW.Listn["PhB", "VBB"],
in: LIST6[LISTOpAlphaBetaAB],
out: LIST6[LISTOpAlphaBetaBA],
bot: NPCLatchTop,
rp: pcTopRP ]};
NPCLatchTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranchBuf.",
LISTOpAlphaBetaBA];
NPCLatch:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.NPCLatch",
type: LIST6["GPLatch"],
top: NPCLatchTop,
leftCtl: IFUPW.Listn["PhB", "VBB"],
in: LIST6["PCBus."],
out: LIST6["NPCBA."],
bot: PCABMuxTop,
rp: pcTopRP ]};
PCABMuxTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranchBuf.",
LISTOpAlphaBetaBA,
NIL,
"NPCBA."];
PCABMux:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmPCFormTop.PCABMux",
top: PCABMuxTop,
rightCtl: IFUPW.Listn["PCNextIncrBA", "PCNextFromPCBusBA"],
in: LIST6["SumA.", "NPCBA."],
out: LIST6["PCA."],
bot: PCABLatchTop,
rp: pcTopRP ]};
PCABLatchTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranchBuf.",
LISTOpAlphaBetaBA,
"PCA.",
"SumA."];
PCABLatch:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.PCABLatch",
type: LIST6["GPLatch"],
top: PCABLatchTop,
leftCtl: IFUPW.Listn["PhA", "VBB"],
in: LIST6["PCA."],
out: LIST6["PCAB."],
bot: PCDrivePCBusTop,
rp: pcTopRP ]};
PCDrivePCBusTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranchBuf.",
LISTOpAlphaBetaBA,
"PCAB.",
"SumA."];
PCDrivePCBus:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.PCDrivePCBus",
type: LIST6["GPTriDr"],
top: PCDrivePCBusTop,
rightCtl: IFUPW.Listn["PCBusSrcPCBc", "not.PCBusSrcPCBc"],
in: LIST6["PCAB."],
out: LIST6["PCBus."],
bot: PCBALatchTop,
rp: pcTopRP ]};
PCBALatchTop:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranchBuf.",
LISTOpAlphaBetaBA,
"PCAB.",
"SumA."];
PCBALatch:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormTop.PCBALatch",
type: LIST6["GPLatch"],
top: PCBALatchTop,
leftCtl: IFUPW.Listn["PhA", "VBB"],
in: LIST6["PCAB."],
out: LIST6["PCBA."],
bot: PCFormBot,
rp: pcTopRP ]};
PCFormBot:
LIST
OF
REF = LIST6[
"XBus.",
"PCBus.",
"PCBranchBuf.",
LISTOpAlphaBetaBA,
"PCBA.",
"SumA."];
module: Rope.ROPE ← "IFUAsmPCFormTop";
PCFormTop:
PUBLIC
IFUPW.Frame ←
IFUPW.
NFSFUP[module, y,
LIST[
XopSetupOp,
XopGenRow,
TrapSetup0,
TrapLatch0,
TrapSetup1,
TrapMux1,
TrapLatch1,
TrapDrivePCBus,
ABGDDrivePCBus,
XAB,
XABDrivePCBus,
BranchOffsetSetup,
BranchOffsetMux,
BranchOffsetLatch,
BranchPhaseMux,
BranchBuffer,
OpLengthBranchSetup,
OpAlphaBetaLatch,
NPCLatch,
PCABMux,
PCABLatch,
PCDrivePCBus,
PCBALatch ] ];
PCFormTopCT: Commander.CommandProc =
{IFUPW.AssembleFrame[IFUAsm.RefDesign[], PCFormTop, cmd ] };
Commander.Register [proc: PCFormTopCT, key: module];
END.