<> <> <> <<>> <<>> DIRECTORY CD, Commander, IFUAsm, IFUPW, Rope; IFUAsmABCForm: CEDAR PROGRAM IMPORTS Commander, IFUAsm, IFUPW, Rope = BEGIN GND: Rope.ROPE = IFUPW.GND; VDD: Rope.ROPE = IFUPW.VDD; abcFormSeq: BOOL _ IFUAsm.sequential; alpha: Rope.ROPE = "AlphaBA."; beta: Rope.ROPE = "BetaBA."; op47AlphaBetaBA: LIST OF REF = IFUPW.LISTn[ IFUPW.List8[GND, GND, GND, GND, "OpBA.4", "OpBA.5", "OpBA.6", "OpBA.7"], NIL, "AlphaBA.", "BetaBA."]; aOffset: IFUPW.List = IFUPW.List8 [GND, GND, GND, GND, GND, "AOff.0", "AOff.1", "AOff.2"]; bOffset: IFUPW.List = IFUPW.List8 [GND, GND, GND, GND, GND, "BOff.0", "BOff.1", "BOff.2"]; cOffset: IFUPW.List = IFUPW.List8 [GND, GND, GND, GND, GND, "COff.0", "COff.1", "COff.2"]; aSum17: IFUPW.List = IFUPW.List8 [GND,"ASum.1","ASum.2","ASum.3","ASum.4","ASum.5","ASum.6","ASum.7"]; bSum17: IFUPW.List = IFUPW.List8 [GND,"BSum.1","BSum.2","BSum.3","BSum.4","BSum.5","BSum.6","BSum.7"]; cSum17: IFUPW.List = IFUPW.List8 [GND,"CSum.1","CSum.2","CSum.3","CSum.4","CSum.5","CSum.6","CSum.7"]; alpha03: IFUPW.List = IFUPW.List8 [GND,GND,GND,GND,"AlphaBA.0","AlphaBA.1","AlphaBA.2","AlphaBA.3"]; alpha47: IFUPW.List = IFUPW.List8 [GND,GND,GND,GND,"AlphaBA.4","AlphaBA.5","AlphaBA.6","AlphaBA.7"]; beta03: IFUPW.List = IFUPW.List8 [GND, GND, GND, GND,"BetaBA.0", "BetaBA.1", "BetaBA.2", "BetaBA.3"]; beta47: IFUPW.List = IFUPW.List8 [GND, GND, GND, GND,"BetaBA.4", "BetaBA.5", "BetaBA.6", "BetaBA.7"]; op47: IFUPW.List = IFUPW.List8 [GND, GND, GND, GND, "OpBA.4", "OpBA.5", "OpBA.6", "OpBA.7"]; <> cBase: IFUPW.List = IFUPW.ProcRegToList[euConstant]; aBase: IFUPW.List = IFUPW.ProcRegToList[euAux]; iBase: IFUPW.List = IFUPW.ProcRegToList[ifuXBus]; fpAlu: IFUPW.List = IFUPW.ProcRegToList[fpAluClear]; fpMult: IFUPW.List = IFUPW.ProcRegToList[fpMultClear]; ABCRtSwitchingTop: LIST OF REF = IFUPW.LISTn[ "XBus.", op47AlphaBetaBA, IFUPW.List4["LAB.", NIL, "SAB.", NIL] ]; ABCRtSwitching: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "ABCRtSwitching", rowType: IFUPW.cmosMet2, topSeq: abcFormSeq, top: ABCRtSwitchingTop, left: LIST[ GND, VDD, "AOff.0", "AOff.1", "AOff.2", "BOff.0", "BOff.1", "BOff.2", "COff.0", "COff.1", "COff.2"], right: NIL, bot: ABCRtArgFormTop, botSeq: abcFormSeq, fixGV: TRUE ]}; ABCRtArgFormTop: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, IFUPW.LISTn["LAB.", NIL, "SAB.", NIL], IFUPW.LISTn[alpha, alpha, alpha, NIL], IFUPW.LISTn[alpha03, alpha03, alpha03, NIL], NIL, GND, VDD, IFUPW.LISTn[aOffset, bOffset, cOffset, NIL], IFUPW.LISTn[op47, op47, op47, NIL], IFUPW.LISTn[beta, beta, beta, NIL], IFUPW.LISTn[beta03, beta03, beta03, NIL] ]; ABCRtArgForm: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "ABCRtArgForm", top: ABCRtArgFormTop, ctl: LIST[ "ARtOSetB", "ARtAlpB", "ARtAlp03B", "ARtAlp47B", "ARtOp47B", "ARtBetB", "ARtBet03B", "ARtBet47B", "BRtOSetB", "BRtAlpB", "BRtAlp03B", "BRtAlp47B", "BRtOp47B", "BRtBetB", "BRtBet03B", "BRtBet47B", "CRtOSetB", "CRtAlpB", "CRtAlp03B", "CRtAlp47B", "CRtOp47B", "CRtBetB", "CRtBet03B", "CRtBet47B" ], in: LIST[ IFUPW.LISTn[aOffset, NIL, NIL, NIL], IFUPW.LISTn[alpha, NIL, NIL, NIL], IFUPW.LISTn[alpha03, NIL, NIL, NIL], IFUPW.LISTn[alpha47, NIL, NIL, NIL], IFUPW.LISTn[op47, NIL, NIL, NIL], IFUPW.LISTn[beta, NIL, NIL, NIL], IFUPW.LISTn[beta03, NIL, NIL, NIL], IFUPW.LISTn[beta47, NIL, NIL, NIL], IFUPW.LISTn[NIL, bOffset, NIL, NIL], IFUPW.LISTn[NIL, alpha, NIL, NIL], IFUPW.LISTn[NIL, alpha03, NIL, NIL], IFUPW.LISTn[NIL, alpha47, NIL, NIL], IFUPW.LISTn[NIL, op47, NIL, NIL], IFUPW.LISTn[NIL, beta, NIL, NIL], IFUPW.LISTn[NIL, beta03, NIL, NIL], IFUPW.LISTn[NIL, beta47, NIL, NIL], IFUPW.LISTn[NIL, NIL, cOffset, NIL], IFUPW.LISTn[NIL, NIL, alpha, NIL], IFUPW.LISTn[NIL, NIL, alpha03, NIL], IFUPW.LISTn[NIL, NIL, alpha47, NIL], IFUPW.LISTn[NIL, NIL, op47, NIL], IFUPW.LISTn[NIL, NIL, beta, NIL], IFUPW.LISTn[NIL, NIL, beta03, NIL], IFUPW.LISTn[NIL, NIL, beta47, NIL] ], out: LIST[ IFUPW.List4["ARt.", "BRt.", "CRt.", NIL] ], bot: ABCLtSwitchingTop, seq: abcFormSeq, fixGV: TRUE ]}; ABCLtSwitchingTop: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, IFUPW.List4["LAB.", NIL, "SAB.", NIL], NIL, NIL, IFUPW.List4["ARt.", "BRt.", "CRt.", NIL] ]; ABCLtSwitching: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "ABCLtSwitching", rowType: IFUPW.cmosMet2, topSeq: abcFormSeq, top: ABCLtSwitchingTop, left: NIL, right: NIL, bot: ABCLtArgFormTop, botSeq: abcFormSeq, fixGV: TRUE ]}; ABCLtArgFormTop: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, IFUPW.List4["LAB.", "LAB.", "SAB.", NIL], IFUPW.List4["SAB.", "SAB.", "LAB.", NIL], NIL, IFUPW.List4["ARt.", "BRt.", "CRt.", NIL], GND, VDD, IFUPW.LISTn[cBase, cBase, cBase, NIL], IFUPW.LISTn[aBase, aBase, aBase, NIL], IFUPW.LISTn[iBase, iBase, iBase, NIL], IFUPW.LISTn[GND, GND, GND, NIL] ]; ABCLtArgForm: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "ABCLtArgForm", top: ABCLtArgFormTop, ctl: LIST[ "ALtCBaseB", "ALtABaseB", "ALtSB", "ALtLB", "ALtIRefB", "ASumLtZB", "BLtCBaseB", "BLtABaseB", "BLtSB", "BLtLB", "BLtIRefB", "BSumLtZB", "CLtFPAB", "CLtFPMB", "CLtABaseB", "CLtCBaseB", "CLtZB", "CLtLB", "CLtSB", "CLtIRefB"], in: LIST[ IFUPW.LISTn[cBase, NIL, NIL, NIL], IFUPW.LISTn[aBase, NIL, NIL, NIL], IFUPW.LISTn[iBase, NIL, NIL, NIL], IFUPW.LISTn[GND, NIL, NIL, NIL], IFUPW.LISTn["LAB.", NIL, NIL, NIL], IFUPW.LISTn["SAB.", NIL, NIL, NIL], IFUPW.LISTn[NIL, cBase, NIL, NIL], IFUPW.LISTn[NIL, aBase, NIL, NIL], IFUPW.LISTn[NIL, iBase, NIL, NIL], IFUPW.LISTn[NIL, GND, NIL, NIL], IFUPW.LISTn[NIL, "LAB.", NIL, NIL], IFUPW.LISTn[NIL, "SAB.", NIL, NIL], IFUPW.LISTn[NIL, NIL, fpAlu, NIL], IFUPW.LISTn[NIL, NIL, fpMult, NIL], IFUPW.LISTn[NIL, NIL, cBase, NIL], IFUPW.LISTn[NIL, NIL, aBase, NIL], IFUPW.LISTn[NIL, NIL, iBase, NIL], IFUPW.LISTn[NIL, NIL, GND, NIL], IFUPW.LISTn[NIL, NIL, "LAB.", NIL], IFUPW.LISTn[NIL, NIL, "SAB.", NIL] ], out: LIST[ IFUPW.List4["ALt.", "BLt.", "CLt.", NIL ] ] , bot: ABCAdderTop, seq: abcFormSeq, fixGV: TRUE ]}; <<>> ABCAdderTop: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, NIL, NIL, IFUPW.List4["ALt.", "BLt.", "CLt.", NIL], IFUPW.List4["ARt.", "BRt.", "CRt.", NIL] ]; ABCAdder: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUAdderRow[ design: design, name: "ABCAdder", ctl: LIST[GND, GND, GND, NIL], top: ABCAdderTop, in: IFUPW.LISTn[ IFUPW.List4["ALt.", "BLt.", "CLt.", NIL], IFUPW.List4["ARt.", "BRt.", "CRt.", NIL]], out: IFUPW.LISTn[ IFUPW.List4["ASum.", "BSum.", "CSum.", NIL]], bot: ABCMux0BTop, sums: 4, seq: abcFormSeq ]}; <> ABCMux0BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["ASum.", "BSum.", "CSum.", NIL]]; ABCMux0B: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "ABCMux0B", top: ABCMux0BTop, ctl: LIST[ "AFullSumB", "AModSumB", "BFullSumB", "BModSumB", "CFullSumB", "CModSumB" ], in: IFUPW.LISTn[ IFUPW.LISTn["ASum.", NIL, NIL, NIL], IFUPW.LISTn[aSum17, NIL, NIL, NIL], IFUPW.LISTn[NIL, "BSum.", NIL, NIL], IFUPW.LISTn[NIL, bSum17, NIL, NIL], IFUPW.LISTn[NIL, NIL, "CSum.", NIL], IFUPW.LISTn[NIL, NIL, cSum17, NIL] ], out: IFUPW.LISTn[IFUPW.List4["ASumx.", "BSumx.", "CSumx.", NIL]], bot: ABCLatch0BTop, seq: abcFormSeq, fixGV: TRUE ]}; ABCLatch0BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, IFUPW.List4["ASumx.", "BSumx.", "CSumx.", NIL]]; ABCLatch0B: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "ABCLatch0B", type: IFUPW.LISTn["GPLatch"], top: ABCLatch0BTop, ctl: LIST["PhA"], in: IFUPW.LISTn[IFUPW.List4["ASumx.", "BSumx.", "CSumx.", NIL]], out: IFUPW.LISTn[IFUPW.List4["AReg0BA.", "BReg0BA.", "CReg0BA.", NIL] ], bot: ABCFormBot, seq: abcFormSeq ]}; <<>> ABCFormBot: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["AReg0BA.", "BReg0BA.", "CReg0BA.", NIL] ]; newDesign: Rope.ROPE _ IFUAsm.rootName.Cat["ABCForm"]; dataColRows: LIST OF IFUPW.UserProc _ LIST[ ABCRtSwitching, ABCRtArgForm, ABCLtSwitching, ABCLtArgForm, ABCAdder, ABCMux0B, ABCLatch0B ]; 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. <<>> <<>>