IFUSrcFech.mesa
Copyright © 1986 by Xerox Corporation. All rights reserved.
Last Edited by Curry, July 19, 1986 5:54:59 pm PDT
DIRECTORY Core, CoreFrame, CoreName, CoreXform, IFUSrc, IFUCoreData;
IFUSrcFetch: CEDAR PROGRAM
IMPORTS CoreFrame, CoreName, IFUCoreData
EXPORTS IFUSrc =
BEGIN
ROPE:  TYPE = Core.ROPE;
Interleaved in sequencial spec
IPDataxx: ROPE = " (
( IPData.00 IPData.10 IPData.20 IPData.30
 IPData.01 IPData.11 IPData.21 IPData.31 )
( IPData.02 IPData.12 IPData.22 IPData.32
 IPData.03 IPData.13 IPData.23 IPData.33 )
( IPData.04 IPData.14 IPData.24 IPData.34
 IPData.05 IPData.15 IPData.25 IPData.35 )
( IPData.06 IPData.16 IPData.26 IPData.36
 IPData.07 IPData.17 IPData.27 IPData.37 ) )";
Sequencial in interleaved spec
PCBusxx: ROPE = " (
( PCBus.00 PCBus.04 PCBus.10 PCBus.14 PCBus.20 PCBus.24 PCBus.30 PCBus.34 )
( PCBus.01 PCBus.05 PCBus.11 PCBus.15 PCBus.21 PCBus.25 PCBus.31 PCBus.35 )
( PCBus.02 PCBus.06 PCBus.12 PCBus.16 PCBus.22 PCBus.26 PCBus.32 PCBus.36 )
( PCBus.03 PCBus.07 PCBus.13 PCBus.17 PCBus.23 PCBus.27 PCBus.33 PCBus.37 ) )";
fetchAddr2ShiftBA: ROPE = " (
(GND      GND      FetchAddrBA.00  FetchAddrBA.01
FetchAddrBA.02  FetchAddrBA.03  FetchAddrBA.04  FetchAddrBA.05)
(FetchAddrBA.06  FetchAddrBA.07  FetchAddrBA.10  FetchAddrBA.11
FetchAddrBA.12  FetchAddrBA.13  FetchAddrBA.14  FetchAddrBA.15)
(FetchAddrBA.16  FetchAddrBA.17  FetchAddrBA.20  FetchAddrBA.21
FetchAddrBA.22  FetchAddrBA.23  FetchAddrBA.24  FetchAddrBA.25)
(FetchAddrBA.26  FetchAddrBA.27  FetchAddrBA.30  FetchAddrBA.31
FetchAddrBA.32  FetchAddrBA.33  FetchAddrBA.34  FetchAddrBA.35 )) ";
FetchIPDriveTop: LIST OF REF = LIST[NIL, "IPAddr.", NIL, IPDataxx ];
FetchIPDrive: PROC RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name:  "FetchIPDrive",
type:  "DpBuf",
top:  FetchIPDriveTop,
in:   LIST[fetchAddr2ShiftBA],
out:  "( IPAddr. )",
bot:  FetchShiftAddress2Top,
xform:  IFUCoreData.Sequencial48 ]};
FetchShiftAddress2Top: LIST OF REF = LIST[fetchAddr2ShiftBA, NIL, NIL, IPDataxx];
FetchShiftAddress2: PROC RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "SwitchBox",
name:  "FetchShiftAddress2",
top:  FetchShiftAddress2Top,
these don't go anywhere (offset from PCBus.36 PCBus.37 in FetchXslatePCBus)
routing in FetchIncrement gets worried if FetchIncrementTop doesn't have these
left:  "( FetchAddrBA.36 FetchAddrBA.37 )",
right:  NIL,
bot:  FetchIncrementTop,
xform:  IFUCoreData.Sequencial48 ]};
FetchIncrementTop:  LIST OF REF = LIST[NIL, "FetchAddrBA.",  NIL, IPDataxx];
FetchIncrement: PROC RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass:  "Adder",
name:   "FetchIncrement",
right:   "( GND )",
top:   FetchIncrementTop,
in:    LIST[ "FetchAddrBA.", increPCBA ],
out:   "( FetchAddrPlus4BA. )",
bot:   FetchIncrementInTop,
xform:   IFUCoreData.Sequencial48 ]};
increPCBA: ROPE =
"(GND GND GND (GND GND GND GND GND NewFetchBA GND GND ))";
FetchIncrementInTop: LIST OF REF = LIST
["FetchAddrPlus4BA.", "FetchAddrBA.", increPCBA, IPDataxx];
FetchIncrementIn: PROC RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "SwitchBox",
name:  "FetchIncrementIn",
top:  FetchIncrementInTop,
left:  "( NewFetchBA )",
right:  NIL,
bot:  FetchLatchATop,
xform:  IFUCoreData.Sequencial48 ]};
FetchLatchATop: LIST OF REF = LIST["FetchAddrPlus4BA.", "FetchAddrBA.", NIL, IPDataxx];
FetchLatchA: PROC RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name:  "FetchLatchA",
type:   "DpLatch",
top:  FetchLatchATop,
left:  "( PhA VBB   )",
in:   "( FetchAddrPlus4BA. )",
out:  "( FetchAddrAB.  )",
bot:  FetchMuxBTop,
xform:  IFUCoreData.Sequencial48 ]};
FetchMuxBTop: LIST OF REF = LIST["FetchAddrAB.", "FetchAddrBA.", NIL, IPDataxx];
FetchMuxB: PROC RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "Mux",
name:  "FetchMuxB",
top:  FetchMuxBTop,
right:  "( NextMacroGetBA NextMacroJumpBA NextMacroHoldBA )",
in:   "( FetchAddrAB. PCBus. FetchAddrAB  )",
out:  "( FetchAddrB.       )",
bot:  FetchLatchBTop,
xform:  IFUCoreData.Sequencial48 ]};
FetchLatchBTop: LIST OF REF = LIST
[NIL, "FetchAddrBA.", "FetchAddrB.", IPDataxx, NIL, "PCBus." ];
FetchLatchB: PROC RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "GPRow",
name:  "FetchLatchB",
type:   "DpLatch",
top:  FetchLatchBTop,
left:  "(PhB VBB)",
in:   "( FetchAddrB.  )",
out:  "( FetchAddrBA. )",
bot:  FetchLatchBBot,
xform:  IFUCoreData.Sequencial48 ]};
FetchLatchBBot: LIST OF REF = LIST [NIL, NIL, NIL, IPDataxx, NIL, "PCBus.", ];
Sequential to Interleaved here
FetchXslatePCBusTop: LIST OF REF = LIST[NIL, NIL, NIL, "IPData.", NIL, PCBusxx ];
FetchXslatePCBus: PROC RETURNS[cellType: Core.CellType] = {
cellType ← IFUCoreData.CellProc[
subClass: "SwitchBox",
name:  "FetchXslatePCBus",
top:  FetchXslatePCBusTop,
left:  "( PCBus.36 PCBus.37 )",
right:  NIL,
bot:  FetchAddressBot,
xform:  IFUCoreData.Interleaved48 ]};
FetchAddressBot: LIST OF REF = LIST[NIL,NIL,NIL, "IPData.", NIL,NIL,"GND", "VDD", "PCBus." ];
Fetch: PUBLIC PROC RETURNS[cellType: Core.CellType] = {
name: ROPE ← CoreName.RopeNm["IFUFetch"];
IF (cellType ← CoreFrame.ReadFrameCache[name])=NIL THEN {
cellType ← CoreFrame.NewFrameCells[
name:  name,
rec:  [first: top],
cells: LIST[
FetchIPDrive [],
FetchShiftAddress2[],
FetchIncrement[],
FetchIncrementIn[],
FetchLatchA[],
FetchMuxB[],
FetchLatchB[],
FetchXslatePCBus[]   ] ];
CoreFrame.WriteFrameCache[cellType]}};
END.