IFUAsmXaForm:
CEDAR
PROGRAM
IMPORTS Commander, IFUAsm, IFUPW
EXPORTS IFUAsm =
BEGIN
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
xaFormRP: IFUPW.RowParams = IFUPW.IFUDataColNSeq;
abgdAB: IFUPW.List = IFUPW.List4["AlphaAB.", "BetaAB.", "GammaAB.", "DeltaAB."];
opNILAB: IFUPW.List = IFUPW.List4["OpAB.", NIL, NIL, NIL];
phaseBPLAIO:
IFUPW.List =
LIST[
"OpAB.0", "OpAB.1", "OpAB.2", "OpAB.3",
"OpAB.4", "OpAB.5", "OpAB.6", "OpAB.7",
"AlphaAB.0", "AlphaAB.1", "AlphaAB.2", "AlphaAB.3",
"AlphaAB.4", "AlphaAB.5", "AlphaAB.6", "AlphaAB.7",
"BetaAB.0", "BetaAB.1", "BetaAB.2", "BetaAB.3",
"BetaAB.4", "BetaAB.5", "BetaAB.6", "BetaAB.7"];
XaSwitchTop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"PCBus.",
abgdAB,
opNILAB ];
XaSwitch:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmXaForm.XaSwitch",
rowType: IFUPW.cmosMet2,
topRP: xaFormRP,
top: XaSwitchTop,
left: NIL,
right: phaseBPLAIO,
bot: XaMux0Top,
botRP: xaFormRP ]};
XaMux0Top:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"PCBus.",
abgdAB,
IFUPW.LISTn["OpAB.", NIL, "AlphaAB.", "AlphaAB."],
IFUPW.LISTn[NIL, NIL, NIL, "BetaAB."] ];
XaMux0:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmXaForm.XaMux0",
top: XaMux0Top,
rightCtl:
LIST[
"X2ALitSourceNoneBA",
"X2ALitSourceAlphaBA",
"X2ALitSourceBetaBA",
"X2ALitSourceAlphaBetaBA",
"X2ALitSourceAlpBetGamDelBA"],
in:
IFUPW.LISTn[
IFUPW.LISTn[GND, GND, GND, GND],
IFUPW.LISTn[GND, GND, GND, "AlphaAB."],
IFUPW.LISTn[GND, GND, GND, "BetaAB."],
IFUPW.LISTn[GND, GND, "AlphaAB.", "BetaAB."],
IFUPW.LISTn["AlphaAB.", "BetaAB.", "GammaAB.", "DeltaAB."] ],
out: IFUPW.LISTn["XaPipe0B."],
bot: XaLatch0Top,
rp: xaFormRP ]};
XaLatch0Top:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"PCBus.",
abgdAB,
opNILAB,
NIL,
"XaPipe0B." ];
XaLatch0:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmXaForm.XaLatch0",
type: IFUPW.LISTn["GPLatch"],
top: XaLatch0Top,
leftCtl: LIST["NotPipe0CycBc", "VBB"],
in: IFUPW.LISTn["XaPipe0B."],
out: IFUPW.LISTn["XaPipe0BA."],
bot: XaLatch1ATop,
rp: xaFormRP ]};
XaLatch1ATop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"PCBus.",
abgdAB,
opNILAB,
"XaPipe0BA." ];
XaLatch1A:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmXaForm.XaLatch1A",
type: IFUPW.LISTn["GPLatch"],
top: XaLatch1ATop,
leftCtl: LIST["PhA", "VBB"],
in: IFUPW.LISTn["XaPipe0BA."],
out: IFUPW.LISTn["XaPipe1AB."],
bot: XaLatch1BTop,
rp: xaFormRP ]};
XaLatch1BTop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"PCBus.",
abgdAB,
opNILAB,
"XaPipe1AB." ];
XaLatch1B:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmXaForm.XaLatch1B",
type: IFUPW.LISTn["GPLatch"],
top: XaLatch1BTop,
leftCtl: LIST["NotPipe1CycBc", "VBB"],
in: IFUPW.LISTn["XaPipe1AB."],
out: IFUPW.LISTn["XaPipe1BA."],
bot: XaDrive2Top,
rp: xaFormRP ]};
XaDrive2Top:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"PCBus.",
abgdAB,
opNILAB,
"XaPipe1BA." ];
XaDrive2:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmXaForm.XaDrive2",
type: IFUPW.LISTn["GPTriDr"],
top: XaDrive2Top,
leftCtl: LIST["DrXaLev2Ac", "not.DrXaLev2Ac"],
in: IFUPW.LISTn["XaPipe1BA."],
out: IFUPW.LISTn["XBus."],
bot: XaFormBot,
rp: xaFormRP ]};
XaFormBot:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
abgdAB,
opNILAB ];
module: IFUPW.ROPE ← "IFUAsmXaForm";
XaForm:
PUBLIC
IFUPW.Frame ←
IFUPW.
NFSFUP[module, y,
LIST[
XaSwitch,
XaMux0,
XaLatch0,
XaLatch1A,
XaLatch1B,
XaDrive2 ] ];
XaFormCT: Commander.CommandProc =
{IFUPW.AssembleFrame[IFUAsm.RefDesign[], XaForm, cmd ] };
Commander.Register [proc: XaFormCT, key: module];
END.