-- ChipReticle.mesa
-- last modified by E. McCreight, November 22, 1982 1:40 PM
-- written by E. McCreight, March 18, 1982 5:29 PM
DIRECTORY
ChipNetDefs,
FeaturePST,
LeftFeaturePQ,
ppdefs,
ReticleBandFormat,
StreamDefs;
ChipReticle: DEFINITIONS =
BEGIN OPEN ppdefs, ChipNetDefs;
Masks: TYPE = ExtractLevel;
ReticlePolarity: TYPE = {transparent, opaque};
ReticleUnit: TYPE = ReticleBandFormat.LongCoord;
siliconToReticleFactor: INTEGER = 10;
reticleUnitsPerMicron: ReticleUnit = 2;
coordsPerReticle: Coord = 1000/reticleUnitsPerMicron;
-- a Coord is a nanometer
ReticlePoint: TYPE = RECORD[x, y: ReticleUnit];
ReticleRect: TYPE = RECORD [
x1, x2, y1, y2: ReticleUnit
];
RectsPerBlock: INTEGER = 100;
CoordRectBlockPtr: TYPE = LONG POINTER TO
CoordRectBlock ← NIL;
CoordRectBlock: TYPE = ARRAY[0..RectsPerBlock) OF
CoordRect;
ReticleStatePtr: TYPE = LONG POINTER TO ReticleState ← NIL;
ReticleState: TYPE = RECORD [
mask: Masks,
inReticleSet: BOOLEAN,
slice: FeaturePST.FeaturePSTHandle ← NIL,
-- the slice contains the active features under the scan
-- line, independent of field polarity
fieldPolarity: ReticlePolarity,
-- in the active circuit area, the inactive area (no features)
-- of this mask should be written in this polarity:
-- transparent or opaque.
fieldRect: CoordRect ← [0,0,0,0],
-- if fieldPolarity is transparent, this is the rectangle that
-- should be covered, except where there are active features.
cover: FeaturePST.FeaturePSTHandle ← NIL,
-- the cover is a set of non-overlapping semi-infinite
-- (in .x2) set of rectangles that will be written transparent
-- on the reticle.
designAreaStarted, designAreaFinished: BOOLEAN ← FALSE,
stretch: Coord ← 0,
file: StreamDefs.DiskHandle ← NIL,
block: CoordRectBlockPtr,
lastRect: CoordRect ← [0,0,0,0],
rectCount: LONG INTEGER ← 0
];
makingReticles: BOOLEAN;
ExtractReticles: PROCEDURE[univLp: listPtr];
CoordBox: PROCEDURE[center, diameter: CoordPoint,
offset: CoordPoint ← [0,0]] RETURNS[CoordRect];
InitMaskStates: PROCEDURE[];
maskStates: ARRAY Masks OF ReticleState;
reticleName: PRIVATE STRING;
herald: PRIVATE ReticleBandFormat.HeraldObject;
reticleSize, reticleCenter: PRIVATE CoordPoint;
reticleDesign, alignedDesign: PRIVATE CoordRect;
NoteFeature, ForgetFeature:
PRIVATE PROCEDURE[state: ReticleStatePtr,
f: FeaturePtr];
SetStretches: PRIVATE PROCEDURE[];
CircumscribeAndBeyond: PRIVATE PROCEDURE[
q: LeftFeaturePQ.LeftFeaturePQHandle,
design: CoordRect];
DrawFiducials: PRIVATE PROCEDURE[
q: LeftFeaturePQ.LeftFeaturePQHandle];
FinishMask: PRIVATE PROCEDURE[state: ReticleStatePtr,
mask: Masks,
showMasks: BOOLEAN, screenClip: CoordRect];
WriteCoordRect: PRIVATE PROCEDURE[mask: Masks,
r: CoordRect];
NewReticleFeature: PRIVATE PROCEDURE[cover: CoordRect,
mask: Masks, lq: LeftFeaturePQ.LeftFeaturePQHandle ← NIL]
RETURNS[FeaturePtr];
END. -- of ChipReticle