PWCP:
CEDAR
DEFINITIONS =
BEGIN
ROPE: TYPE = Rope.ROPE;
AllTiles: TYPE = REF AllTilesRec;
AllTilesRec:
TYPE =
RECORD[
rowTab: PWPLA.ProgTile, -- set of core tiles arranged in an array
-- tiles outside of the core of the PLA, and extra tiles in the core
Aul, AUleft, ADleft, All, ALtop, ARtop, ALbot, ARbot, AHleft, ALH, ARH, AHV, AVtop, AUV, ADV, AVbot, Btop, BU, BD, BH, Bbot, OLtop, ORtop, Our, OUright, ODright, Olr, ORbot, OLbot, OVtop, OUV, ODV, OHV, OVbot, OLH, ORH, OHright,
-- major tiles in the core of the PLA
AUL1, AUL0, AULx, AUR1, AUR0, AURx, ADL1, ADL0, ADLx, ADR1, ADR0, ADRx, OUL1, OUL0, OUR1, OUR0, ODL1, ODL0, ODR1, ODR0: PW.ObjName ← NIL];
-- Control part, i.e. several small PLAs sharing their input lines
CPDescription: TYPE = REF CPDescriptionRec;
CPDescriptionRec:
TYPE =
RECORD [
truthTableFile: ROPE ← NIL,
truthTable: BoolOps.TruthTable ← NIL,
truthTables: LIST OF BoolOps.TruthTable ← NIL, -- after separation, but the names of inputs and outputs should really be in the tt
tileSet: ROPE ← NIL,
optimize: BOOL ← FALSE,
haveHorizontalExtras, haveVerticalAndExtras, haveVerticalOrExtras: BOOL ← FALSE,
extraRows, extraAndColumns, extraOrColumns: INT ← INT.LAST-100, -- SPACING (in number of minterms) between extra ground rows and columns; large => no extra
printRows: INT ← 5, -- If PLA has more than this many rows, list them on the screen.
dumpFile: ROPE ← NIL, -- if non-NIL then truth table (after optimization) -> dumpFile.
inputNames: LIST OF ROPE ← NIL, -- every input MUST be named
outputs: LIST OF LIST OF ROPE -- outputs grouped by PLAs
];
-- create a PLA from a file description
CreateCPFromFile: PUBLIC PROC [design: CD.Design, fileName: ROPE] RETURNS [cp: PW.ObjName];
-- create a PLA from a record
CreateCP: PROC [design: CD.Design, desc: CPDescription, allTiles: PWPLA.AllTiles] RETURNS [cp: PW.ObjName];
END.