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: BOOL ← FALSE] 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:
BOOL←
FALSE, 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:
BOOL←
FALSE, 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.ROPE ← NIL,
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.