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[...];
<Convert another set of projects>
<Write the layer files for the chip>
FinishChip[...];
FinishWafer[...];
InitWafer[...];
<Process the set of chips for another wafer>
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
DIRECTORY
Atom,
ParserErrorDefs,
PartitionDefs,
Rope;
MPCDefs: CEDAR DEFINITIONS =
BEGIN
MPCDescriptor: TYPE = RECORD [
title, date, account: Rope.ROPENIL,
chips, layers: LIST OF REF ANY -- ATOM --NIL, -- empty means all
spare: REF ANYNIL];
LayerFileItemRec: TYPE = RECORD [
intName: ATOMNIL, -- e.g., "diffusion", used in Project layer statements
layerNumber: Rope.ROPENIL, -- e.g., "10"
layerName: Rope.ROPENIL, -- e.g., "DI"
pFileLayer: PartitionDefs.layerNumber,
include: BOOLFALSE
];
LayerFileItem: TYPE = REF LayerFileItemRec ← NIL;
WaferDescriptor: TYPE = RECORD [
waferName: Rope.ROPENIL,
waferSizeX: INT ← 0, -- microns
waferSizeY: INT ← 0, -- microns
outputUnitsPerMicron: CARDINAL ← 0,
layerFileList: Atom.PropList ← NIL,
.. keys are ATOM's like $diffusion, values are LayerFileItem's.
inMPC: REF MPCDescriptor ← NIL,
spare: REF ANYNIL];
ChipPositionList: TYPE = LIST OF ChipPositionRec ← NIL;
ChipPositionRec: TYPE = RECORD [ x: INT, y: INT];
ChipDescriptor: TYPE = RECORD [
chipName: Rope.ROPENIL, -- no more than 7 characters
chipSizeX: CARDINAL ← 0, -- in microns
chipSizeY: CARDINAL ← 0, -- in microns
chipPositionList: ChipPositionList,
inWafer: REF WaferDescriptor ← NIL,
spare: REF ANYNIL];
LayerAssoc: TYPE = REF LayerAssocRec ← NIL;
LayerAssocRec: TYPE = RECORD[
fromLayer: ATOMNIL, -- like $ND
toLayer: LayerFileItem,
stretch: REAL ← 0.0 -- microns --,
include: BOOLFALSE
];
LayerGroup: TYPE = REF LayerGroupRec ← NIL;
LayerGroupRec: TYPE = RECORD [
cifName: ATOM,
cifIndex: CARDINAL ← 0, -- ugh!
maskLayers: Atom.PropList
.. keys are ATOM's like $diffusion, values are LayerAssoc's.
];
ProjectDescriptor: TYPE = RECORD [
projectID: Rope.ROPENIL,
cifFileName: Rope.ROPENIL,
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,
..keys are ATOM's like $ND, values are LayerGroup's.
inChip: REF ChipDescriptor ← NIL,
spare: REF ANYNIL];
InitMPC: PROCEDURE [mpc: REF MPCDescriptor] RETURNS [ok: BOOL];
Set overall parameters
date must have exactly 6 characters (mmddyy)
InitWafer: PROCEDURE [wafer: REF WaferDescriptor]
RETURNS [ok: BOOL];
Set wafer parameters
InitChip: PROCEDURE [chip: REF ChipDescriptor]
RETURNS [ok: BOOL];
Set chip parameters
chipName must have no more than 7 characters
chipSizeX, chipSizeY are in microns
positionOnWafer is not yet implemented
ConvertProject: PROCEDURE [project: REF ProjectDescriptor]
RETURNS [
ok: BOOL,
errorSummary: ARRAY ParserErrorDefs.ErrorType OF
CARDINAL];
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
WriteLayerFile: PROCEDURE [layerFile: LayerFileItem, chip: REF ChipDescriptor]
RETURNS [ok: BOOL];
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
FinishChip: PROCEDURE RETURNS [ok: BOOL];
Release all structures associated with the current chip
FinishWafer: PROCEDURE RETURNS [ok: BOOL];
Release all structures associated with the current wafer
FinishMPC: PROCEDURE RETURNS [ok: BOOL];
Release all structures associated with the whole run
END.