<> <> <> <<>> <<>> 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; <> <> <> <> <> <> <> 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"] ]; <> <> <> <> <> <> <> <> <> <> <<>> <> <> <> <> <> <> <> <> <> <> <> FetchPBusXsformBot: LIST OF REF = IFUPW.LISTn[ NIL, NIL, NIL, IPBus, "IPBus."]; <<>> <> 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." ]; <<>> <> 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 _ IFUPW.NFSFUP[module, y, LIST[ <> FetchIncrement, FetchIncrementIn, FetchLatchA, FetchMuxB, FetchLatchB, FetchShiftAddress2, FetchIPDrive, FetchXslatePCBus ] ]; <<>> FetchCT: Commander.CommandProc = {IFUPW.AssembleFrame[IFUAsm.RefDesign[], Fetch, cmd ] }; Commander.Register [proc: FetchCT, key: module]; END. <<>> <<>>