IFUAsmFech.mesa
Copyright c 1985 by Xerox Corporation. All rights reserved.
Last Edited by Curry, January 24, 1986 4:47:57 pm PST
DIRECTORY
CD,
Commander,
IFUAsm,
IFUPW,
Rope;
IFUAsmFetch: CEDAR PROGRAM
IMPORTS Commander, IFUAsm, IFUPW
EXPORTS IFUAsm =
BEGIN
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
IPBusLeft: IFUPW.List = LIST
["IPBus.00","IPBus.01","IPBus.02","IPBus.03","IPBus.04","IPBus.05","IPBus.06","IPBus.07"];
IPBusRight: IFUPW.List = LIST
["IPBus.37","IPBus.36","IPBus.35","IPBus.34","IPBus.33","IPBus.32","IPBus.31","IPBus.30"];
IPBusMiddle: LIST OF REF = LIST[
LIST["IPBus.10", NIL, "IPBus.11", NIL, "IPBus.12", NIL, "IPBus.13", NIL],
LIST["IPBus.14", NIL, "IPBus.15", NIL, "IPBus.16", NIL, "IPBus.17", NIL],
LIST["IPBus.20", NIL, "IPBus.21", NIL, "IPBus.22", NIL, "IPBus.23", NIL],
LIST["IPBus.24", NIL, "IPBus.25", NIL, "IPBus.26", NIL, "IPBus.27", NIL ] ];
IPBus: LIST OF REF = LIST[
LIST[ "IPBus.00", "IPBus.10", "IPBus.20", "IPBus.30",
  "IPBus.01", "IPBus.11", "IPBus.21", "IPBus.31"],
LIST[ "IPBus.02", "IPBus.12", "IPBus.22", "IPBus.32",
  "IPBus.03", "IPBus.13", "IPBus.23", "IPBus.33"],
LIST[ "IPBus.04", "IPBus.14", "IPBus.24", "IPBus.34",
  "IPBus.05", "IPBus.15", "IPBus.25", "IPBus.35"],
LIST[ "IPBus.06", "IPBus.16", "IPBus.26", "IPBus.36",
  "IPBus.07", "IPBus.17", "IPBus.27", "IPBus.37"] ];
FetchPBusXsformTop: LIST OF REF = IFUPW.LISTn[
NIL,
NIL,
NIL,
NIL,
NIL,
NIL,
GND,
VDD,
IPBusMiddle];
FetchPBusXsform: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.SwitchBoxRow[
design: design,
name:  "IFUAsmFetch.FetchPBusXsform",
rowType: IFUPW.cmosMet2,
topRP:  IFUPW.IFUDataColSeq,
top:  FetchPBusXsformTop,
left:  IPBusLeft,
right:  IPBusRight,
bot:  FetchPBusXsformBot,
botRP:  IFUPW.IFUDataColSeq ]};
FetchPBusXsformBot: LIST OF REF = IFUPW.LISTn[
NIL,
NIL,
NIL,
IPBus,
"IPBus."];
Rename sequencial version fo IPBus to IPBusAddr
FetchIncrementTop: LIST OF REF = IFUPW.LISTn[
NIL,
NIL,
NIL,
IPBus,
"IPBus."];
FetchIncrement: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUAdderRow[
design: design,
name:  "IFUAsmFetch.FetchIncrement",
rightCtl: LIST[GND],
top:  FetchIncrementTop,
in:   IFUPW.LISTn[ "FetchAddrBA.", IncrePCBA],
out:  IFUPW.LISTn[ "FetchAddrPlus4BA."],
bot:  FetchIncrementInBot,
sums:  1,
rp:   IFUPW.IFUDataColSeq ]};
IncrePCBA: LIST OF REF = IFUPW.LISTn[
GND,
GND,
GND,
IFUPW.LISTn[GND, GND, GND, GND, GND, "IncrePCBA", GND, GND ]];
FetchIncrementInBot: LIST OF REF = IFUPW.LISTn[
"FetchAddrBA.",
IncrePCBA,
"FetchAddrPlus4BA.",
IPBus,
"IPBus." ];
Rename sequencial version fo IPBus to IPBusAddr
FetchIncrementInTop: LIST OF REF = IFUPW.LISTn[
"FetchAddrBA.",
IncrePCBA,
"FetchAddrPlus4BA.",
IPBus,
"IPBusAddr." ];
FetchIncrementIn: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.SwitchBoxRow[
design: design,
name:  "IFUAsmFetch.FetchIncrementIn",
rowType: IFUPW.cmosMet2,
topRP:  IFUPW.IFUDataColSeq,
top:  FetchIncrementInTop,
left:  LIST["IncrePCBA"],
right:  NIL,
bot:  FetchLatchATop,
botRP:  IFUPW.IFUDataColSeq ]};
FetchLatchATop: LIST OF REF = IFUPW.LISTn[
"FetchAddrBA.",
NIL,
"FetchAddrPlus4BA.",
IPBus,
"IPBusAddr."];
FetchLatchA: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmFetch.FetchLatchA",
type:   IFUPW.LISTn["GPLatch"],
top:  FetchLatchATop,
leftCtl: LIST["PhA", "VBB"],
in:   IFUPW.LISTn["FetchAddrPlus4BA."],
out:  IFUPW.LISTn["FetchAddrAB."],
bot:  FetchMuxBTop,
rp:   IFUPW.IFUDataColSeq ]};
FetchMuxBTop: LIST OF REF = IFUPW.LISTn[
"FetchAddrBA.",
"FetchAddrAB.",
NIL,
IPBus,
"IPBusAddr."];
FetchMuxB: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUMuxRow[
design: design,
name:  "IFUAsmFetch.FetchMuxB",
top:  FetchMuxBTop,
rightCtl: LIST["MacroJumpBA", "not.MacroJumpBA"],
in:   IFUPW.LISTn["PCBus.", "FetchAddrAB."],
out:  IFUPW.LISTn["FetchAddrB."],
bot:  FetchLatchBTop,
rp:   IFUPW.IFUDataColSeq ]};
FetchLatchBTop: LIST OF REF = IFUPW.LISTn[
"FetchAddrBA.",
NIL,
"FetchAddrB.",
IPBus,
"IPBusAddr.",
"PCBus."];
FetchLatchB: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmFetch.FetchLatchB",
type:   IFUPW.LISTn["GPLatch"],
top:  FetchLatchBTop,
leftCtl: LIST["PhB", "VBB"],
in:   IFUPW.LISTn["FetchAddrB."],
out:  IFUPW.LISTn["FetchAddrBA."],
bot:  FetchShiftAddress2Top,
rp:   IFUPW.IFUDataColSeq ]};
FetchShiftAddress2Top: LIST OF REF = IFUPW.LISTn[
"FetchAddrBA.",
NIL,
NIL,
IPBus,
"IPBusAddr.",
"PCBus."];
FetchShiftAddress2: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.SwitchBoxRow[
design: design,
name:  "IFUAsmFetch.FetchShiftAddress2",
rowType: IFUPW.cmosMet2,
topRP:  IFUPW.IFUDataColSeq,
top:  FetchShiftAddress2Top,
left:  LIST["FetchAddrBA.36", "FetchAddrBA.37"],
right:  NIL,
bot:  FetchFetchIPDriveTop,
botRP:  IFUPW.IFUDataColSeq ]};
fetchAddrShift2BA: LIST OF REF = IFUPW.LISTn[
IFUPW.LISTn[
GND,     GND,     "FetchAddrBA.00", "FetchAddrBA.01",
"FetchAddrBA.02", "FetchAddrBA.03", "FetchAddrBA.04", "FetchAddrBA.05"],
IFUPW.LISTn[
"FetchAddrBA.06", "FetchAddrBA.07", "FetchAddrBA.10", "FetchAddrBA.11",
"FetchAddrBA.12", "FetchAddrBA.13", "FetchAddrBA.14", "FetchAddrBA.15"],
IFUPW.LISTn[
"FetchAddrBA.16", "FetchAddrBA.17", "FetchAddrBA.20", "FetchAddrBA.21",
"FetchAddrBA.22", "FetchAddrBA.23", "FetchAddrBA.24", "FetchAddrBA.25"],
IFUPW.LISTn[
"FetchAddrBA.26", "FetchAddrBA.27", "FetchAddrBA.30", "FetchAddrBA.31",
"FetchAddrBA.32", "FetchAddrBA.33", "FetchAddrBA.34", "FetchAddrBA.35"]];
FetchFetchIPDriveTop: LIST OF REF = IFUPW.LISTn[
NIL,
NIL,
fetchAddrShift2BA,
IPBus,
"IPBusAddr.",
"PCBus."];
FetchIPDrive: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.IFUGPCellRow[
design: design,
name:  "IFUAsmFetch.FetchIPDrive",
type:  IFUPW.LISTn["GPTriDr"],
top:  FetchFetchIPDriveTop,
leftCtl: LIST["PhA", "not.PhA"],
in:   IFUPW.LISTn[fetchAddrShift2BA],
out:  IFUPW.LISTn["IPBusAddr."],
bot:  FetchXslatePCBusTop,
rp:   IFUPW.IFUDataColSeq ]};
FetchXslatePCBusTop: LIST OF REF = IFUPW.LISTn[
NIL,
NIL,
NIL,
IPBus,
NIL,
"PCBus.",
GND,
VDD];
FetchXslatePCBus: PROC[design: CD.Design] RETURNS[cell: CD.Object] = {
cell ← IFUPW.SwitchBoxRow[
design: design,
name:  "IFUAsmFetch.FetchXslatePCBus",
rowType: IFUPW.cmosMet2,
topRP:  IFUPW.IFUDataColNSeq,
top:  FetchXslatePCBusTop,
left:  NIL,
right:  NIL,
bot:  FetchAddressBot,
botRP:  IFUPW.IFUDataColNSeq ]};
FetchAddressBot: LIST OF REF = IFUPW.LISTn[
NIL,
NIL,
NIL,
"IPBus.",
NIL,
NIL,
GND,
VDD,
"PCBus."];
module: Rope.ROPE ← "IFUAsmFetch";
Fetch: PUBLIC IFUPW.Frame ← NIL;
Fetch: PUBLIC IFUPW.Frame ← IFUPW.NFSFUP[module, y, LIST[
FetchPBusXsform,
FetchIncrement,
FetchIncrementIn,
FetchLatchA,
FetchMuxB,
FetchLatchB,
FetchShiftAddress2,
FetchIPDrive,
FetchXslatePCBus ] ];
FetchCT: Commander.CommandProc =
{IFUPW.AssembleFrame[IFUAsm.RefDesign[], Fetch, cmd ] };
Commander.Register   [proc:   FetchCT, key: module];
END.