DIRECTORY CD USING [Design, Object], PLAOps USING [PLA, Term], PW USING [UserProc], Rope USING [ROPE], SymTab USING [Ref]; PWPLAStack: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; RopeList: TYPE = LIST OF ROPE; PLADescription: TYPE = REF PLADescriptionRec; PLADescriptionRec: TYPE = RECORD [ plaSpecFile: ROPE _ NIL, symTab: SymTab.Ref _ NIL, tttFile: ROPE _ NIL, pla: PLAOps.PLA _ NIL, inputNames: LIST OF ROPE _ NIL, outputNames: LIST OF ROPE _ NIL, passInNames: LIST OF ROPE _ NIL, passOutNames: LIST OF ROPE _ NIL, signalOrder: LIST OF ROPE _ NIL, connSeq: ConnSeq _ NIL, design: CD.Design _ NIL, tileDefDesign: CD.Design _ NIL, glueTiles: GlueTiles _ NIL, andTiles: NormalTiles _ NIL, orTiles: NormalTiles _ NIL, nofAndCols: CARDINAL _ 0, nofOrCols: CARDINAL _ 0, nofRows: CARDINAL _ 0, nextTerm: PLAOps.Term _ NIL, nextConn: INT _ 0, rows: RowsRef _ NIL, smlToBigOut: XsFormSeq _ NIL, param: PLAParams _ NIL ]; PLAParams: TYPE = REF PLAParamsRec; PLAParamsRec: TYPE = RECORD [ tileSet: ROPE _ NIL, rowsPerHeader: INT _ Never, -- SPACING between header rows; insPerExtra: INT _ Never, -- SPACING between extra columns; outsPerExtra: INT _ Never, -- SPACING between extra columns; doCompleteSum: BOOL _ TRUE, csAddMerges: BOOL _ FALSE, csAddConsensus: BOOL _ FALSE, doMinimization: BOOL _ FALSE, timeOutMinutes: CARDINAL _ 20 ]; RowsRef: TYPE = REF RowsRec; RowsRec: TYPE = RECORD[SEQUENCE size: CARDINAL OF RowRef]; RowRef: TYPE = REF RowRec; RowRec: TYPE = RECORD[ type: RowType, and: ColSeqRef, or: ColSeqRef ]; ColSeqRef: TYPE = REF ColSeqRec; ColSeqRec: TYPE = RECORD[SEQUENCE size: CARDINAL OF NormalCellType]; XsFormSeq: TYPE = REF XsFormSeqRec; XsFormSeqRec: TYPE = RECORD[SEQUENCE size: CARDINAL OF INT]; ConnSeq: TYPE = REF ConnSeqRec; ConnSeqRec: TYPE = RECORD[SEQUENCE size: CARDINAL OF Connection]; Connection: TYPE = RECORD[ index: INT, isOutput: BOOL, isLeftSide: BOOL ]; NormalTiles: TYPE = REF NormalTilesRec; GlueTiles: TYPE = REF GlueTilesRec; NormalTilesRec: TYPE = ARRAY RowType OF ARRAY NormalCellType OF CD.Object; GlueTilesRec: TYPE = ARRAY RowType OF ARRAY GlueCellType OF CD.Object; RowType: TYPE = {header, conn, dataUp, dataDn}; NormalCellType: TYPE = {left, right, nc, extra}; GlueCellType: TYPE = {leftSide, between, rightSide}; Never: INT = INT.LAST-100; CreatePLAFromDesc: PROC [desc: PLADescription] RETURNS [plaCell: CD.Object]; PWPLAStackProc: PW.UserProc; END. FPWPLAStack.mesa Copyright c 1985 by Xerox Corporation. All rights resersed. Last Edited by: Curry, September 3, 1985 7:32:27 am PDT This module (really just one main procedure: CreatePLAFromDesc) builds self timed PLA's by stacking up rows of one of 6 types {preChargeHeader, term, input contact, output contact, passIn and passOut}. This allows inputs and outputs to be intermixed in any order along one side. The layout format enables PLA's above and below to also use the same set of inputs. Therefore it is not required that each PLA provide input contacts to all the inputs used. The other procedure declared here, PWPLAStackProc, calls CreatePLAFromDesc after requesting the name of a .plaspec file. InstrDecode.plaSpec Example specification file: InstrDecode.plaSpec Example typed truth table file: InstrDecode.ttt Κ˜šΠbl™Jšœ Οmœ1™