DIRECTORY CD, Commander, IFUAsm, IFUPW, Rope; IFUAsmFP: CEDAR PROGRAM IMPORTS Commander, IFUAsm, IFUPW, Rope = BEGIN GND: Rope.ROPE = IFUPW.GND; VDD: Rope.ROPE = IFUPW.VDD; fpSeq: BOOL _ IFUAsm.fpSequential; LISTn: PROC[r0, r1, r2, r3, r4, r5, r6: REF _ NIL] RETURNS[list: LIST OF REF] = {RETURN[IFUPW.LISTn[r0, r1, r2, r3, r4, r5, r6]]}; FPModeTop: LIST OF REF = LISTn[ "XBus."]; FPModeAluMuxFromXBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmFP.FPModeAluMuxFromXBus", top: FPModeTop, ctl: LIST["WtFPModeAluBA", "WtFPModeAluBA'"], in: LISTn[ "XBus.", LISTn[NIL, NIL, "FPModeAluAB0.", "FPModeAluAB1."]], out: LISTn[LISTn[NIL, NIL, "FPModeAluABx0.", "FPModeAluABx1."]], bot: FPModeShiftUpTop, seq: fpSeq, fixGV: TRUE ]}; FPModeShiftUpTop: LIST OF REF = LISTn[ "XBus.", LISTn[NIL, NIL, "FPModeAluAB0.", "FPModeAluAB1."], LISTn[NIL, NIL, "FPModeAluABx0.", "FPModeAluABx1."] ]; FPModeShiftUp: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmFP.FPModeShiftUp", rowType: IFUPW.cmosMet2, topSeq: fpSeq, top: FPModeShiftUpTop, left: NIL, right: NIL, bot: FPModeMultMuxFromXBusTop, botSeq: fpSeq, fixGV: TRUE ]}; FPModeMultMuxFromXBusTop: LIST OF REF = LISTn[ "XBus.", LISTn["FPModeAluAB0.", "FPModeAluAB1.", NIL, NIL], LISTn["FPModeAluABx0.", "FPModeAluABx1.", NIL, NIL] ]; FPModeMultMuxFromXBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmFP.FPModeMultMuxFromXBus", top: FPModeMultMuxFromXBusTop, ctl: LIST["WtFPModeMultBA", "WtFPModeMultBA'"], in: LISTn[ "XBus.", LISTn[NIL, NIL, "FPModeMultAB0.", "FPModeMultAB1."]], out: LISTn[LISTn[NIL, NIL, "FPModeMultABx0.", "FPModeMultABx1."]], bot: FPModeLatchATop, seq: fpSeq, fixGV: TRUE ]}; FPModeLatchATop: LIST OF REF = LISTn[ "XBus.", LIST["FPModeAluAB0.", "FPModeAluAB1.", "FPModeMultAB0.", "FPModeMultAB1."], LIST["FPModeAluABx0.", "FPModeAluABx1.", "FPModeMultABx0.", "FPModeMultABx1."] ]; FPModeLatchA: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmFP.FPModeLatchA", type: LISTn["GPLatch"], leftCtl: LIST["PhA", "VBB"], top: FPModeLatchATop, in: LISTn[ LISTn[ "FPModeAluABx0.", "FPModeAluABx1.", "FPModeMultABx0.", "FPModeMultABx1."]], out: LISTn[ LISTn[ "FPModeAluAB0.", "FPModeAluAB1.", "FPModeMultAB0.", "FPModeMultAB1."]], bot: FPModeLatchBTop, seq: fpSeq ]}; FPModeLatchBTop: LIST OF REF = LISTn[ "XBus.", LIST["FPModeAluAB0.", "FPModeAluAB1.", "FPModeMultAB0.", "FPModeMultAB1."] ]; FPModeLatchB: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmFP.FPModeLatchB", type: LISTn["GPLatch"], leftCtl: LIST["PhB", "VBB"], top: FPModeLatchBTop, in: LISTn[LISTn[ "FPModeAluAB0.", "FPModeAluAB1.", "FPModeMultAB0.", "FPModeMultAB1."]], out: LISTn[LISTn[ "FPModeAluBA0.", "FPModeAluBA1.", "FPModeMultBA0.", "FPModeMultBA1."]], bot: FPModeMultTriDrTop, seq: fpSeq ]}; FPModeMultTriDrTop: LIST OF REF = LISTn[ "XBus.", LIST["FPModeAluBA0.", "FPModeAluBA1.", "FPModeMultBA0.", "FPModeMultBA1."] ]; FPModeMultTriDr: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmFP.FPModeMultTriDr", type: LISTn["GPTriDr"], leftCtl: LIST["WtFPModeMultBA", "WtFPModeMultBA'"], top: FPModeMultTriDrTop, in: LISTn[LISTn[GND, GND, "FPModeMultBA0.", "FPModeMultBA1."]], out: LISTn["XBus."], bot: FPModeShiftDownTop, seq: fpSeq ]}; FPModeShiftDownTop: LIST OF REF = LISTn[ "XBus.", LISTn["FPModeAluBA0.", "FPModeAluBA1.", NIL, NIL] ]; FPModeShiftDown: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmFP.FPModeShiftDown", rowType: IFUPW.cmosMet2, topSeq: fpSeq, top: FPModeShiftDownTop, left: NIL, right: NIL, bot: FPModeAluTriDrTop, botSeq: fpSeq, fixGV: TRUE ]}; FPModeAluTriDrTop: LIST OF REF = LISTn[ "XBus.", LISTn[NIL, NIL, "FPModeAluBA0.", "FPModeAluBA1."] ]; FPModeAluTriDr: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmFP.FPModeAluTriDr", type: LISTn["GPTriDr"], leftCtl: LIST["WtFPModeAluBA", "WtFPModeAluBA'"], top: FPModeAluTriDrTop, in: LISTn[LISTn[ GND, GND, "FPModeAluBA0.", "FPModeAluBA1."]], out: LISTn["XBus."], bot: FPModeBottom, seq: fpSeq ]}; FPModeBottom: LIST OF REF = LISTn[ "XBus."]; FPMaskFlagMuxFromXBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmFP.FPMaskFlagMuxFromXBus", top: FPModeBottom, ctl: LIST["WtFPMaskFlagBA", "WtFPMaskFlagBA'"], in: LISTn[ "XBus.", LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."] ], out: LISTn[ LISTn["FPMaskA.0.", "FPMaskA.1.", "FPFlagA.0.", "FPFlagA.1."]], bot: FPMaskFlagLatchATop, seq: fpSeq, fixGV: TRUE ]}; FPMaskFlagLatchATop: LIST OF REF = LISTn[ "XBus.", LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."], LISTn["FPMaskAB.0.", "FPMaskAB.1.", NIL, NIL], LISTn["FPMaskA.0.", "FPMaskA.1.", "FPFlagA.0.", "FPFlagA.1."] ]; FPMaskFlagLatchA: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmFP.FPMaskFlagLatchA", type: LISTn["GPLatch"], leftCtl: LIST["PhA", "VBB"], top: FPMaskFlagLatchATop, in: LISTn[ LISTn["FPMaskA.0.", "FPMaskA.1.", "FPFlagA.0.", "FPFlagA.1."] ], out: LISTn[ LISTn["FPMaskAB.0.", "FPMaskAB.1.", "FPFlagAB.0.", "FPFlagAB.1."]], bot: FPMaskFlagDecodeStatusTop, seq: fpSeq ]}; FPMaskFlagDecodeStatusTop: LIST OF REF = LISTn[ "XBus.", LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."], LISTn["FPMaskAB.0.", "FPMaskAB.1.", NIL, NIL], NIL, LISTn[NIL, NIL, "FPFlagAB.0.", "FPFlagAB.1."] ]; vals: REF IFUPW.ValArray _ NEW[IFUPW.ValArray _ [ [0, 1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15], [0, 1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15] ] ]; FPMaskFlagDecodeStatus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUDecoderRow[ design: design, name: "IFUAsmFP.FPMaskFlagDecodeStatus", top: FPMaskFlagDecodeStatusTop, leftCtl: LIST[ "EPFaultB.0", "EPFaultB.0'", "EPFaultB.1", "EPFaultB.1'", "EPFaultB.2", "EPFaultB.2'", "EPFaultB.3", "EPFaultB.3'"], val: vals, out: LISTn[ LISTn["MaskFltIdxB.0.", "MaskFltIdxB.1.", "FlagFltIdxB.0.", "FlagFltIdxB.1."]], bot: FPMaskFlagGateTop, seq: fpSeq ]}; FPMaskFlagGateTop: LIST OF REF = LISTn[ "XBus.", LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."], LISTn["FPMaskAB.0.", "FPMaskAB.1.", NIL, NIL], LISTn["MaskFltIdxB.0.", "MaskFltIdxB.1.", "FlagFltIdxB.0.", "FlagFltIdxB.1."], LISTn[NIL, NIL, "FPFlagAB.0.", "FPFlagAB.1."]]; FPMaskFlagGate: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmFP.FPMaskFlagGate", type: LISTn[LISTn["GPNand", "GPNand", "GPNor", "GPNor"]], leftCtl: NIL, top: FPMaskFlagGateTop, in: LISTn[ LISTn["MaskFltIdxB.0.", "MaskFltIdxB.1.", "FlagFltIdxB.0.", "FlagFltIdxB.1."], LISTn["FPMaskInvAB.0.", "FPMaskInvAB.1.", "FPFlagAB.0.", "FPFlagAB.1."]], out: LISTn[ LISTn["FPNFaultB.0.", "FPNFaultB.1.", "FPFlagInvB.0.", "FPFlagInvB.1."]], bot: FPMaskFlagInvTop, seq: fpSeq ]}; FPMaskFlagInvTop: LIST OF REF = LISTn[ "XBus.", LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."], LISTn["FPMaskAB.0.", "FPMaskAB.1.", NIL, NIL], LISTn["FPNFaultB.0.", "FPNFaultB.1.", "FPFlagInvB.0.", "FPFlagInvB.1."], LISTn[NIL, NIL, "FPFlagAB.0.", "FPFlagAB.1."], LISTn["FPMaskInvAB.0.", "FPMaskInvAB.1.", NIL, NIL] ]; FPMaskFlagInv: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmFP.FPMaskFlagInv", type: LISTn["GPInv"], leftCtl: NIL, top: FPMaskFlagInvTop, in: LISTn[LISTn ["FPMaskAB.0.", "FPMaskAB.1.", "FPFlagInvB.0.", "FPFlagInvB.1."]], out: LISTn[LISTn ["FPMaskInvAB.0.", "FPMaskInvAB.1.", "FPFlagB.0.", "FPFlagB.1."]], bot: FPMaskFlagMuxBTop, seq: fpSeq ]}; FPMaskFlagMuxBTop: LIST OF REF = LISTn[ "XBus.", LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."], LISTn["FPMaskAB.0.", "FPMaskAB.1.", NIL, NIL], LISTn["FPNFaultB.0.", "FPNFaultB.1.", "FPFlagB.0.", "FPFlagB.1."], LISTn[NIL, NIL, "FPFlagAB.0.", "FPFlagAB.1."] ]; FPMaskFlagMuxB: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmFP.FPMaskFlagMuxB", top: FPMaskFlagMuxBTop, ctl: LIST["ChkStatusAndNResetB", "ChkStatusAndNResetB'"], in: LISTn[ LISTn[NIL, NIL, "FPFlagB.0.", "FPFlagB.1."], LISTn[NIL, NIL, "FPFlagAB.0.", "FPFlagAB."]], out: LISTn[ LISTn[NIL, NIL, "FPFlagBx.0.", "FPFlagBx.1."]], bot: FPMaskFlagMatchTop, seq: fpSeq, fixGV: TRUE ]}; FPMaskFlagMatchTop: LIST OF REF = LISTn[ "XBus.", LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."], LISTn["FPMaskAB.0.", "FPMaskAB.1.", "FPFlagBx.0.", "FPFlagBx.1."], LISTn["FPNFaultB.0.", "FPNFaultB.1.", NIL, NIL] ]; FPMaskFlagMatch: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMatchRow[ design: design, name: "IFUAsmFP.FPMaskFlagMatch", chkFor: LISTn[VDD], -- one GND => Fault top: FPMaskFlagMatchTop, in1: 3, -- input index col2: 4, -- blank column col3: 5, -- blank column sideOuts: IFUPW.List4["FPFaultng0", "FPFaultng1", NIL, NIL], -- logic true outsSide: IFUPW.LtSide, bot: FPMaskFlagLatchBTop, seq: fpSeq ]}; FPMaskFlagLatchBTop: LIST OF REF = LISTn[ "XBus.", LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."], LISTn["FPMaskAB.0.", "FPMaskAB.1.", "FPFlagBx.0.", "FPFlagBx.1."], NIL ]; FPMaskFlagLatchB: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmFP.FPMaskFlagLatchB", type: LISTn["GPLatch"], leftCtl: LIST["PhB", "VBB"], top: FPMaskFlagLatchBTop, in: LISTn[ LISTn["FPMaskAB.0.", "FPMaskAB.1.", "FPFlagBx.0.", "FPFlagBx.1."]], out: LISTn[ LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."]], bot: FPMaskFlagDriveXBusTop, seq: fpSeq ]}; FPMaskFlagDriveXBusTop: LIST OF REF = LISTn[ "XBus.", LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."]]; FPMaskFlagDriveXBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmFP.FPMaskFlagDriveXBus", type: LISTn["GPTriDr"], leftCtl: LIST["WtMaskFlagAc", "WtMaskFlagAc'"], top: FPMaskFlagDriveXBusTop, in: LISTn[ LISTn["FPMaskBA.0.", "FPMaskBA.1.", "FPFlagBA.0.", "FPFlagBA.1."]], out: LISTn["XBus."], bot: FPMaskFlagBot, seq: fpSeq ]}; FPMaskFlagBot: LIST OF REF = LISTn[ "XBus."]; newDesign: Rope.ROPE _ IFUAsm.rootName.Cat["FP"]; dataColRows: LIST OF IFUPW.UserProc _ LIST[ FPModeAluMuxFromXBus, FPModeShiftUp, FPModeMultMuxFromXBus, FPModeLatchA, FPModeLatchB, FPModeMultTriDr, FPModeShiftDown, FPModeAluTriDr, FPMaskFlagMuxFromXBus, FPMaskFlagLatchA, FPMaskFlagDecodeStatus, FPMaskFlagGate, FPMaskFlagInv, FPMaskFlagMatch, FPMaskFlagMuxB, FPMaskFlagLatchB, FPMaskFlagDriveXBus ]; CDAssemble: IFUPW.UserProc= {RETURN[IFUPW.AssembleList[design, dataColRows]]}; CTAssemble: Commander.CommandProc = {[ ] _ IFUPW.AssembleList[IFUAsm.refDesign, dataColRows, newDesign, cmd]}; IFUAsm.RegDataColRows [procs: dataColRows, name: newDesign.Cat["Cell"]]; Commander.Register [proc: CTAssemble, key: newDesign.Cat["Cell"]]; IFUPW.Register [userProc: CDAssemble, name: newDesign.Cat["Cell"]]; END. €IFUAsmFP.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by June 16, 1985 1:34:47 pm PDT Êz˜šœ™Jšœ<™˜CJšœ œœ˜2Jšœ<˜AJ˜—š žœœ œ œ œ˜Jšœœ˜Jšœ˜Jšœ#˜#Jšœœ ˜Jšœ œ˜Jšœ˜šœœ˜ Jšœ<˜A—šœœ˜ Jšœ?˜D—Jšœ ˜ Jšœ˜——J˜š œœœœœ˜/J˜Jšœ>˜CJšœ%œœ˜2Jšœ˜Jšœœœ&˜7J˜—š œœœ œœ ˜1J˜@J˜D—J˜š žœœ œ œ œ˜Pšœœ˜Jšœ˜Jšœ)˜)Jšœ ˜ šœ œ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜—Jšœ ˜ šœœ˜ JšœJ˜O—Jšœ˜Jšœ˜——J˜š œœœœœ˜'J˜Jšœ>˜CJšœ%œœ˜2JšœI˜NJšœœœ%˜6J˜—š žœœ œ œ œ˜Hšœœ˜Jšœ˜Jšœ!˜!Jšœœœ(˜;Jšœ œ˜ Jšœ˜šœœ˜ JšœI˜NJšœD˜I—šœœ˜ JšœF˜K—Jšœ˜Jšœ˜——J˜šœœœœ ˜&J˜JšœD˜DJšœ&œœ˜3JšœK˜KJšœœœ$˜6Jšœ*œœ˜9J˜—J˜š ž œœ œ œ œ˜Gšœœ˜Jšœ˜Jšœ ˜ Jšœœ ˜Jšœ œ˜ Jšœ˜šœœ˜JšœG˜G—šœœ˜JšœB˜B—Jšœ˜Jšœ˜——J˜š œœœœœ˜'J˜Jšœ>˜CJšœ%œœ˜2Jšœ@˜EJšœœœ&˜7J˜—š žœœ œ œ œ˜Hšœœ ˜Jšœ˜Jšœ!˜!Jšœ˜Jšœœ0˜;šœœ˜ Jšœœœ˜-Jšœœœ˜-—šœœ˜ Jšœœœ"˜0—Jšœ˜Jšœ ˜ Jšœœ˜——J˜š œœœœœ˜(J˜Jšœ=˜BJšœ=˜BJšœ"œœ˜6J˜—š žœœ œ œ œ˜Išœœ ˜Jšœ˜Jšœ"˜"JšœœœÏc˜'Jšœ˜Jšœ Ÿ˜Jšœ Ÿ˜Jšœ Ÿ˜Jšœ œ#œœŸ ˜JJšœ œ˜Jšœ˜Jšœ˜——J˜š œœœœœ˜)J˜Jšœ=˜BJšœ=˜BJšœ˜J˜—š žœœ œ œ œ˜Jšœœ˜Jšœ˜Jšœ#˜#Jšœœ ˜Jšœ œ˜Jšœ˜šœœ˜ Jšœ>˜C—šœœ˜ Jšœ>˜C—Jšœ˜Jšœ˜——J˜š œœœœœ˜,J˜Jšœ>˜CJ˜—š žœœ œ œ œ˜Mšœœ˜Jšœ˜Jšœ&˜&Jšœœ ˜Jšœ œ"˜/Jšœ˜šœœ˜ Jšœ>˜C—Jšœœ ˜Jšœ˜Jšœ˜——J˜š œœœœœ˜#J˜ —J˜Jšœ œ˜2J˜š œœœœ œ˜-Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜—J˜šœ œ˜Jšœœœ'˜4—šœ#˜#Jšœœ>˜J—J˜JšœI˜IJšœF˜Fšœ9˜GJ˜—J˜Jšœ˜——…—-¬=¦