IFUAsmPCFormBot.mesa
Copyright c 1985 by Xerox Corporation. All rights reserved.
Last Edited by June 5, 1985 1:08:11 am PDT
Curry, December 15, 1985 4:53:54 pm PST
IFUAsmPCFormBot:
CEDAR
PROGRAM
IMPORTS Commander, IFUAsm, IFUPW
EXPORTS IFUAsm =
BEGIN
GND: Rope.ROPE = IFUPW.GND;
VDD: Rope.ROPE = IFUPW.VDD;
pcBotRP: IFUPW.RowParams = IFUPW.IFUDataColNSeq;
OpAlphaBetaBA: LIST OF REF ← IFUPW.LISTn["OpBA.", NIL, "AlphaBA.", "BetaBA."];
PCAdderTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"PCBranchBuf.",
OpAlphaBetaBA,
"PCBA.",
"Sum."];
PCAdder:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUAdderRow[
design: design,
name: "IFUAsmPCFormBot.PCAdder",
rightCtl: LIST[GND, GND, GND, GND],
top: PCAdderTop,
in: IFUPW.LISTn[ "PCBranchBuf.", "PCBA."],
out: IFUPW.LISTn[ "Sum."],
bot: PCSumBLatchTop,
sums: 1,
rp: pcBotRP ]};
PCSumBLatchTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
NIL,
OpAlphaBetaBA,
"PCBA.",
"Sum."];
PCSumBLatch:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCSumBLatch",
type: IFUPW.LISTn["GPLatch"],
top: PCSumBLatchTop,
leftCtl: LIST["PhB", "VBB"],
in: IFUPW.LISTn["Sum."],
out: IFUPW.LISTn["SumB."],
bot: PCBusDriveOffsetTop,
rp: pcBotRP ]};
PCBusDriveOffsetTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"SumB.",
OpAlphaBetaBA,
"PCBA.",
"Sum."];
PCBusDriveOffset:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCBusDriveOffset",
type: IFUPW.LISTn["GPTriDr"],
top: PCBusDriveOffsetTop,
rightCtl: LIST["PCBusSrcOffsetPCBc","not.PCBusSrcOffsetPCBc"],
in: IFUPW.LISTn["Sum."],
out: IFUPW.LISTn["PCBus."],
bot: PCMux1ASetUpTop,
rp: pcBotRP ]};
PCMux1ASetUpTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"SumB.",
OpAlphaBetaBA,
"PCBA.",
"Sum."];
PCMux1ASetUp:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmPCFormBot.PCMux1ASetUp",
rowType: IFUPW.cmosMet2,
topRP: pcBotRP,
top: PCMux1ASetUpTop,
left: NIL,
right: NIL,
bot: PCMux1ATop,
botRP: pcBotRP ]};
PCMux1ATop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"SumB.",
OpAlphaBetaBA,
"PCBA.",
NIL,
GND,
VDD,
"Sum."];
PCMux1A:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmPCFormBot.PCMux1A",
top: PCMux1ATop,
rightCtl:
LIST [
"PCLSPipeSrcHoldLastEntryBA",
"PCLSPipeSrcOldBA",
"PCLSPipeSrcRPPCnewLSBA",
"PCLSPipeSrcOffSetBA"],
in: IFUPW.LISTn["PCPipe1AB.", "PCBA.", "Sum.", "SumB."],
out: IFUPW.LISTn["PCPipe1A."],
bot: PCLatch1ATop,
rp: pcBotRP ]};
PCLatch1ATop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"PCPipe1AB.",
OpAlphaBetaBA,
NIL,
"PCPipe1A."];
PCLatch1A:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCLatch1A",
type: IFUPW.LISTn["GPLatch"],
top: PCLatch1ATop,
leftCtl: LIST["PhA", "VBB"],
in: IFUPW.LISTn["PCPipe1A."],
out: IFUPW.LISTn["PCPipe1AB."],
bot: PCLatch1BTop,
rp: pcBotRP ]};
PCLatch1BTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"PCPipe1AB.",
OpAlphaBetaBA];
PCLatch1B:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCLatch1B",
type: IFUPW.LISTn["GPLatch"],
top: PCLatch1BTop,
leftCtl: LIST["NotPipe1CycBc", "VBB"],
in: IFUPW.LISTn["PCPipe1AB."],
out: IFUPW.LISTn["PCPipe1BA."],
bot: PCLatch2ATop,
rp: pcBotRP ]};
PCLatch2ATop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"PCPipe1BA.",
OpAlphaBetaBA];
PCLatch2A:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCLatch2A",
type: IFUPW.LISTn["GPLatch"],
top: PCLatch2ATop,
leftCtl: LIST["PhA", "VBB"],
in: IFUPW.LISTn["PCPipe1BA."],
out: IFUPW.LISTn["PCPipe2AB."],
bot: PCLatch2BTop,
rp: pcBotRP ]};
PCLatch2BTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"PCPipe2AB.",
OpAlphaBetaBA];
PCLatch2B:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCLatch2B",
type: IFUPW.LISTn["GPLatch"],
top: PCLatch2BTop,
leftCtl: LIST["NotPipe2CycBc", "VBB"],
in: IFUPW.LISTn["PCPipe2AB."],
out: IFUPW.LISTn["PCPipe2BA."],
bot: PCLatch3ATop,
rp: pcBotRP ]};
PCLatch3ATop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
NIL,
OpAlphaBetaBA,
"PCPipe2BA."];
PCLatch3A:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCLatch3A",
type: IFUPW.LISTn["GPLatch"],
top: PCLatch3ATop,
leftCtl: LIST["PhA", "VBB"],
in: IFUPW.LISTn["PCPipe2BA."],
out: IFUPW.LISTn["PCPipe3AB."],
bot: PCMux3BTop,
rp: pcBotRP ]};
PCMux3BTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
NIL,
OpAlphaBetaBA,
"PCPipe3AB."];
PCMux3B:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmPCFormBot.PCMux3B",
top: PCMux3BTop,
leftCtl: LIST["Pipe3FaultAB", "Pipe3AdvAB", "Pipe3TrapAB"],
in: IFUPW.LISTn["PCPipe3BA.", "PCPipe3AB.", "PCPipe3AB."],
out: IFUPW.LISTn["PCPipe3B."],
bot: PCLatch3BTop,
rp: pcBotRP ]};
PCLatch3BTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"PCPipe3BA.",
OpAlphaBetaBA,
NIL,
"PCPipe3B."];
PCLatch3B:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCLatch3B",
type: IFUPW.LISTn["GPLatch"],
top: PCLatch3BTop,
leftCtl: LIST["NotPipe3CycBc", "VBB"],
in: IFUPW.LISTn["PCPipe3B."],
out: IFUPW.LISTn["PCPipe3BA."],
bot: PCDrivePipe3Top,
rp: pcBotRP ]};
PCDrivePipe3Top:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"PCPipe3BA.",
OpAlphaBetaBA];
PCDrivePipe3:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCDrivePipe3",
type: IFUPW.LISTn["GPTriDr"],
top: PCDrivePipe3Top,
rightCtl: LIST["PCBusSrcPipe3Bc","not.PCBusSrcPipe3Bc"],
in: IFUPW.LISTn["PCPipe3BA."],
out: IFUPW.LISTn["PCBus."],
bot: PCDriveStkTop,
rp: pcBotRP ]};
PCDriveStkTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
"PCBus.",
"PCPipe3BA.",
OpAlphaBetaBA];
PCDriveStk:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCDriveStk",
type: IFUPW.LISTn["GPTriDr"],
top: PCDriveStkTop,
rightCtl: LIST["PCBusSrcStackBc","not.PCBusSrcStackBc"],
in: IFUPW.LISTn["PCStkTopAB."],
out: IFUPW.LISTn["PCBus."],
bot: PCAdjust1Top,
rp: pcBotRP ]};
PCAdjust1Top:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
NIL,
"PCPipe3BA.",
OpAlphaBetaBA,
PCAdjust1:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.SwitchBoxRow[
design: design,
name: "IFUAsmPCFormBot.PCAdjust1",
rowType: IFUPW.cmosMet2,
topRP: pcBotRP,
top: PCAdjust1Top,
left: NIL,
right: NIL,
bot: PCStackWtMuxTop,
botRP: pcBotRP ]};
PCStackWtMuxTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
OpAlphaBetaBA,
"PCPipe3BA.",
NIL,
"PCStkTopAB."];
PCStackWtMux:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmPCFormBot.PCStackWtMux",
top: PCStackWtMuxTop,
rightCtl: LIST["X1ADstStackBA", "NotX1ADstStackBA"],
in: IFUPW.LISTn["XBus.", "PCPipe3BA."],
out: IFUPW.LISTn["PrePCStackWtDataA."],
bot: PCStackWtBufTop,
rp: pcBotRP ]};
PCStackWtBufTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
OpAlphaBetaBA,
NIL,
"PrePCStackWtDataA.",
"PCStkTopAB."];
PCStackWtBuf:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCStackWtBuf",
type: IFUPW.LISTn["GPBuf"],
top: PCStackWtBufTop,
in: IFUPW.LISTn["PrePCStackWtDataA."],
out: IFUPW.LISTn["PCStackWtDataA."],
bot: PCStackXBusDrTop,
rp: pcBotRP ]};
PCStackXBusDrTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
OpAlphaBetaBA,
NIL,
"PCStackWtDataA.",
"PCStkTopAB."];
PCStackXBusDr:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCStackXBusDr",
type: IFUPW.LISTn["GPTriDr"],
top: PCStackXBusDrTop,
rightCtl: LIST["X1ASrcStackPBA","NotX1ASrcStackPBA"],
in: IFUPW.LISTn["PCStkTopAB."],
out: IFUPW.LISTn["XBus."],
bot: PCStackRdLatchATop,
rp: pcBotRP ]};
PCStackRdLatchATop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
OpAlphaBetaBA,
NIL,
"PCStackWtDataA.",
"PCStkTopAB."];
PCStackRdLatchA:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCStackRdLatchA",
type: IFUPW.LISTn["GPLatch"],
top: PCStackRdLatchATop,
leftCtl: LIST["PhA", "VBB"],
in: IFUPW.LISTn["SelPCStackRdDataA."],
out: IFUPW.LISTn["PCStkTopAB."],
bot: PCStackRdMuxTop,
rp: pcBotRP ]};
PCStackRdMuxTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
OpAlphaBetaBA,
"SelPCStackRdDataA.",
"PCStackWtDataA." ];
PCStackRdMux:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUMuxRow[
design: design,
name: "IFUAsmPCFormBot.PCStackRdMux",
top: PCStackRdMuxTop,
rightCtl: LIST["Push3BA", "NotPush3BA"],
in: IFUPW.LISTn["PCStackWtDataA.", "PCStackRdDataA."],
out: IFUPW.LISTn["SelPCStackRdDataA."],
bot: PCStackRdPreChargeTop,
rp: pcBotRP ]};
PCStackRdPreChargeTop:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
OpAlphaBetaBA,
NIL,
"PCStackWtDataA.",
"PCStackRdDataA."];
PCStackRdPreCharge:
PROC[design:
CD.Design]
RETURNS[cellName:
CD.Object] = {
cellName ←
IFUPW.IFUGPCellRow[
design: design,
name: "IFUAsmPCFormBot.PCStackRdPreCharge",
type: IFUPW.LISTn["GPPreChg"],
top: PCStackRdPreChargeTop,
leftCtl: LIST["PhB"],
in: NIL,
out: IFUPW.LISTn["PCStackRdDataA."],
bot: PCFormBotBot,
rp: pcBotRP ]};
PCFormBotBot:
LIST
OF
REF =
IFUPW.LISTn[
"XBus.",
OpAlphaBetaBA,
NIL,
"PCStackWtDataA.",
"PCStackRdDataA."];
module: Rope.ROPE ← "IFUAsmPCFormBot";
PCFormBot:
PUBLIC
IFUPW.Frame ←
IFUPW.
NFSFUP[module, y,
LIST[
PCAdder,
PCSumBLatch,
PCBusDriveOffset,
PCMux1ASetUp,
PCMux1A,
PCLatch1A,
PCLatch1B,
PCLatch2A,
PCLatch2B,
PCLatch3A,
PCMux3B,
PCLatch3B,
PCDrivePipe3,
PCDriveStk,
PCAdjust1,
PCStackWtMux,
PCStackWtBuf,
PCStackXBusDr,
PCStackRdLatchA,
PCStackRdMux,
PCStackRdPreCharge ] ];
PCFormBotCT: Commander.CommandProc =
{IFUPW.AssembleFrame[IFUAsm.RefDesign[], PCFormBot, cmd ] };
Commander.Register [proc: PCFormBotCT, key: module];
END.