IFUAsmStatus:
CEDAR
PROGRAM
IMPORTS Commander, IFUAsm, IFUPW, Rope =
BEGIN
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
statusSeqTop: BOOL ← FALSE;
statusSeq: BOOL ← TRUE;
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: "IFUAsmStatus.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: "IFUAsmStatus.StatusMuxLevel3",
top: StatusMuxLevel3Top,
rightCtl: 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: "IFUAsmStatus.StatusMuxReschedule",
top: StatusMuxRescheduleTop,
leftCtl: 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: "IFUAsmStatus.StatusMuxTrapEnable",
top: StatusMuxTrapEnableTop,
leftCtl: 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: "IFUAsmStatus.StatusMuxFPMult",
top: StatusMuxFPMultTop,
leftCtl: 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: "IFUAsmStatus.StatusMuxFPAlu",
top: StatusMuxFPAluTop,
leftCtl: 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: "IFUAsmStatus.StatusMuxUserMode",
top: StatusMuxUserModeTop,
leftCtl: 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: "IFUAsmStatus.StatusLatchB",
type: IFUPW.LISTn["GPLatch"],
top: StatusLatchBTop,
leftCtl: LIST["PhB", "VBB"],
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: "IFUAsmStatus.StatusMuxFromXBus",
identity: FALSE,
top: StatusMuxFromXBusTop,
bot: StatusLatch0ATop,
leftCtl: 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: "IFUAsmStatus.StatusLatch0A",
type: IFUPW.LISTn["GPLatch"],
top: StatusLatch0ATop,
leftCtl: LIST["PhA", "VBB"],
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: "IFUAsmStatus.StatusMux0B",
top: StatusMux0BTop,
leftCtl: 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: "IFUAsmStatus.StatusLatch0B",
type: IFUPW.LISTn["GPLatch"],
top: StatusLatch0BTop,
leftCtl: LIST["PhB", "VBB"],
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: "IFUAsmStatus.StatusLatch1A",
type: IFUPW.LISTn["GPLatch"],
top: StatusLatch1ATop,
leftCtl: LIST["PhA", "VBB"],
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: "IFUAsmStatus.StatusMux1A",
top: StatusMux1ATop,
leftCtl: 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: "IFUAsmStatus.StatusLatch1B",
type: IFUPW.LISTn["GPLatch"],
top: StatusLatch1BTop,
leftCtl: LIST["PhB", "VBB"],
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: "IFUAsmStatus.StatusDriveToXBus",
type: IFUPW.LISTn["GPTriDr"],
top: StatusDriveToXBusTop,
leftCtl: 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: "IFUAsmStatus.StatusLatch2A",
type: IFUPW.LISTn["GPLatch"],
top: StatusLatch2ATop,
leftCtl: LIST["PhA", "VBB"],
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: "IFUAsmStatus.StatusMux2A",
top: StatusMux2ATop,
leftCtl: 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: "IFUAsmStatus.StatusLatch2B",
type: IFUPW.LISTn["GPLatch"],
top: StatusLatch2BTop,
leftCtl: LIST["PhB", "VBB"],
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: "IFUAsmStatus.StatusLatch3A",
type: IFUPW.LISTn["GPLatch"],
top: StatusLatch3ATop,
leftCtl: LIST["PhA", "VBB"],
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: "IFUAsmStatus.StatusMux3A",
top: StatusMux3ATop,
leftCtl: 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: "IFUAsmStatus.StatusLatch3B",
type: IFUPW.LISTn["GPLatch"],
top: StatusLatch3BTop,
leftCtl: LIST["PhB", "VBB"],
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.