IFUAsmFetchIndexing.mesa
Copyright c 1985 by Xerox Corporation. All rights reserved.
Last Edited by Curry, January 7, 1986 7:32:39 pm PST
IFUAsmFetchIndexing:
CEDAR
PROGRAM
IMPORTS Commander, IFUAsm, IFUPW
EXPORTS IFUAsm =
BEGIN
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
fetchIndexingRP:
IFUPW.RowParams ←
NEW[
IFUPW.RowParamsRec ←
[seq: TRUE, rngByte: 1, rngBit: 5]];
Four: LIST OF REF = LIST[ LIST[GND, GND, VDD, GND, GND]];
AddrB: LIST OF REF = LIST[ LIST[GND, GND, GND, "AddrB.36", "AddrB.37"]];
OpLengthAB:
LIST
OF
REF =
LIST[
LIST
[GND, GND, "OpLengthAB.0", "OpLengthAB.1", "OpLengthAB.2"] ];
RdLatchA:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmFetchIndexing.RdLatchA",
type: IFUPW.LISTn["GPLatch"],
top: NIL,
leftCtl: LIST["PhA", "VBB"],
in: LIST["FetchRdBA."],
out: LIST["RdAB." ],
bot: LtArgFormTop,
rp: fetchIndexingRP ]};
LtArgFormTop:
LIST
OF
REF =
IFUPW.LISTn[
"RdAB.",
"FetchRdBA.",
NIL ];
LtArgForm:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmFetchIndexing.LtArgForm",
top: LtArgFormTop,
rightCtl: LIST["PhA", "PhB"],
in: LIST["WtBA.", "RdAB."],
out: LIST["LtArg."],
bot: SwitchInOpLengthTop,
rp: fetchIndexingRP ]};
SwitchInOpLengthTop:
LIST
OF
REF =
IFUPW.LISTn[
"RdAB.",
"FetchRdBA.",
NIL,
"WtBA.",
"LtArg." ];
SwitchInOpLength:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmFetchIndexing.SwitchInOpLength",
rowType: IFUPW.cmosMet2,
topRP: fetchIndexingRP,
top: SwitchInOpLengthTop,
left: NIL,
right: LIST["OpLengthAB.0", "OpLengthAB.1", "OpLengthAB.2"],
bot: RtArgFormTop,
botRP: fetchIndexingRP ]};
RtArgFormTop:
LIST
OF
REF =
IFUPW.LISTn[
"RdAB.",
"FetchRdBA.",
NIL,
"WtBA.",
"LtArg.",
NIL,
GND,
VDD,
OpLengthAB ];
RtArgForm:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmFetchIndexing.RtArgForm",
top: RtArgFormTop,
rightCtl: LIST["PhA", "PhB"],
in: LIST[Four, OpLengthAB],
out: LIST["RtArg."],
bot: AdderTop,
rp: fetchIndexingRP ]};
AdderTop:
LIST
OF
REF =
IFUPW.LISTn[
"RdAB.",
"FetchRdBA.",
NIL,
"WtBA.",
"LtArg.",
"RtArg." ];
Adder:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmFetchIndexing.Adder",
type: IFUPW.LISTn["GPAdder"],
top: AdderTop,
rightCtl: LIST[GND],
in: LIST["LtArg.", "RtArg."],
out: LIST["Sum."],
bot: SwitchInAddrBTop,
rp: fetchIndexingRP ]};
SwitchInAddrBTop:
LIST
OF
REF =
IFUPW.LISTn[
"RdAB.",
"FetchRdBA.",
NIL,
"WtBA.",
NIL,
"Sum." ];
SwitchInAddrB:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmFetchIndexing.SwitchInAddrB",
rowType: IFUPW.cmosMet2,
topRP: fetchIndexingRP,
top: SwitchInAddrBTop,
left: NIL,
right: LIST["AddrB.36", "AddrB.37"],
bot: RdMuxTop,
botRP: fetchIndexingRP ]};
RdMuxTop:
LIST
OF
REF =
IFUPW.LISTn[
"RdAB.",
"FetchRdBA.",
NIL,
"WtBA.",
NIL,
"Sum.",
GND,
VDD,
AddrB ];
RdMux:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmFetchIndexing.RdMux",
top: RdMuxTop,
rightCtl: LIST["NextInstrHoldBA", "NextInstrGetBA", "NextInstrJumpBA"],
in: LIST["RdAB.", "Sum.", AddrB],
out: LIST["RdB."],
bot: RdLatchBTop,
rp: fetchIndexingRP ]};
RdLatchBTop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"FetchRdBA.",
NIL,
"WtBA.",
"RdB.",
"Sum." ];
RdLatchB:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmFetchIndexing.RdLatchB",
type: IFUPW.LISTn["GPLatch"],
top: RdLatchBTop,
leftCtl: LIST["PhB", "VBB"],
in: LIST["RdB."],
out: LIST["FetchRdBA." ],
bot: WtMuxTop,
rp: fetchIndexingRP ]};
WtMuxTop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"FetchRdBA.",
NIL,
"WtBA.",
NIL,
"Sum." ];
WtMux:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmFetchIndexing.WtMux",
top: WtMuxTop,
rightCtl: LIST["FetchWtCtlHoldBA", "FetchWtCtlIncrBA", "FetchWtCtlClearBA"],
in: LIST["WtBA.", "Sum.", GND],
out: LIST["WtA."],
bot: WtLatchATop,
rp: fetchIndexingRP ]};
WtLatchATop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"FetchRdBA.",
NIL,
"WtBA.",
"WtA." ];
WtLatchA:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmFetchIndexing.WtLatchA",
type: IFUPW.LISTn["GPLatch"],
top: WtLatchATop,
leftCtl: LIST["PhA", "VBB"],
in: LIST["WtA."],
out: LIST["FetchWtAB." ],
bot: WtLatchBTop,
rp: fetchIndexingRP ]};
WtLatchBTop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"FetchRdBA.",
"FetchWtAB.",
"WtBA.",
NIL ];
WtLatchB:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmFetchIndexing.WtLatchB",
type: IFUPW.LISTn["GPLatch"],
top: WtLatchBTop,
leftCtl: LIST["PhB", "VBB"],
in: LIST["FetchWtAB."],
out: LIST["WtBA." ],
bot: WtInvertTop,
rp: fetchIndexingRP ]};
WtInvertTop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"FetchRdBA.",
"FetchWtAB." ];
WtInvert:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmFetchIndexing.WtInvert",
type: IFUPW.LISTn["GPInv"],
top: WtInvertTop,
in: LIST["FetchWtAB."],
out: LIST["NotFetchWtAB." ],
bot: DiffAdderTop,
rp: fetchIndexingRP ]};
PassBoxTop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"FetchRdBA.",
"FetchWtAB.",
"NotFetchWtAB." ];
PassBox:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmFetchIndexing.PassBox",
rowType: IFUPW.cmosMet2,
topRP: fetchIndexingRP,
top: PassBoxTop,
left: LIST["NotDrShData", "DrShA", "DrShB", "DrShWt", "DrShRd", "DrA", "DrB"],
right: LIST["NotDrShData", "DrShA", "DrShB", "DrShWt", "DrShRd", "DrA", "DrB"],
bot: DiffAdderTop,
botRP: fetchIndexingRP ]};
DiffAdderTop:
LIST
OF
REF =
IFUPW.LISTn[
NIL,
"FetchRdBA.",
"FetchWtAB.",
"NotFetchWtAB." ];
DiffAdder:
PROC[design:
CD.Design]
RETURNS[cell:
CD.Object] = {
cell ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmFetchIndexing.DiffAdder",
type: IFUPW.LISTn["GPAdder"],
rightCtl: LIST[GND],
top: DiffAdderTop,
in: LIST["FetchRdBA.", "NotFetchWtAB."],
out: LIST["FetchDiff."],
bot: DiffAdderBot,
rp: fetchIndexingRP ]};
DiffAdderBot:
LIST
OF
REF =
IFUPW.LISTn[
"FetchDiff.",
"FetchRdBA.",
"FetchWtAB." ];
module: Rope.ROPE ← "IFUAsmFetchIndexing";
FetchIndexing:
PUBLIC
IFUPW.Frame ←
IFUPW.
NFSFUP[module, y,
LIST[
RdLatchA,
LtArgForm,
SwitchInOpLength,
RtArgForm,
Adder,
SwitchInAddrB,
RdMux,
RdLatchB,
WtMux,
WtLatchA,
WtLatchB,
WtInvert,
PassBox,
DiffAdder ],
CDOrient.rotate90 ];
FetchIndexingCT: Commander.CommandProc =
{IFUPW.AssembleFrame[IFUAsm.RefDesign[], FetchIndexing, cmd ] };
Commander.Register [proc: FetchIndexingCT, key: module];
END.