IFUPWControl.mesa
Copyright © 1985 by Xerox Corporation. All rights resersed.
Last Edited by: Curry, January 21, 1986 4:38:16 pm PST
DIRECTORY CD, CDFrame, IO, PLAOps, PW, PWRoute, Rope, SymTab;
IFUPWControl: CEDAR DEFINITIONS =
BEGIN
Frame: TYPE = CDFrame.Frame;
DriveRec:  TYPE = RECORD[
name:   ROPE  ← NIL,  -- reference name
nameInv:  ROPE  ← NIL,  -- reference name
drDir:   Dir, 
gate:   DrGate ← pos,
dualOut:  BOOL  ← FALSE,
in:    RelativeSignal ← [ ],
ref:   RelativeSignal ← [pol: pos], -- ph is latch phase
out:   RelativeSignal ← [ ],
pass:   BOOL  ← FALSE ];
RelativeSignal: TYPE = RECORD[ -- relative to reference names
pol:   Polarity ← unk,
ph:   Ph   ← unk,
cycle:   INT  ← unk ];
Ph:    TYPE = {A, B, AB, BA, Ac, Bc, unk};
DrGate:   TYPE = {neg, negAc, negBc, pos};
Dir:    TYPE = {in, out};      -- into control, out to data
Polarity:   TYPE = {pos, neg, unk};    -- into control, out to data
ROPE:   TYPE = Rope.ROPE;
Side:    TYPE = CDFrame.Side;
unk:    INT = -1;
PLADescription:  TYPE = REF PLADescriptionRec; -- specific parameters and handles
PLADescriptionRec: TYPE = RECORD [
name:     ROPE    ← NIL,
design:    CD.Design  ← NIL, -- input if from drivers or file
cell:     CD.Object  ← NIL,
drFrame:    Frame    ← NIL, -- input if from drivers
plaType:    PLAType   ← static, -- input if from drivers
plaSpecFile:   ROPE    ← NIL, -- input if from file
plaInNames:   LIST OF ROPE ← NIL, -- input if from file (optional)
plaOutNames:  LIST OF ROPE ← NIL, -- input if from file (optional)
drSignalOrder:  LIST OF ROPE ← NIL, -- input if from file (optional)
doCompleteSum:  BOOL    ← TRUE, -- optional input
csAddMerges:  BOOL    ← FALSE, -- optional input
csAddConsensus: BOOL    ← FALSE, -- optional input
doMinimization:  BOOL    ← FALSE, -- optional input
timeOutMinutes: CARDINAL  ← 20,  -- optional input
ttt:      PLAOps.PLA  ← NIL, -- specific parameter
termsPerHeader:  INT    ← 1000, -- specific parameter;
smlToBigOut:  XsFormSeq  ← NIL, -- specific parameter
connSeq:    REF ConnSeq  ← NIL, -- specific parameter
nofAndCols:   CARDINAL  ← 0,  -- specific parameter
nofOrCols:   CARDINAL  ← 0,  -- specific parameter
nofTermCols:   CARDINAL  ← 1,   -- static parameter
fullWidthTerms:  BOOL    ← FALSE, -- static parameter
data:     REF    ← NIL ];
RowType: TYPE = {header, xheader, footer, xfooter, conn, dataUp, dataDn, blank, extend};
PLAType: TYPE = {decoder, static, precharged};
XsFormSeq:   TYPE = REF XsFormSeqRec;
XsFormSeqRec:  TYPE = RECORD[SEQUENCE size: CARDINAL OF INT];
ConnSeq:   TYPE = RECORD[SEQUENCE size: CARDINAL OF Connection];
Connection:  TYPE = RECORD[
dr:     REF DriveRec,
index:    INT,
isOutput:   BOOL,
isLeftSide:  BOOL ];
RefToDriverFrame: PROC
[name: ROPE, xory: CDFrame.XorY, data, refRec: REF, unordered: BOOL, initial: DriveRec]
RETURNS[seq: Frame];
AccmPosAndAddDriversBasedOnShellSide:
PROC[drivers: Frame, shell: REF CDFrame.ShellRec, side: Side] RETURNS[Frame];
ReorderFrameBasedOnAvePos: PROC[frame: Frame];
ChanObj: PROC [
layer: CD.Layer,
side: Side,
ref: REF ← NIL,
ph: Ph ← unk,
dim: INT   ← 0,
design: CD.Design ← NIL] RETURNS [cell: CD.Object];
DriverFill: PROC RETURNS[frame: Frame];
DriverExt: PROC[up: BOOLFALSE] RETURNS[frame: Frame];
DriverCell: PROC[plaType: PLAType, drRowType: RowType,
driver: REF DriveRec←NIL, design: CD.Design←NIL] RETURNS[cell: CD.Object];
BuildDrivers:   PROC[frame: Frame, design: CD.Design];
BitNameToSigName: PROC[name: ROPE] RETURNS [ROPE];
ParsePinName:   PROC [name: ROPE] RETURNS [not: BOOL, root: ROPE, ph: Ph];
DriverPinType: TYPE = {in, out0, out1};
DriverPinName:  PROC [type: DriverPinType, driver: REF DriveRec] RETURNS [name: ROPE];
SignalName:  PROC [not: BOOL, positive, negative: ROPE, ph: Ph] RETURNS [name: ROPE];
MakePLA: PROC[
name:  ROPE,   plaType: PLAType, drIn, drInClk, plaIn, drOutClk, drOut: Ph←unk,
design: CD.Design, orCols: INT𡤀,  termCols: INT𡤁,
fullWidthTerms: BOOLFALSE, termsPerHeader: INT ← 1000]
RETURNS[new: Frame];
DrPLA: PROC
[name: ROPE, pla: PLAOps.PLA, plaType: PLAType, plaIn, plaOut, drOut: Ph←unk]
RETURNS[new: Frame];
DrivenPLA: PROC [
drFrame: Frame,  design: CD.Design,
orCols: INT𡤀,  termCols: INT𡤁,
fullWidthTerms: BOOLFALSE, termsPerHeader: INT ← 20]
RETURNS [new: Frame];
XferPins:      PROC [
design:    CD.Design,
template:    PW.Object,
objSide:    Side,
routingLayerDes: Rope.ROPE,
minWidth:   INT]
RETURNS [cell: PW.Object ← NIL];
MergePwrPins: PROC [
design:    CD.Design,
vgTemplate:   PW.Object,
pinTemplate:   PW.Object,
pinTemplateSide: Side,
routingLayerDes: Rope.ROPENIL,
minWidth:   INT ← 0]
RETURNS [cell: PW.Object ← NIL];
IncludeRecursiveInDesign: PROC [design: CD.Design];
DeleteUnusedStaticInDrs: PROC [desc: PLADescription, drs: Frame];
MakeStaticPLASection:  PROC [desc: PLADescription];
BuildFrame: CDFrame.SpecificFrameProc;
END.