<> <> <> <<>> <<-- Make a Control Part, i.e. a set of PLAs sharing the input lines.>> DIRECTORY BoolOps, CD, Rope USING [ROPE], PW, PWPLA; 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.