IFUSrcXaForm:
CEDAR
PROGRAM
IMPORTS CoreFrame, CoreName, IFUCoreData
EXPORTS IFUSrc =
BEGIN
ROPE: TYPE = Core.ROPE;
notAbgdA: ROPE = "( NotAlphaA. NotBetaA. NotGammaA. NotDeltaA. )";
abgdA: ROPE = "( AlphaA. BetaA. GammaA. DeltaA. )";
abgdAB: ROPE = "( AlphaAB. BetaAB. GammaAB. DeltaAB. )";
notOpNILA: ROPE = "( NotOpA. NIL NIL NIL )";
opNILA: ROPE = "( OpA. NIL NIL NIL )";
opNILAB: ROPE = "( OpAB. NIL NIL NIL )";
phaseBPLAIO:
ROPE = "(
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 )";
XaFormTop: LIST OF REF = LIST[NIL, "PCBus.", notAbgdA, notOpNILA ];
XaPreChargeABGDB:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name: "XaPreChargeABGDB",
type: "DpPreChg",
top: XaFormTop,
left: "( NotPhB )",
out: LIST[ notAbgdA ],
bot: XaInvABGDTop,
xform: IFUCoreData.Interleaved48 ]};
XaInvABGDTop:
LIST
OF
REF =
LIST[
NIL, "PCBus.", notAbgdA, notOpNILA ];
XaInvABGD:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name: "XaInvABGD",
type: "DpInv",
top: XaInvABGDTop,
in: LIST[ notAbgdA ],
out: LIST[ abgdA ],
bot: XaLatchABGD0ATop,
xform: IFUCoreData.Interleaved48 ]};
XaLatchABGD0ATop:
LIST
OF
REF =
LIST[
NIL, "PCBus.", abgdA, notOpNILA ];
XaLatchABGD0A:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name: "XaLatchABGD0A",
type: "DpLatch",
top: XaLatchABGD0ATop,
left: "( PhA VBB )",
in: LIST[ abgdA ],
out: LIST[ abgdAB ],
bot: XaOpReceiverTop,
xform: IFUCoreData.Interleaved48 ]};
XaOpReceiverTop:
LIST
OF
REF =
LIST[
NIL, "PCBus.", abgdAB, notOpNILA ];
XaOpReceiver:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name: "XaOpReceiver",
type: "( DpLatchPreChg DpLatchInv DpLatch DpLatch)",
top: XaOpReceiverTop,
left: "( PhA VBB )",
in: "(
( NotPhB NotOpA. OpA. NIL ) ) ",
out: "(
( NotOpA. OpA. OpAB. NIL ) ) ",
bot: XaSwitchTop,
xform: IFUCoreData.Interleaved48 ]};
XaSwitchTop:
LIST
OF
REF =
LIST[
NIL,
"PCBus.",
abgdAB,
"( NotOpA. NIL NIL NIL)",
"( NIL NotOpA. OpA. NIL)",
"( NotPhB OpA. OpAB. NIL)"];
XaSwitch:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "SwitchBox",
name: "XaSwitch",
top: XaSwitchTop,
left: "( OpAB.0 OpAB.1 OpAB.2 NotPhB )",
right: phaseBPLAIO,
bot: XaMux0Top,
xform: IFUCoreData.Interleaved48 ]};
XaMux0Top:
LIST
OF
REF =
LIST[
NIL,
"PCBus.",
abgdAB,
"(OpAB. NIL AlphaAB. AlphaAB. )",
"(NIL NIL NIL BetaAB. )" ];
XaMux0B:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "Mux",
name: "XaMux0B",
top: XaMux0Top,
right: "(
X2ALitSourceNone0BA
X2ALitSourceAlphaBA
X2ALitSourceBetaBA
X2ALitSourceAlphaBetaBA
X2ALitSourceAlpBetGamDelBA )",
in: "(
( GND GND GND AlphaAB )
( GND GND GND AlphaAB. )
( GND GND GND BetaAB. )
( GND GND AlphaAB. BetaAB. )
( AlphaAB. BetaAB. GammaAB. DeltaAB. ) )" ,
out: "( XaPipe0B. )",
bot: XaLatch0Top,
xform: IFUCoreData.Interleaved48 ]};
XaLatch0Top:
LIST
OF
REF =
LIST[
NIL, "PCBus.", abgdAB, opNILAB, NIL, "XaPipe0B." ];
XaLatch0B:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name: "XaLatch0B",
type: "DpLatch",
top: XaLatch0Top,
left: "( PhB VBB )",
in: "( XaPipe0B. )",
out: "( XaPipe0BA. )",
bot: XaLatch1ATop,
xform: IFUCoreData.Interleaved48 ]};
XaLatch1ATop:
LIST
OF
REF =
LIST[
NIL, "PCBus.", abgdAB, opNILAB, "XaPipe0BA." ];
XaLatch1A:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name: "XaLatch1A",
type: "DpLatch",
top: XaLatch1ATop,
left: "( LoadStage1Ac VBB )",
in: "( XaPipe0BA. )",
out: "( XaPipe1AB. )",
bot: XaLatch1BTop,
xform: IFUCoreData.Interleaved48 ]};
XaLatch1BTop:
LIST
OF
REF =
LIST[
NIL, "PCBus.", abgdAB, opNILAB, "XaPipe1AB." ];
XaLatch1B:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name: "XaLatch1B",
type: "DpLatch",
top: XaLatch1BTop,
left: "( LoadStage1Bc VBB )",
in: "( XaPipe1AB. )",
out: "( XaPipe1BA. )",
bot: XaDrive2Top,
xform: IFUCoreData.Interleaved48 ]};
XaDrive2Top:
LIST
OF
REF =
LIST[
NIL, "PCBus.", abgdAB, opNILAB, "XaPipe1BA." ];
XaDrive2:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name: "XaDrive2",
type: "DpTriDr",
top: XaDrive2Top,
left: "( X2ASrcLit2Ac NotX2ASrcLit2Ac )",
in: "( XaPipe1BA. )",
out: "( XBus. )",
bot: XaFormBot,
xform: IFUCoreData.Interleaved48 ]};
DebugABGD:
PROC
RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name: "DebugABGD",
type: "DpDebugDr",
top: XaFormBot,
left: "( DebugABGD )",
in: LIST[ abgdAB ],
out: "( XBus. )",
bot: XaFormBot,
xform: IFUCoreData.Interleaved48 ]};
XaFormBot: LIST OF REF = LIST[ "XBus.", "PCBus.", abgdAB, opNILAB ];
XaForm:
PUBLIC
PROC
RETURNS[cellType: Core.CellType] = {
name: ROPE ← CoreName.RopeNm["IFUXaForm"];
IF (cellType ← CoreFrame.ReadFrameCache[name])=
NIL
THEN {
cellType ← CoreFrame.NewFrameCells[
name: name,
rec: [first: top],
cells:
LIST[
XaPreChargeABGDB[],
XaInvABGD[],
XaLatchABGD0A[],
XaOpReceiver[],
XaSwitch[],
XaMux0B[],
XaLatch0B[],
XaLatch1A[],
XaLatch1B[],
XaDrive2[],
DebugABGD[] ]];
CoreFrame.WriteFrameCache[cellType]}};
END.