DIRECTORY Core, CoreFrame, CoreName, CoreXform, IFUSrc, IFUCoreData; IFUSrcFetch: CEDAR PROGRAM IMPORTS CoreFrame, CoreName, IFUCoreData EXPORTS IFUSrc = BEGIN ROPE: TYPE = Core.ROPE; increPCBA: ROPE = "(GND GND GND (GND GND GND GND GND NewFetchBA GND GND ))"; 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 ) )"; 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, 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 ]}; 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 GND )", in: "( FetchAddrAB. PCBus. FetchAddrAB. NIL)", 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.", ]; 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. ΠIFUSrcFech.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Last Edited by Curry, October 20, 1986 10:56:18 pm PDT Interleaved in sequencial spec Sequencial in interleaved spec FetchShuffleIPDataTop: LIST OF REF = LIST[NIL, "IPAddr.", "IPData." ]; FetchShuffleIPData: PROC RETURNS[cellType: Core.CellType] = { cellType _ IFUCoreData.CellProc[ subClass: "SwitchBox", name: "FetchShuffleIPData", top: FetchShuffleIPDataTop, bot: FetchIPDriveTop, xform: IFUCoreData.Sequencial48 ]}; these don't go anywhere (offset from PCBus.36 PCBus.37 in FetchXslatePCBus) routing in FetchIncrement gets worried if FetchIncrementTop doesn't have these Sequential to Interleaved here FetchShuffleIPData[], Κβ˜šœ™Icodešœ Οmœ1™