<> <> <> <> <> <> <> DIRECTORY CD USING [Layer, Number, Object, Rect, Technology, Transformation], SX USING [Circuit, CircuitNode, Constraint, ConstraintArray, ConstraintIndex, ConstraintResolution, ConversionProc, SpinifexLayerIndex, TechHandle], SXOutput USING [LinkageHousekeeper, LinkagePrintProc], SXQuadTree USING [RectDelta] ; SXTechnology: CEDAR DEFINITIONS ~ BEGIN <<-- Asymetric rectangle extenders, WNEGrow, NESGrow, ESWGrow, SWNGrow, WNGrow.>> WNEGrow: PROCEDURE [ x: INT] RETURNS [SXQuadTree.RectDelta] ~ INLINE { RETURN [[x, 0, x, x]] }; NESGrow: PROCEDURE [ x: INT] RETURNS [SXQuadTree.RectDelta] ~ INLINE { RETURN [[0, x, x, x]] }; ESWGrow: PROCEDURE [ x: INT] RETURNS [SXQuadTree.RectDelta] ~ INLINE { RETURN [[x, x, x, 0]] }; SWNGrow: PROCEDURE [ x: INT] RETURNS [SXQuadTree.RectDelta] ~ INLINE { RETURN [[x, x, 0, x]] }; WNGrow: PROCEDURE [ x: INT] RETURNS [SXQuadTree.RectDelta] ~ INLINE { RETURN [[x, 0, 0, x]] }; TransistorMaterial: TYPE ~ { nothing, diffusion, polysilicon, postProcess }; PerDrawRectProc: TYPE ~ PROCEDURE [r: CD.Rect, l: CD.Layer, data: REF ANY] RETURNS [TransistorMaterial]; ReportDifProc: TYPE ~ PROCEDURE [difNode: REF SX.CircuitNode, r: CD.Rect, l: CD.Layer]; ProcessMosTransistor: PROCEDURE [ob: CD.Object, trans: CD.Transformation, cir: REF SX.Circuit, difSpinifex, polSpinifex: SX.SpinifexLayerIndex, difChannel, channelEdge: REF SX.Constraint, difChanSep, difToPolSep: CD.Number, PerDrawRect: PerDrawRectProc, data: REF ANY _ NIL, PostProcessor: ReportDifProc _ NIL] RETURNS [gateNode: REF SX.CircuitNode, sourceDrainNodes: LIST OF REF SX.CircuitNode, sourceDrainCount: INTEGER]; --requirement: transistors must not depend on instance properties <<-- ResolutionTable & SetUpResolution are aids to technology dependent clients in constructing ConstraintResolution ARRAYs. The First row and column of the ResolutionTable list ConstraintIndices (in any order). The inner entries of the table indicate the index of the constraint to be applied when the corresponding pair of constraints in the first column and row overlap.>> <<-- An important attribute of resolution is that they are commutative and associative.>> ResolutionTable: TYPE ~ ARRAY SX.ConstraintIndex OF ARRAY SX.ConstraintIndex OF SX.ConstraintIndex; SetUpResolution: PROCEDURE [constrArray: REF SX.ConstraintArray, res: ResolutionTable] RETURNS [REF SX.ConstraintResolution]; <<-- technologyHandle should be considered readonly after registering.>> RegisterTechnologyHandle: PROCEDURE [cdTech: CD.Technology, technologyHandle: REF SX.TechHandle]; RegisterSpinifexObjectProcs: PROCEDURE [cdTech: CD.Technology, objectType: ATOM, conv: SX.ConversionProc, thyme, rose: SXOutput.LinkagePrintProc _ NIL, fini: SXOutput.LinkageHousekeeper _ NIL]; GetCircuitFromCDObject: PROCEDURE [cdOb: CD.Object] RETURNS [REF SX.Circuit]; END. <> <> <> <> <> <> <> <> <> <> <> <> <> <<>>