DIRECTORY CD, Rope, SymTab; CDDesignRules: CEDAR DEFINITIONS = BEGIN DesignRules: TYPE = REF DesignRulesRep; DesignRulesRep: PRIVATE TYPE; NotKnown: ERROR; FindRules: PROC[a: ATOM] RETURNS [dr: DesignRules]; MinWidth: PROC [dr: DesignRules, layer: CD.Layer] RETURNS [CD.Number]; MinDist: PROC [dr: DesignRules, l1, l2: CD.Layer] RETURNS [CD.Number]; MinConnectedDist: PROC [dr: DesignRules, l1, l2: CD.Layer] RETURNS [CD.Number]; GetTechnology: PROC [DesignRules] RETURNS [CD.Technology]; GetLayer: PROC [technology, layer: REF] RETURNS [CD.Layer] = INLINE { CDSimpleRules.GetLayer[technology, layer] }; Rect: PROC [size: CD.Position, layer: CD.Layer] RETURNS [CD.Object] = INLINE { CDSimpleRules.Rect[size, layer] }; Contact: PROC [dr: DesignRules, l1, l2: CD.Layer, size: CD.Position] RETURNS [CD.Object]; Transistor: PROC [dr: DesignRules, difL: CD.Layer, w, l: CD.Number] RETURNS [CD.Object]; LayerOk: PROC [dr: DesignRules, layer: CD.Layer] RETURNS [BOOL]; ObjectClassOk: PROC [dr: DesignRules, class: CD.ObjectClass] RETURNS [OKness]; OKness: TYPE = {yes, no, depends}; ObjectOk: PROC [dr: DesignRules, ob: CD.Object] RETURNS [BOOL]; DummyConnectorCell: PROC [dr: DesignRules, ob: CD.Object] RETURNS [--READONLY--CD.Object]; DummyGateCell: PROC [dr: DesignRules, trans: CD.Object] RETURNS [--READONLY--CD.Object]; TransistorRatio: PROC [trans: CD.Object] RETURNS [w, l: CD.Number]; NeedSurround: PROC [layer: CD.Layer] RETURNS [surList: LIST OF LayerAndDistance]; LayerAndDistance: TYPE = RECORD [layer: CD.Layer, amount: CD.Number]; WellConnectMaximalDistance: PROC [dr: DesignRules, layer: CD.Layer] RETURNS [n: CD.Number]; WellConnectMaximalSquares: PROC [dr: DesignRules, layer: CD.Layer] RETURNS [n: INT]; Flattness: PROC [dr: DesignRules, ob: CD.Object] RETURNS [LIST OF FlattnessArea]; FlattnessArea: TYPE = RECORD[where: LIST OF CD.Rect, condition: LIST OF PerLayer]; PerLayer: TYPE = RECORD [layer: CD.Layer, avoid, surround: CD.Numberr]; SpecialRule: PROC [dr: DesignRules, rule: ATOM, x: REF] RETURNS [REF]; PutProp: PROC [dr: DesignRules, prop: REF, val: REF]; GutProp: PROC [dr: DesignRules, prop: REF] RETURNS [val; REF]; ImplementSpecialRule: PROC [dr: DesignRules, rule: ATOM, proc: PROC [DesignRules, ATOM, REF] RETURNS [REF]]; ImplementDesignRules: PROC [key: ATOM, technology: CD.Technology, rules: SOME MAGIC ] RETURNS [designrules: DesignRules]; END. ΌCDDesignRules.mesa (part of ChipNDale) Copyright c 1985 by Xerox Corporation. All rights reserved. by Christian Jacobi, July 5, 1985 4:58:37 pm PDT Last Edited by Christian Jacobi, November 14, 1985 11:33:52 am PST This module provides the design rules Design-rules are logical sub-classes of technologies; A technology may fulfill different Design-rules Basics --NIL if not found Distance rules -- Minimum width of conductors. -- (Width of interrest rect). -- Minimum distance between unconnected conductors. -- 0 if no interaction. -- Error if l1 and l2 from different technologies. -- (Distance of interrest rects). -- Minimum distance between connected conductors. -- 0 if no interaction. -- Error if l1 and l2 from different technologies. -- (Distance of interrest rects). Object generators -- Tries to figure out a layer, given names. -- Use only to get technology specific names. -- A little bit more forgiving than CD.FetchLayer... -- Error if not known. -- size: interest rect -- nil if certain complication or no contact possible... -- use CD.InterestRect to get size; -- CHECK size: procedure may make approximations ! -- nil if some complication or no contact possible... -- w and l are gate width and length, not object size -- procedure may make approximations if the technology considers the aequivalent -- use CD.InterestRect to get object size; Getting information on the inside --returns a dummy cell which is NOT part of the design --dummy cell must not be modified --dummy cell has symbolic object denoting the interconnect area --returns a dummy cell which is NOT part of the design --dummy cell must not be modified --dummy cell has symbolic object denoting the gate area --not size ! Well surround rules -- treat surList as READONLY --positive means grow -- 0 if connection not necessary or has a square rule -- layer must be a well layer -- you must know to what node to connect by some other mean -- 0 if connection not necessary or has a constant rule -- layer must be a well layer -- you must know to what node to connect by some other mean Flattness rules --treat result as READONLY --Each FlattnessArea is independent from each other FlattnessArea; all must be satisfied --each point described by where must fullfill all conditions --avoid, surround >0 means grow, <0 means shrink --the layer is either to be comletely surrounded by surround or avoided by avoid -- ok this can not describe minimum distance or surround conditions, -- but use minimum distance or surround rules to describe those requirements! Escape --returns NIL if not specified --rule: manual registration --prop must fulfill regstration rules of CDProperties Implementors procedures --error if redefined Κ³˜codešœ&™&Kšœ Οmœ1™Kšœ5™5—K™K™K™KšŸ™K˜š œžœžœžœžœžœžœžœ˜lK™—š œžœžœ˜'Jšœ žœ ˜Jšœžœž˜šœžœ˜%K™——K˜Kšžœ˜K˜—…— jΩ