FILE: Flow.mesa
Last edited by Ousterhout, August 23, 1983 2:09 pm
Christian LeCocq April 11, 1986 5:23:21 pm PST
This file defines several routines used by Crystal to control the direction of information flow through transistors.
DIRECTORY
Globals,
Hash,
Rope;
Flow: CEDAR DEFINITIONS =
BEGIN
OPEN Globals;
Mark: CmdProc;
This procedure scans the entire network structure, marking each transistor with the direction(s) that information can flow through the transistor. The marks are set with the flowFromSource and flowFromDrain flags. Flow can occur in a particular direction if there is an information source (chip input) on one side of the transistor, an information sink (output or transistor gate) on the other side, and no conflicting flow attribute. As an additional side effect, this routine turns fetNEnh transistors into fetNEnhP transistors or vice versa, depending on whether there is a load attached to the gate (no load means it's driven through a pass transistor).
Build: PROC[fet: Fet, name: Rope.ROPE, source: BOOLEAN];
This procedure creates a flow by the given name for the given fet. The flow is attached to the transistor's source if source is TRUE, otherwise it is attached to the transistor's drain.
Lock: PROC[fet: Fet, input: Node] RETURNS [BOOLEAN];
This procedure sees if it is OK for information to flow into fet from input, given the other flow locks that are currently set. TRUE is returned if it is OK; in this case, information is set in any flows atached to the transistor to show that they are locked. If a conflicting flow lock is already set, then FALSE is returned and nothing is modified in the flows.
Unlock: PROC[fet: Fet, input: Node];
This is the inverse of Lock. It clears all lock information left by the corresponding call to Lock.
FlowCmd: CmdProc;
This procedure takes as arguments one of the keywords "in", "out", "off", "ignore", or "normal", and one or more flow names. Each of the named flows is marked according to the keyword. "In" means only let information flow in at this attribute, "out" means only let information flow out at this attribute, "ignore" means completely ignore this attribute, and "off" means don't let information flow at all through transistors labelled with this flow attribute. "Normal" means go back to the standard interpretation of the flow attribute.
Stats: PROC[];
Prints out internally-gathered statistics.
FlowTable: Hash.Table
Contains all Flows known to Crystal.
END.