<> <> <> <<>> DIRECTORY CD, Commander, IFUAsm, IFUPW, Rope; IFUAsmStatus: CEDAR PROGRAM IMPORTS Commander, IFUAsm, IFUPW, Rope = BEGIN GND: Rope.ROPE = IFUPW.GND; VDD: Rope.ROPE = IFUPW.VDD; statusSeqTop: BOOL _ IFUAsm.sequential; statusSeq: BOOL _ IFUAsm.statusSequential; fpAlt: LIST OF REF = IFUPW.LISTn[ NIL, NIL, NIL, NIL, LIST[VDD, VDD,"CScrcRt0B","CScrcRt1B"], LIST[VDD, VDD,"CScrcRt0B","CScrcRt1B"], NIL, NIL]; StatusTop: LIST OF REF = IFUPW.LISTn[ "XBus."]; StatusBusXForm: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.SwitchBoxRow[ design: design, name: "StatusBusXForm", rowType: IFUPW.cmosMet2, topSeq: statusSeqTop, top: StatusTop, left: NIL, right: LIST["CScrcRt0B","CScrcRt1B"], bot: StatusMuxLevel3Top, botSeq: statusSeq, fixGV: TRUE ]; IFUPW.rngByte _ 8; IFUPW.rngBit _ 4}; StatusMuxLevel3Top: LIST OF REF = IFUPW.LISTn[ "XBus.", NIL, NIL, NIL, NIL, fpAlt]; StatusMuxLevel3: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMuxLevel3", top: StatusMuxLevel3Top, ctl: LIST["SetStatusFrom3LevBA", "SetStatusFrom3LevBA'"], in: IFUPW.LISTn["Status3BA.", "Status0AB."], out: IFUPW.LISTn["StatusBx."], bot: StatusMuxRescheduleTop, seq: statusSeq, fixGV: TRUE ]}; StatusMuxRescheduleTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status0AB.", "StatusBx.", NIL, fpAlt]; StatusMuxReschedule: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMuxReschedule", top: StatusMuxRescheduleTop, ctl: LIST["RescheduleBA","RescheduleBA'"], in: IFUPW.LISTn[VDD, "StatusBx."], out: IFUPW.LISTn[LIST[NIL,NIL,NIL,NIL,NIL,NIL,NIL,"StatusBxx.7."]], bot: StatusMuxTrapEnableTop, seq: statusSeq, fixGV: TRUE ]}; StatusMuxTrapEnableTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status0AB.", "StatusBx.", IFUPW.LISTn[NIL,NIL,NIL,NIL,NIL,NIL,NIL,"StatusBxx.7."], fpAlt]; StatusMuxTrapEnable: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMuxTrapEnable", top: StatusMuxTrapEnableTop, ctl: LIST["ClearTrapEnableBA","ClearTrapEnableBA'"], in: IFUPW.LISTn[GND, "StatusBx."], out: IFUPW.LISTn[LIST[NIL,NIL,NIL,NIL,NIL,NIL,"StatusBxx.6.",NIL]], bot: StatusMuxFPMultTop, seq: statusSeq, fixGV: TRUE ]}; StatusMuxFPMultTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status0AB.", "StatusBx.", IFUPW.LISTn[NIL,NIL,NIL,NIL,NIL,NIL,"StatusBxx.6.","StatusBxx.7."], fpAlt]; StatusMuxFPMult: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMuxFPMult", top: StatusMuxFPMultTop, ctl: LIST["SetFPMStatusBA", "SetFPMStatus'"], in: IFUPW.LISTn[fpAlt, "StatusBx."], out: IFUPW.LISTn[LIST[NIL,NIL,NIL,NIL,NIL,"StatusBxx.5.",NIL,NIL]], bot: StatusMuxFPAluTop, seq: statusSeq, fixGV: TRUE ]}; StatusMuxFPAluTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status0AB.", "StatusBx.", IFUPW.LISTn[NIL,NIL,NIL,NIL,NIL,"StatusBxx.5.","StatusBxx.6.","StatusBxx.7."], fpAlt]; StatusMuxFPAlu: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMuxFPAlu", top: StatusMuxFPAluTop, ctl: LIST["SetFPAStatusBA", "SetFPAStatus'"], in: IFUPW.LISTn[fpAlt, "StatusBx."], out: IFUPW.LISTn[LIST[NIL,NIL,NIL,NIL,"StatusBxx.4.",NIL,NIL,NIL]], bot: StatusMuxUserModeTop, seq: statusSeq, fixGV: TRUE ]}; StatusMuxUserModeTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status0AB.", "StatusBx.", IFUPW.LISTn[NIL,NIL,NIL,NIL,"StatusBxx.4.","StatusBxx.5.","StatusBxx.6.","StatusBxx.7."]]; StatusMuxUserMode: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMuxUserMode", top: StatusMuxUserModeTop, ctl: LIST["ClearUserModeBA", "ClearUserModeBA'"], in: IFUPW.LISTn[GND, "StatusBx."], out: IFUPW.LISTn[LIST[NIL,NIL,NIL,"StatusBxx.3.",NIL,NIL,NIL,NIL]], bot: StatusLatchBTop, seq: statusSeq, fixGV: TRUE ]}; StatusLatchBTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status0AB.", NIL, LIST[NIL,NIL,NIL,"StatusBxx.3.","StatusBxx.4.","StatusBxx.5.","StatusBxx.6.","StatusBxx.7."]]; StatusLatchB: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusLatchB", type: IFUPW.LISTn["GPLatch"], top: StatusLatchBTop, ctl: LIST["PhB"], in: IFUPW.LISTn[LIST [VDD,VDD,VDD,"StatusBxx.3.","StatusBxx.4.","StatusBxx.5.","StatusBxx.6.","StatusBxx.7."]], out: IFUPW.LISTn["StatusBA."], bot: StatusMuxFromXBusTop, seq: statusSeq ]}; StatusMuxFromXBusTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status0AB.", "StatusBA."]; StatusMuxFromXBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { IFUPW.rngByte _ 4; IFUPW.rngBit _ 8; cell _ IFUPW.AbutX[design, "StatusMuxNybl", "StatusMuxNybl"]; cell _ IFUPW.AbutX[design, cell, cell]; cell _ IFUPW.AbutX[design, cell, cell]; cell _ IFUPW.AssignRowPinsAndRename[ design: design, rowName: cell, newName: "StatusMuxFromXBus", identity: FALSE, top: StatusMuxFromXBusTop, bot: StatusLatch0ATop, ctl: LIST["EnableStatusFromXBus"], seq: statusSeq ]}; StatusLatch0ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status0AB.", "Status0A."]; StatusLatch0A: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusLatch0A", type: IFUPW.LISTn["GPLatch"], top: StatusLatch0ATop, ctl: LIST["PhA"], in: IFUPW.LISTn["Status0A."], out: IFUPW.LISTn["Status0AB."], bot: StatusMux0BTop, seq: statusSeq ]}; StatusMux0BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status0AB."]; StatusMux0B: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMux0B", top: StatusMux0BTop, ctl: LIST["PipeCycle0AB", "PipeAdv0AB"], in: IFUPW.LISTn["Status1AB.", "Status0AB."], out: IFUPW.LISTn["Status0B."], bot: StatusLatch0BTop, seq: statusSeq, fixGV: TRUE ]}; StatusLatch0BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status1AB.", "Status0B."]; StatusLatch0B: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusLatch0B", type: IFUPW.LISTn["GPLatch"], top: StatusLatch0BTop, ctl: LIST["PhB"], in: IFUPW.LISTn["Status0B."], out: IFUPW.LISTn["Status0BA."], bot: StatusLatch1ATop, seq: statusSeq ]}; StatusLatch1ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status1AB.", "Status0BA."]; StatusLatch1A: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusLatch1A", type: IFUPW.LISTn["GPLatch"], top: StatusLatch1ATop, ctl: LIST["PhA"], in: IFUPW.LISTn["Status0BA."], out: IFUPW.LISTn["Status1AB."], bot: StatusMux1ATop, seq: statusSeq ]}; StatusMux1ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status1AB."]; StatusMux1A: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMux1A", top: StatusMux1ATop, ctl: LIST["PipeCycle123AB", "PipeKill1AB", "PipeAdv1AB'"], in: IFUPW.LISTn["Status1BA.", GND, "Status1AB."], out: IFUPW.LISTn["Status1B."], bot: StatusLatch1BTop, seq: statusSeq, fixGV: TRUE ]}; StatusLatch1BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status1BA.", "Status1B."]; StatusLatch1B: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusLatch1B", type: IFUPW.LISTn["GPLatch"], top: StatusLatch1BTop, ctl: LIST["PhB"], in: IFUPW.LISTn["Status1B."], out: IFUPW.LISTn["Status1BA."], bot: StatusDriveToXBusTop, seq: statusSeq ]}; StatusDriveToXBusTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status1BA."]; StatusDriveToXBus: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusDriveToXBus", type: IFUPW.LISTn["GPTriDr"], top: StatusDriveToXBusTop, ctl: LIST["RdStatusAc", "RdStatusAc'"], in: IFUPW.LISTn["Status1BA."], out: IFUPW.LISTn["XBus."], bot: StatusLatch2ATop, seq: statusSeq ]}; StatusLatch2ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status1BA."]; StatusLatch2A: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusLatch2A", type: IFUPW.LISTn["GPLatch"], top: StatusLatch2ATop, ctl: LIST["PhA"], in: IFUPW.LISTn["Status1BA."], out: IFUPW.LISTn["Status2AB."], bot: StatusMux2ATop, seq: statusSeq ]}; StatusMux2ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status2AB."]; StatusMux2A: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMux2A", top: StatusMux2ATop, ctl: LIST["PipeCycle123AB", "PipeKill2AB", "PipeAdv2AB"], in: IFUPW.LISTn["Status2BA.", GND, "Status2AB."], out: IFUPW.LISTn["Status2B."], bot: StatusLatch2BTop, seq: statusSeq, fixGV: TRUE ]}; StatusLatch2BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status2BA.", "Status2B."]; StatusLatch2B: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusLatch2B", type: IFUPW.LISTn["GPLatch"], top: StatusLatch2BTop, ctl: LIST["PhB"], in: IFUPW.LISTn["Status2B."], out: IFUPW.LISTn["Status2BA."], bot: StatusLatch3ATop, seq: statusSeq ]}; StatusLatch3ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status2BA."]; StatusLatch3A: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusLatch3A", type: IFUPW.LISTn["GPLatch"], top: StatusLatch3ATop, ctl: LIST["PhA"], in: IFUPW.LISTn["Status2BA."], out: IFUPW.LISTn["Status3AB."], bot: StatusMux3ATop, seq: statusSeq ]}; StatusMux3ATop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", NIL, "Status3AB."]; StatusMux3A: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUMuxRow[ design: design, name: "StatusMux3A", top: StatusMux3ATop, ctl: LIST["PipeFault3AB", "PipeCycle123AB", "PipeAdv3AB", "PipeCCTrap3AB"], in: IFUPW.LISTn["Status3BA.", "Status3BA.", "Status3AB.", "Status3AB."], out: IFUPW.LISTn["Status3B."], bot: StatusLatch3BTop, seq: statusSeq, fixGV: TRUE ]}; StatusLatch3BTop: LIST OF REF = IFUPW.LISTn[ "XBus.", "Status3BA.", "Status3B." ]; StatusLatch3B: PROC[design: CD.Design] RETURNS[cell: IFUPW.ObjName] = { cell _ IFUPW.IFUGPCellRow[ design: design, name: "StatusLatch3B", type: IFUPW.LISTn["GPLatch"], top: StatusLatch3BTop, ctl: LIST["PhB"], in: IFUPW.LISTn["Status3B."], out: IFUPW.LISTn["Status3BA."], bot: StatusBot, seq: statusSeq ]}; StatusBot: LIST OF REF = IFUPW.LISTn[ "XBus."]; newDesign: Rope.ROPE _ IFUAsm.rootName.Cat["Status"]; dataColRows: LIST OF IFUPW.UserProc _ LIST[ StatusBusXForm, StatusMuxLevel3, StatusMuxReschedule, StatusMuxTrapEnable, StatusMuxFPMult, StatusMuxFPAlu, StatusMuxUserMode, StatusLatchB, StatusMuxFromXBus, StatusLatch0A, StatusMux0B, StatusLatch0B, StatusLatch1A, StatusMux1A, StatusLatch1B, StatusDriveToXBus, StatusLatch2A, StatusMux2A, StatusLatch2B, StatusLatch3A, StatusMux3A, StatusLatch3B ]; 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.