DIRECTORY Atom, ParserErrorDefs, PartitionDefs, Rope; MPCDefs: CEDAR DEFINITIONS = BEGIN MPCDescriptor: TYPE = RECORD [ title, date, account: Rope.ROPE _ NIL, chips, layers: LIST OF REF ANY -- ATOM -- _ NIL, -- empty means all spare: REF ANY _ NIL]; LayerFileItemRec: TYPE = RECORD [ intName: ATOM _ NIL, -- e.g., "diffusion", used in Project layer statements layerNumber: Rope.ROPE _ NIL, -- e.g., "10" layerName: Rope.ROPE _ NIL, -- e.g., "DI" pFileLayer: PartitionDefs.layerNumber, include: BOOL _ FALSE ]; LayerFileItem: TYPE = REF LayerFileItemRec _ NIL; WaferDescriptor: TYPE = RECORD [ waferName: Rope.ROPE _ NIL, waferSizeX: INT _ 0, -- microns waferSizeY: INT _ 0, -- microns outputUnitsPerMicron: CARDINAL _ 0, layerFileList: Atom.PropList _ NIL, inMPC: REF MPCDescriptor _ NIL, spare: REF ANY _ NIL]; ChipPositionList: TYPE = LIST OF ChipPositionRec _ NIL; ChipPositionRec: TYPE = RECORD [ x: INT, y: INT]; ChipDescriptor: TYPE = RECORD [ chipName: Rope.ROPE _ NIL, -- no more than 7 characters chipSizeX: CARDINAL _ 0, -- in microns chipSizeY: CARDINAL _ 0, -- in microns chipPositionList: ChipPositionList, inWafer: REF WaferDescriptor _ NIL, spare: REF ANY _ NIL]; LayerAssoc: TYPE = REF LayerAssocRec _ NIL; LayerAssocRec: TYPE = RECORD[ fromLayer: ATOM _ NIL, -- like $ND toLayer: LayerFileItem, stretch: REAL _ 0.0 -- microns --, include: BOOL _ FALSE ]; LayerGroup: TYPE = REF LayerGroupRec _ NIL; LayerGroupRec: TYPE = RECORD [ cifName: ATOM, cifIndex: CARDINAL _ 0, -- ugh! maskLayers: Atom.PropList ]; ProjectDescriptor: TYPE = RECORD [ projectID: Rope.ROPE _ NIL, cifFileName: Rope.ROPE _ NIL, rotateX: INT _ 0, rotateY: INT _ 0, translateX: INT _ 0, translateY: INT _ 0, centerX: INT _ 0, centerY: INT _ 0, width: INT _ 0, height: INT _ 0, layerMap: Atom.PropList _ NIL, inChip: REF ChipDescriptor _ NIL, spare: REF ANY _ NIL]; InitMPC: PROCEDURE [mpc: REF MPCDescriptor] RETURNS [ok: BOOL]; InitWafer: PROCEDURE [wafer: REF WaferDescriptor] RETURNS [ok: BOOL]; InitChip: PROCEDURE [chip: REF ChipDescriptor] RETURNS [ok: BOOL]; ConvertProject: PROCEDURE [project: REF ProjectDescriptor] RETURNS [ ok: BOOL, errorSummary: ARRAY ParserErrorDefs.ErrorType OF CARDINAL]; WriteLayerFile: PROCEDURE [layerFile: LayerFileItem, chip: REF ChipDescriptor] RETURNS [ok: BOOL]; FinishChip: PROCEDURE RETURNS [ok: BOOL]; FinishWafer: PROCEDURE RETURNS [ok: BOOL]; FinishMPC: PROCEDURE RETURNS [ok: BOOL]; END. èFile: MPCDefs.mesa November 1979 by MN Updated: June 2, 1980 9:18 PM modified by TRS for compat with new CIF parser/interp December 5, 1980 4:28 PM Last Edited by: McCreight, January 28, 1985 6:30:32 pm PST ... for Cedar This version is different from the MPC79 version in that calls to interpreter procedures pass pointers to descriptor records for the various objects. Also, the bounding boxes of projects are allowed for in the .mpc document This interface defines the output procedures for MPC Parser. The structure converted has 4 levels: Project - Chip - Wafer - MPC. Each of these requires a set of parameters that remain in effect for the duration of the nested levels. The nesting of calls will be of the form: InitMPC[...]; InitWafer[...]; InitChip[...]; ConvertProject[...]; ConvertProject[...]; ... ConvertProject[...]; WriteLayerFile[...]; WriteLayerFile[...]; ... WriteLayerFile[...]; FinishChip[...]; InitChip[...]; FinishChip[...]; FinishWafer[...]; InitWafer[...]; FinishWafer[...]; While this interface defines a capability for processing multiple chips on a wafer, and even multiple wafers, in a single run, it is extremely unlikely that these capabilities will be used, because of the amount of time taken to process a single chip. These procedures occasionally write things using IODefs.WriteString and WriteLine, so a suitable output stream should be SetOutputStream'ed .. keys are ATOM's like $diffusion, values are LayerFileItem's. .. keys are ATOM's like $diffusion, values are LayerAssoc's. ..keys are ATOM's like $ND, values are LayerGroup's. Set overall parameters date must have exactly 6 characters (mmddyy) Set wafer parameters Set chip parameters chipName must have no more than 7 characters chipSizeX, chipSizeY are in microns positionOnWafer is not yet implemented Set Project parameters and convert the project rotateX, rotateY are as in CIF translateX, translateY are in microns layerArray provides correspondence between CIF layer names and the internal fileLayer (normally to be numbered sequentially from zero - used in WriteLayerFile) and with the stretches to be used (in microns) The errorSummary returned is a copy of the one from ParserErrorDefs Write Mebes layer file for internal fileLayer, using the Mebes identification strings mebesLayerNumber and mebesLayerName (e.g. "04" and "PO", respectively, for polysilicon) Returns the file name on which the layer was written in returnLayerFileName, provided it is non-NIL and has a maxlength of at least 19 Release all structures associated with the current chip Release all structures associated with the current wafer Release all structures associated with the whole run Êž˜J˜Jšœ™Jšœ™Jšœ™JšœO™Ošœ:™:J™ —J˜JšœA™AJšœB™BJšœB™BJšœ™J˜Jšœ<™™>JšœA™AJšœ;™;Jšœ™JšœC™CJ˜šŸœ œ"œ˜NJšœœ˜—Jšœ>™>Jšœ:™:Jšœ3™3Jšœ7™7Jšœ?™?Jšœ™J˜JšŸ œ œœœ˜)Jšœ7™7J˜JšŸ œ œœœ˜*Jšœ8™8J˜JšŸ œ œœœ˜(Jšœ4™4J˜Jšœ˜J˜J˜J˜——…— ”