DIRECTORY DrotBool, DrotCover, Core; Drot: CEDAR DEFINITIONS ~ BEGIN OPEN DrotBool; CellTypeFromExpressions: PROC [outputs: LIST OF ROPE, fanout: INT _ 4] RETURNS [Core.CellType]; BoolTreeFromExpressionList: PROC [outputs: LIST OF ROPE, includeGlobalVariablesp: BOOL _ FALSE] RETURNS [tree: Dag]; AugmentBoolTreeBySingleExpression: PROC [tree: Dag, output: ROPE]; MakeNewBoolTree: PROC [] RETURNS [tree: Dag]; MakeNewVariableNode: PROC [tree: Dag, name: ROPE] RETURNS [newNode: Node]; MakeNewNotNode: PROC [tree: Dag, node: Node] RETURNS [newNode: Node]; MakeNewOrNode: PROC [tree: Dag, nodes: LIST OF Node] RETURNS [newNode: Node]; MakeNewAndNode: PROC [tree: Dag, nodes: LIST OF Node] RETURNS [newNode: Node]; NameNode: PROC [node: Node, name: ROPE]; MakeOutputNode: PROC [tree: Dag, node: Node]; CreateCellTypeFromDag: PROC [tree: Dag, fanout: INT _ 4] RETURNS [Core.CellType]; RemoveDuplicateNodes: PROC [tree: Dag] RETURNS[modified: BOOL]; ReduceFanout: PROC [tree: Dag, fout: INT]; TwoifyTree: PROC [tree: Dag]; END. τDrot.mesa Copyright Σ 1987 by Xerox Corporation. All rights reserved. Csaba Gabor August 19, 1987 8:19:18 pm PDT Bertrand Serlet August 21, 1987 2:29:59 pm PDT Generating Cells From Ropes What it does Syntax: output == variable assignment expression assignment == _ / = expression == variable | ~expression | (expression) | expression + expression | expression * expression The order of precedence is ~, *, + Parsing step Given a list of expressions, this will return a Dag which is a representation for this set of expressions. Each gate is represented as a node (as are inputs) with the inputs to a gate being its children. Given a single expression and a Dag, this will cause that expression to be incorporated into the Dag. Building a Dag This creates a new Dag with no children This creates a new node in tree which is treated as an input node with name the given name. This creates a new node in tree which is the not of node. This creates a new node in tree which is the OR of all the nodes in the list of nodes. This creates a new node in tree which is the AND of all the nodes in the list of nodes. This assigns the specified name to the specified node. This is useful for later referencing that node by name. This causes the specified node to be viewed as one of the outputs. Creating CellType from Dag This takes as input a tree (and fanout limitation) and returns the cell type generated. Currently, since there is only one library, the covering functions are internally generated. This is the main routine (the control) I think that what this is supposed to do is get rid of any duplicate expressions within the tree -- This splits nodes in tree where the fanout is greater than fout-- This will yield a tree where each node has fan-in at most 2 -- Κ}– "cedar" style˜codešœ ™ K™—K˜——Kšœ˜K˜—…— y