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,
.. keys are ATOM's like $diffusion, values are LayerFileItem's.
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
.. keys are ATOM's like $diffusion, values are LayerAssoc's.
];
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,
..keys are ATOM's like $ND, values are LayerGroup's.
inChip: REF ChipDescriptor ← NIL,
spare: REF ANY ← NIL];
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.