DIRECTORY CD, CMos, Commander, IFUAsm, IFUPW, PW, Rope; IFUAsmBCDecode: CEDAR PROGRAM IMPORTS CMos, Commander, IFUAsm, IFUPW, PW, Rope = BEGIN GND: Rope.ROPE = IFUPW.GND; VDD: Rope.ROPE = IFUPW.VDD; bcDecodeSeq: BOOL _ IFUAsm.sequential; BCDecodeXBufTop: LIST OF REF = IFUPW.LISTn[ "XBus." ]; BCDecodeXBuf: PROC[design: CD.Design] RETURNS[cell: PW.ObjName] = { cell _ IFUPW.IFUGVCellRow[ design: design, name: "BCDecodeXBuf", type: IFUPW.LISTn["GVInv"], top: BCDecodeXBufTop, ctl: LIST[NIL], in: LIST[IFUPW.List4["XNegB.", "XBus.1", "XBus.2", "XNegC."]], out: LIST[IFUPW.List4["XPosB.", "XNegB.", "XNegC.", "XPosC."]], bot: BCDecodeSetupTop, seq: bcDecodeSeq ]}; BCDecodeSetupTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["XPosB.", "XNegB.", "XNegC.", "XPosC."], IFUPW.List4["XNegB.", NIL, NIL, "XNegC."] ]; BCDecodeSetup: PROC[design: CD.Design] RETURNS[cell: PW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "BCDecodeSetup", rowType: CMos.met2, topSeq: bcDecodeSeq, top: BCDecodeSetupTop, left: NIL, right: NIL, bot: BCDecoderTop, botSeq: bcDecodeSeq, fixGV: TRUE ]}; decodeCtls: IFUPW.List = LIST[ "XPosB.0", "XNegB.0", "XPosB.1", "XNegB.1", "XPosB.2", "XNegB.2", "XPosB.3", "XNegB.3", "XPosB.4", "XNegB.4", "XPosB.5", "XNegB.5", "XPosB.6", "XNegB.6", "XPosB.7", "XNegB.7", "XPosC.0", "XNegC.0", "XPosC.1", "XNegC.1", "XPosC.2", "XNegC.2", "XPosC.3", "XNegC.3", "XPosC.4", "XNegC.4", "XPosC.5", "XNegC.5", "XPosC.6", "XNegC.6", "XPosC.7", "XNegC.7"]; BCDecoderTop: LIST OF REF = IFUPW.LISTn[ "XBus.", IFUPW.List4["XPosB.", "XNegB.", "XNegC.", "XPosC."] ]; BCDecoder: PROC[design: CD.Design] RETURNS[cell: PW.ObjName] = { cell _ IFUPW.IFUDecoderRow[ design: design, name: "BCDecoder", top: BCDecoderTop, ctl: decodeCtls, val: decodeVals, out: LIST[decodeOut0, decodeOut1, decodeOut2, decodeOut3], bot: BCDecodeOutTop, seq: bcDecodeSeq ]}; BCDecodeOutTop: LIST OF REF = IFUPW.LISTn[ "XBus.", LIST[decodeOut0, decodeOut1, decodeOut2, decodeOut3] ]; BCDecodeOut: PROC[design: CD.Design] RETURNS[cell: PW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "BCDecodeOut", rowType: CMos.met2, topSeq: bcDecodeSeq, top: BCDecodeOutTop, left: NIL, right: decodeOuts, bot: BCDecoderBot, botSeq: bcDecodeSeq, fixGV: TRUE ]}; BCDecoderBot: LIST OF REF = IFUPW.LISTn[ "XBus."]; decodeVals: REF IFUPW.ValArray _ NEW[IFUPW.ValArray]; decodeOut0: IFUPW.List _ NIL; decodeOut1: IFUPW.List _ NIL; decodeOut2: IFUPW.List _ NIL; decodeOut3: IFUPW.List _ NIL; decodeOuts: IFUPW.List _ NIL; ProcRegName: PROC[reg: IFUPW.ProcessorReg] RETURNS[PW.ROPE] = { RETURN[ SELECT reg FROM ifuXBus => "XBus", ifuStatus => "Status", ifuFPModeAlu => "FPModeAlu", ifuFPModeMult => "FPModeMult", ifuFPMaskFlags => "FPMaskFlags", ifuSLimit => "SLimit", ifuYoungestL => "YoungestL", ifuYoungestPC => "YoungestPC", ifuEldestL => "EldestL", ifuEldestPC => "EldestPC", ENDCASE => NIL ]}; newDesign: PW.ROPE _ IFUAsm.rootName.Cat["BCDecode"]; dataColRows: LIST OF IFUPW.RowProc _ LIST[ BCDecodeXBuf, BCDecodeSetup, BCDecoder, BCDecodeOut ]; CDAssemble: PW.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"]]; PW.Register [userProc: CDAssemble, name: newDesign.Cat["Cell"]]; FOR byte: INT DECREASING IN [0..IFUPW.rngByte) DO FOR bit: INT DECREASING IN [0..IFUPW.rngBit) DO decodeVals[byte][bit] _ 240+(byte MOD 2)*8 + bit ENDLOOP ENDLOOP; FOR reg: CARDINAL DECREASING IN [248..248+8) DO name: PW.ROPE _ Rope.Cat[ProcRegName[LOOPHOLE[reg]], "FromXBus"]; decodeOut3 _ CONS[name, decodeOut0]; decodeOuts _ CONS[name, decodeOut0]; ENDLOOP; FOR reg: CARDINAL DECREASING IN [240..240+8) DO name: PW.ROPE _ Rope.Cat[ProcRegName[LOOPHOLE[reg]], "FromXBus"]; decodeOut2 _ CONS[name, decodeOut0]; decodeOuts _ CONS[name, decodeOut0]; ENDLOOP; FOR reg: CARDINAL DECREASING IN [248..248+8) DO name: PW.ROPE _ Rope.Cat[ProcRegName[LOOPHOLE[reg]], "ToXBus"]; decodeOut1 _ CONS[name, decodeOut0]; decodeOuts _ CONS[name, decodeOut0]; ENDLOOP; FOR reg: CARDINAL DECREASING IN [240..240+8) DO name: PW.ROPE _ Rope.Cat[ProcRegName[LOOPHOLE[reg]], "ToXBus"]; decodeOut0 _ CONS[name, decodeOut0]; decodeOuts _ CONS[name, decodeOut0]; ENDLOOP; END. ŒIFUAsmBCDecodeOld.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by June 16, 1985 1:30:12 pm PDT ʘšœ™Jšœ<™˜J—J˜JšœI˜IJšœF˜FJšœB˜DJ˜š œœ œœœ ˜1š œœ œœœ ˜/Jšœ"œ œœ˜A——š œœ œœ˜/Jšœœœœ˜AJšœ œ˜$Jšœ œ˜$Jšœ˜—š œœ œœ˜/Jšœœœœ˜AJšœ œ˜$Jšœ œ˜$Jšœ˜—š œœ œœ˜/Jšœœœœ˜?Jšœ œ˜$Jšœ œ˜$Jšœ˜—š œœ œœ˜/Jšœœœœ˜?Jšœ œ˜$Jšœ œ˜$Jšœ˜—J˜Jšœ˜—J™J™—…—p¾