<> <> <> <> <<>> DIRECTORY CD, Commander, IFUAsm, IFUPW, Rope; IFUAsmLSForm: CEDAR PROGRAM IMPORTS Commander, IFUAsm, IFUPW EXPORTS IFUAsm = BEGIN List: TYPE = IFUPW.List; GND: Rope.ROPE = IFUPW.GND; VDD: Rope.ROPE = IFUPW.VDD; lsFormRP: IFUPW.RowParams = IFUPW.IFUDataColNSeq; List4: PROC [r0, r1, r2, r3: Rope.ROPE] RETURNS[list: IFUPW.List] = IFUPW.List4; LISTn: PROC [r0, r1, r2, r3, r4, r5, r6, r7: REF _ NIL] RETURNS[list: LIST OF REF] = {RETURN[IFUPW.LISTn[r0, r1, r2, r3, r4, r5, r6, r7]]}; op47AlphaBetaBA: LIST OF REF = IFUPW.LISTn[ IFUPW.List8[GND, GND, GND, GND, "OpBA.4", "OpBA.5", "OpBA.6", "OpBA.7"], NIL, "AlphaBA.", "BetaBA."]; LStackRdPreChargeTop: LIST OF REF = IFUPW.LISTn[ "XBus.", op47AlphaBetaBA, -- Op03 dropped here NIL, List4[NIL, NIL, NIL, "LStackWtDataA."], List4[NIL, NIL, NIL, "LStackRdDataA."] ]; LStackRdPreCharge: PROC[design: CD.Design] RETURNS[cellName: CD.Object] = { cellName _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmLSForm.LStackRdPreCharge", type: IFUPW.LISTn["GPPreChg"], top: LStackRdPreChargeTop, leftCtl: LIST["PhB"], in: NIL, out: IFUPW.LISTn[List4[NIL, NIL, NIL, "LStackRdDataA."]], bot: LStackRdMuxTop, rp: lsFormRP ]}; LStackRdMuxTop: LIST OF REF = IFUPW.LISTn[ "XBus.", op47AlphaBetaBA, NIL, List4[NIL, NIL, NIL, "LStackWtDataA."], List4[NIL, NIL, NIL, "LStackRdDataA."] ]; LStackRdMux: PROC[design: CD.Design] RETURNS[cellName: CD.Object] = { cellName _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmLSForm.LStackRdMux", top: LStackRdMuxTop, rightCtl: LIST["Push3BA", "NotPush3BA"], in: IFUPW.LISTn[ List4[NIL, NIL, NIL, "LStackWtDataA."], List4[NIL, NIL, NIL, "LStackRdDataA."] ], out: IFUPW.LISTn[List4[NIL, NIL, NIL, "SelLStackRdDataA."]], bot: LStackRdLatchATop, rp: lsFormRP ]}; LStackRdLatchATop: LIST OF REF = IFUPW.LISTn[ "XBus.", op47AlphaBetaBA, NIL, List4[NIL, NIL, NIL, "LStackWtDataA."], NIL, List4[NIL, NIL, NIL, "SelLStackRdDataA."]]; LStackRdLatchA: PROC[design: CD.Design] RETURNS[cellName: CD.Object] = { cellName _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmLSForm.LStackRdLatchA", type: IFUPW.LISTn["GPLatch"], top: LStackRdLatchATop, leftCtl: LIST["PhA", "VBB"], in: IFUPW.LISTn[List4[NIL, NIL, NIL, "SelLStackRdDataA."]], out: IFUPW.LISTn[List4[NIL, NIL, NIL, "LStkTopAB."]], bot: LStackXBusDrTop, rp: lsFormRP ]}; LStackXBusDrTop: LIST OF REF = IFUPW.LISTn[ "XBus.", op47AlphaBetaBA, NIL, List4[NIL, NIL, NIL, "LStackWtDataA."], NIL, List4[NIL, NIL, NIL, "LStkTopAB."]]; LStackXBusDr: PROC[design: CD.Design] RETURNS[cellName: CD.Object] = { cellName _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmLSForm.LStackXBusDr", type: IFUPW.LISTn["GPTriDr"], top: LStackXBusDrTop, rightCtl: LIST["X1ASrcStackPBA","NotX1ASrcStackPBA"], in: IFUPW.LISTn[List4[NIL, NIL, NIL, "LStkTopAB."]], out: IFUPW.LISTn[List4[NIL, NIL, NIL, "XBus."]], bot: LStackWtBufTop, rp: lsFormRP ]}; LStackWtBufTop: LIST OF REF = IFUPW.LISTn[ "XBus.", op47AlphaBetaBA, NIL, List4[NIL, NIL, NIL, "LStackWtDataA."], NIL, List4[NIL, NIL, NIL, "LStkTopAB."]]; LStackWtBuf: PROC[design: CD.Design] RETURNS[cellName: CD.Object] = { cellName _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmLSForm.LStackWtBuf", type: IFUPW.LISTn["GPBuf"], top: LStackWtBufTop, in: IFUPW.LISTn[List4[NIL, NIL, NIL, "PreLStackWtDataA."]], out: IFUPW.LISTn[List4[NIL, NIL, NIL, "LStackWtDataA."]], bot: LStackWtMuxTop, rp: lsFormRP ]}; LStackWtMuxTop: LIST OF REF = IFUPW.LISTn[ "XBus.", op47AlphaBetaBA, List4[NIL, NIL, NIL, "PreLStackWtDataA."], NIL, NIL, List4[NIL, NIL, NIL, "LStkTopAB."]]; LStackWtMux: PROC[design: CD.Design] RETURNS[cellName: CD.Object] = { cellName _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmLSForm.LStackWtMux", top: LStackWtMuxTop, rightCtl: LIST["X1ADstStackBA", "NotX1ADstStackBA"], in: IFUPW.LISTn["XBus.", List4[NIL, NIL, NIL, "L3BA."]], out: IFUPW.LISTn[List4[NIL, NIL, NIL, "PreLStackWtDataA."]], bot: LSMuxSwitchingTop, rp: lsFormRP ]}; LSMuxSwitchingTop: LIST OF REF = LISTn[ "XBus.", op47AlphaBetaBA, NIL, NIL, List4[NIL, NIL, NIL, "L3BA."], List4[NIL, NIL, NIL, "LStkTopAB."] ]; LSMuxSwitching: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmLSForm.LSMuxSwitching", rowType: IFUPW.cmosMet2, topRP: lsFormRP, top: LSMuxSwitchingTop, left: NIL, right: NIL, bot: LSArgFormMuxTop, botRP: lsFormRP ]}; LSArgFormMuxTop: LIST OF REF = IFUPW.LISTn[ "XBus.", op47AlphaBetaBA, List4["L3BA.", "LStkTopAB.", NIL, NIL], NIL, NIL, NIL, GND, VDD, List4[NIL, "AlphaBA.", NIL, "AlphaBA."]]; LSArgFormMux: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "IFUAsmLSForm.LSArgFormMux", top: LSArgFormMuxTop, rightCtl: LIST[ "LSourceLtLBA", "LSourceLtSBA", "LSourceLtZeroBA", "LSourceLtL3BA", "LSourceRtZeroBA", "LSourceRtAlphaBA", "LSourceRtStackBA", "LSourceRtOneBA", "SSourceLtSBA", "SSourceLtLBA", "SSourceLtZeroBA", "SSourceLtS3BA", "SSourceRtDeltaSBA", "SSourceRtAlphaBA", "SSourceRtZeroBA", "SSourceRtOneBA"], in: IFUPW.LISTn[ List4["LAB.", NIL, NIL, NIL], List4["SAB.", NIL, NIL, NIL], List4[GND, NIL, NIL, NIL], List4["L3BA.", NIL, NIL, NIL], List4[NIL, GND, NIL, NIL], List4[NIL, "AlphaBA.", NIL, NIL], List4[NIL, "LStkTopAB.", NIL, NIL], List4[NIL, VDD, NIL, NIL], List4[NIL, NIL, "SAB.", NIL], List4[NIL, NIL, "LAB.", NIL], List4[NIL, NIL, GND, NIL], List4[NIL, NIL, "S3BA.", NIL], List4[NIL, NIL, NIL, "SDeltaB."], List4[NIL, NIL, NIL, "AlphaBA."], List4[NIL, NIL, NIL, GND], List4[NIL, NIL, NIL, VDD] ], out: LISTn[List4["LSumLtx.", "LSumRtx.", "SSumLtx.", "SSumRtx."]], bot: LSCrossConnLSABTop, rp: lsFormRP ]}; LSCrossConnLSABTop: LIST OF REF = LISTn[ "XBus.", op47AlphaBetaBA, List4["L3BA.", NIL, "S3BA.", "SDeltaB."], List4["LSumLtx.", "LSumRtx.", "SSumLtx.", "SSumRtx."], List4["SAB.", NIL, "LAB.", NIL], List4["LAB.", NIL, "SAB.", NIL] ]; LSCrossConnLSAB: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmLSForm.LSCrossConnLSAB", rowType: IFUPW.cmosMet2, topRP: lsFormRP, top: LSCrossConnLSABTop, left: NIL, right: NIL, bot: LSArgFormBufTop, botRP: lsFormRP ]}; LSArgFormBufTop: LIST OF REF = LISTn[ "XBus.", op47AlphaBetaBA, List4["L3BA.", NIL, "S3BA.", "SDeltaB."], List4["LSumLtx.", "LSumRtx.", "SSumLtx.", "SSumRtx."], NIL, List4["LAB.", NIL, "SAB.", NIL] ]; LSArgFormBuf: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmLSForm.LSArgFormBuf", type: LISTn["GPBuf"], top: LSArgFormBufTop, leftCtl: LIST[NIL], in: LISTn[List4["LSumLtx.", "LSumRtx.", "SSumLtx.", "SSumRtx."] ], out: LISTn[ List4["LSumLt.", "LSumRt.", "SSumLt.", "SSumRt."] ], bot: LSPreAdderAdjustTop, rp: lsFormRP ]}; LSPreAdderAdjustTop: LIST OF REF = LISTn[ "XBus.", op47AlphaBetaBA, List4["L3BA.", NIL, "S3BA.", "SDeltaB."], List4["LSumLt.", "LSumRt.", "SSumLt.", "SSumRt."], NIL, List4["LAB.", NIL, "SAB.", NIL] ]; LSPreAdderAdjust: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmLSForm.LSPreAdderAdjust", rowType: IFUPW.cmosMet2, topRP: lsFormRP, top: LSPreAdderAdjustTop, left: NIL, right: LIST["PopSaBA", "PopSbBA", "PushScBA"], bot: LSAdderTop, botRP: lsFormRP ]}; LSAdderTop: LIST OF REF = LISTn[ "XBus.", op47AlphaBetaBA, List4["L3BA.", NIL, "S3BA.", "SDeltaB." ], LISTn["LSumLt.", NIL, "SSumLt.", "PopSaBA" ], -- not "PopSaBA." LISTn["LSumRt.", NIL, "SSumRt.", "PopSbBA" ], -- not "PopSbBA." List4["LAB.", NIL, "SAB.", NIL ] ]; LSAdder: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUAdderRow[ design: design, name: "IFUAsmLSForm.LSAdder", rightCtl: LIST[GND, GND, GND, "PushScBA"], top: LSAdderTop, in: LISTn[ LISTn["LSumLt.", "SLimNA.", "SSumLt.", "PopSaBA"], -- not "PopSaBA." LISTn["LSumRt.", "SAB.", "SSumRt.", "PopSbBA"] ], -- not "PopSbBA." out: LISTn[ List4["LSum.", "SLimTest.", "SSum.", "SDeltaB."]], bot: LSPostAdderTop, sums: 4, rp: lsFormRP ]}; LSPostAdderTop: LIST OF REF = LISTn[ "XBus.", op47AlphaBetaBA, List4["L3BA.", "SLimNA.", "S3BA.", NIL ], List4["LSum.", "SLimTest.", "SSum.", NIL ], NIL, List4["LAB.", "SAB.", "SAB.", NIL ] ]; LSPostAdder: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmLSForm.LSPostAdder", rowType: IFUPW.cmosMet2, topRP: lsFormRP, top: LSPostAdderTop, left: LIST["LSum.0", "SSum.0", "SLimTest.0", "SLimTest.1","SLimTest.2","SLimTest.3"], right: NIL, -- XXX Fix this - Signals above are not needed bot: LSLatchBTop, botRP: lsFormRP ]}; LSum17: LIST OF REF _ LISTn [GND,"LSum.1","LSum.2","LSum.3","LSum.4","LSum.5","LSum.6","LSum.7"]; SSum17: LIST OF REF _ LISTn [GND,"SSum.1","SSum.2","SSum.3","SSum.4","SSum.5","SSum.6","SSum.7"]; SLimTest47: LIST OF REF _ LISTn [GND,GND,GND,GND, "SLimTest.4", "SLimTest.5", "SLimTest.6","SLimTest.7"]; SLimTBA47: LIST OF REF _ LISTn [NIL,NIL,NIL,NIL, "SLimTBA.4", "SLimTBA.5", "SLimTBA.6","SLimTBA.7"]; LSLatchBTop: LIST OF REF = LISTn[ "XBus.", op47AlphaBetaBA, List4["L3BA.", NIL, "S3BA.", "SLimNA."], LISTn[LSum17, NIL, SSum17, SLimTest47], NIL, List4["LAB.", NIL, "SAB.", NIL] ]; LSLatchB: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "IFUAsmLSForm.LSLatchB", type: LISTn["GPLatch"], top: LSLatchBTop, leftCtl: LIST["PhB", "VBB"], in: LISTn[LISTn[LSum17, NIL, SSum17, SLimTest47]], out: LISTn[LISTn["LBA.", NIL, "SBA.", SLimTBA47]], bot: LSSwitchOutSLimitTestTop, rp: lsFormRP ]}; LSSwitchOutSLimitTestTop: LIST OF REF = LISTn[ "XBus.", op47AlphaBetaBA, List4["L3BA.", NIL, "S3BA.", "SLimNA."], LISTn["LBA.", NIL, "SBA.", SLimTBA47], NIL, List4["LAB.", NIL, "SAB.", NIL] ]; LSSwitchOutSLimitTest: PROC[design: CD.Design] RETURNS[cell: CD.Object] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "IFUAsmLSForm.LSSwitchOutSLimitTest", rowType: IFUPW.cmosMet2, topRP: lsFormRP, top: LSSwitchOutSLimitTestTop, left: LIST["SLimTBA.4", "SLimTBA.5", "SLimTBA.6","SLimTBA.7"], right: NIL, bot: LSFormBot, botRP: lsFormRP ]}; LSFormBot: LIST OF REF = LISTn[ "XBus.", op47AlphaBetaBA, List4["L3BA.", NIL, "S3BA.", "SLimNA."], List4["LBA.", NIL, "SBA.", NIL], NIL, List4["LAB.", NIL, "SAB.", NIL] ]; module: Rope.ROPE _ "IFUAsmLSForm"; LSForm: PUBLIC IFUPW.Frame _ IFUPW.NFSFUP[module, y, LIST[ LStackRdPreCharge, LStackRdMux, LStackRdLatchA, LStackXBusDr, LStackWtBuf, LStackWtMux, LSMuxSwitching, LSArgFormMux, LSCrossConnLSAB, LSArgFormBuf, LSPreAdderAdjust, LSAdder, LSPostAdder, LSLatchB, LSSwitchOutSLimitTest ] ]; LSFormCT: Commander.CommandProc = {IFUPW.AssembleFrame[IFUAsm.RefDesign[], LSForm, cmd ] }; Commander.Register [proc: LSFormCT, key: module]; END. <<>> <<>>