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. IFUAsmFech.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by Curry, January 24, 1986 4:47:57 pm PST 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 ] ]; 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 ]}; Rename sequencial version fo IPBus to IPBusAddr Rename sequencial version fo IPBus to IPBusAddr Fetch: PUBLIC IFUPW.Frame _ NIL; FetchPBusXsform, Ê -˜šœ™Jšœ<™J˜—š œœœœœ˜/Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜Jšœ ˜ —J™™/J˜—š œœœœœ˜/Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜J˜—š žœœ œ œœ ˜Fšœœ˜Jšœ˜Jšœ&˜&Jšœ œ ˜Jšœœ˜Jšœ˜Jšœœ˜Jšœœ˜ Jšœ˜Jšœœ˜——J˜š œœœœœ˜*Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜J˜—š ž œœ œ œœ ˜Ašœœ˜Jšœ˜Jšœ!˜!Jšœœ˜Jšœ˜Jšœ œ˜Jšœœ˜'Jšœœ˜"Jšœ˜Jšœœ˜——J˜š œœœœœ˜(Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜J˜—š ž œœ œ œœ ˜?šœœ ˜Jšœ˜Jšœ˜Jšœ˜Jšœ œ#˜1Jšœœ!˜,Jšœœ˜!Jšœ˜Jšœœ˜——J˜š œœœœœ˜*Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ ˜ J˜—š ž œœ œ œœ ˜Ašœœ˜Jšœ˜Jšœ!˜!Jšœœ˜Jšœ˜Jšœ œ˜Jšœœ˜!Jšœœ˜"Jšœ˜Jšœœ˜——J˜š œœœœœ˜1Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ ˜ J˜—š žœœ œ œœ ˜Hšœœ˜Jšœ˜Jšœ(˜(Jšœ œ ˜Jšœœ˜Jšœ˜Jšœœ%˜0Jšœœ˜ Jšœ˜Jšœœ˜——J˜š œœœœœ˜-šœ˜ Jšœœ)˜5JšœI˜I—šœ˜ JšœG˜GJšœH˜H—šœ˜ JšœG˜GJšœH˜H—šœ˜ JšœG˜GJšœI˜I—J˜—š œœœœœ˜0Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ ˜ J˜—š ž œœ œ œœ ˜Bšœœ˜Jšœ˜Jšœ"˜"Jšœœ˜Jšœ˜Jšœ œ˜ Jšœœ˜%Jšœœ˜ Jšœ˜Jšœœ˜——J˜š œœœœœ˜/Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜J˜—š žœœ œ œœ ˜Fšœœ˜Jšœ˜Jšœ&˜&Jšœ œ ˜Jšœœ˜Jšœ˜Jšœœ˜ Jšœœ˜ Jšœ˜Jšœœ˜ ——J˜š œœœœœ˜+Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ —J˜Jšœ œ˜"J˜Jšœœœ ™ š œœœ œœ œ˜9Jšœ™Jšœ˜Jšœ˜Jšœ ˜ Jšœ ˜ Jšœ ˜ Jšœ˜Jšœ ˜ Jšœ˜——™šœ ˜ Jšœœ2˜8—J˜Jšœ4˜4˜J˜—Jšœ˜—J™J™—…—F&