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
DIRECTORY
CD,
Commander,
IFUAsm,
IFUPW,
Rope;
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 REFIFUPW.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,
"PCStkTopAB."];
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.