<> <> <> <> <> <> <> DIRECTORY CD, Core, CoreFlat, CoreStructuralComparison, OneToOne, RefTab, SymTab; PWCoreLichen: CEDAR DEFINITIONS = BEGIN <> <> <> CellType: TYPE = Core.CellType; Wire: TYPE = Core.Wire; ROPE: TYPE = Core.ROPE; Properties: TYPE = Core.Properties; Wires: TYPE = Core.Wires; TransistorTolerances: TYPE = CoreStructuralComparison.TransistorTolerances; <> Compare: PROC [root: CellType, context: Context, ttols: TransistorTolerances _ wideTransistorTolerances] RETURNS [allOK: BOOL]; <> <> <> <> CompareForTheRestOfUs: PROC [root: CellType, design: CD.Design, precision: REAL _ 0.90] RETURNS [allOK: BOOL]; <> <> < perfect match; precision=0 => don't care; default is 90%>> Context: TYPE ~ RECORD [ design: CD.Design, root: CellType _ NIL, path: CoreFlat.FlatCellTypeRec _ CoreFlat.rootCellType ]; wideTransistorTolerances: READONLY TransistorTolerances; tightTransistorTolerances: READONLY TransistorTolerances; TolerancesSpec: TYPE ~ RECORD [length, width: REAL _ 0.0]; < 0 specifies a ratio. We're not being careful about what's in the numerator vs. what's in the denominator.>> transistorTolerancesProp: READONLY ATOM --$LichenTransistorTolerances--; < 0 specifies the tolerance used `below' that point. Actually that's a bit of a lie --- the tolerances used in a subtree are determined by some path from the root --- no guarantees about which path.>> RefineTolerances: PROC [propval: REF ANY, inherit: TransistorTolerances] RETURNS [TransistorTolerances]; FormatTolerances: PROC [TransistorTolerances] RETURNS [ROPE]; BadRoot: SIGNAL [root: CellType]; <> Message: SIGNAL [msg: ROPE]; <> FoundProblems: SIGNAL [source, extracted: CellType]; <> ForgetComparisons: PROC [root: CellType]; <> GlobalForget: PROC; <> SetAutomorphismHack: PROC [enabled: BOOL]; <> GetAutomorphismHack: PROC RETURNS [enabled: BOOL]; SetQuitEarly: PROC [may: BOOL]; GetQuitEarly: PROC RETURNS [may: BOOL]; DisplayStats: PROC; trace: SymTab.Ref; GetConstraints: PROC [subroot: CellType] RETURNS [RefTab.Ref]; <> END.