mirror of
https://github.com/RTimothyEdwards/magic.git
synced 2026-08-29 17:39:28 +02:00
for the DEF file contents, and loads the cell into the layout window when done. That makes it consistent with other similar functions such as "gds read". Existing scripts which create (by loading) a new cell before reading the DEF should not be affected by the change.
196 lines
7.2 KiB
C
196 lines
7.2 KiB
C
/*
|
|
* lefInt.h --
|
|
*
|
|
* This file defines things that are used by internal LEF routines in
|
|
* various files.
|
|
*
|
|
* rcsid $Header: /usr/cvsroot/magic-8.0/lef/lefInt.h,v 1.1.1.1 2008/02/03 20:43:50 tim Exp $
|
|
*/
|
|
|
|
#ifndef _MAGIC__LEF__LEFINT_H
|
|
#define _MAGIC__LEF__LEFINT_H
|
|
|
|
#include "utils/magic.h"
|
|
|
|
/* Some constants for LEF and DEF files */
|
|
|
|
#define LEF_LINE_MAX 2048 /* Maximum length fixed by LEF/DEF specifications */
|
|
#define LEF_MAX_ERRORS 100 /* Max # errors to report; limits output if */
|
|
/* something is really wrong about the file */
|
|
|
|
#define DEFAULT_WIDTH 3 /* Default metal width for routes if undefined */
|
|
#define DEFAULT_SPACING 4 /* Default spacing between metal if undefined */
|
|
|
|
/* Various modes for writing nets. */
|
|
#define DO_REGULAR 0
|
|
#define DO_SPECIAL 1
|
|
#define ALL_SPECIAL 2 /* treat all nets as SPECIALNETS */
|
|
|
|
/* Used with defMakeInverseLayerMap() */
|
|
#define LAYER_MAP_NO_VIAS FALSE
|
|
#define LAYER_MAP_VIAS TRUE
|
|
|
|
/* For a linked list of rectangular areas, use the LinkedRect structure */
|
|
/* defined in utils/geometry.h. */
|
|
|
|
/* Structure used for returning information about polygon geometry */
|
|
|
|
typedef struct _linkedPoint {
|
|
Point pos;
|
|
TileType type;
|
|
struct _linkedPoint *point_next;
|
|
} linkedPoint;
|
|
|
|
/* Structure used to maintain default routing information for each */
|
|
/* routable layer type. */
|
|
|
|
typedef struct {
|
|
int width; /* width, in lambda */
|
|
int spacing; /* minimum spacing rule, in lambda */
|
|
int pitch; /* route pitch, in lambda */
|
|
bool hdirection; /* horizontal direction preferred */
|
|
} lefRoute;
|
|
|
|
/* Structure used to maintain default generation information for each */
|
|
/* via or viarule (contact) type. If "cell" is non-NULL, then the via */
|
|
/* is saved in a cell (pointed to by "cell"), and "area" describes the */
|
|
/* bounding box. Otherwise, the via is formed by magic type "type" */
|
|
/* with a minimum area "area" for a single contact. */
|
|
|
|
typedef struct {
|
|
Rect area; /* Area of single contact, or cell bbox */
|
|
/* in units of 1/2 lambda */
|
|
CellDef *cell; /* Cell for fixed via def, or NULL */
|
|
LinkedRect *lr; /* Extra information for vias with */
|
|
/* more complicated geometry. */
|
|
TileType obsType; /* Secondary obstruction type */
|
|
} lefVia;
|
|
|
|
/* Defined types for "lefClass" in the lefLayer structure */
|
|
|
|
#define CLASS_ROUTE 0 /* routing layer */
|
|
#define CLASS_VIA 1 /* via or cut layer */
|
|
#define CLASS_MASTER 2 /* masterslice layer */
|
|
#define CLASS_OVERLAP 3 /* overlap layer */
|
|
#define CLASS_BOUND 4 /* boundary-defining layer */
|
|
#define CLASS_IGNORE 5 /* inactive layer */
|
|
|
|
/* Structure defining a route or via layer and matching it to a magic */
|
|
/* layer type. This structure is saved in the LefInfo hash table. */
|
|
/* To allow multiple names to refer to the same structure, we keep a */
|
|
/* reference count of the number of times a hash table value points to */
|
|
/* this structure. */
|
|
|
|
typedef struct {
|
|
TileType type; /* magic tile type, or -1 for none */
|
|
TileType obsType; /* magic type to use if this is an obstruction */
|
|
short refCnt; /* reference count for memory deallocation */
|
|
const char * canonName; /* name to use when writing LEF output */
|
|
unsigned char lefClass; /* is this a via, route, or masterslice layer */
|
|
union {
|
|
lefRoute route; /* for route layers */
|
|
lefVia via; /* for contacts */
|
|
} info;
|
|
} lefLayer;
|
|
|
|
/* Inverse mapping structure for returning the primary LEF */
|
|
/* layer corresponding to a magic tile type. */
|
|
|
|
typedef struct {
|
|
const char *lefName; /* Primary name of LEF layer */
|
|
lefLayer *lefInfo; /* Pointer to information about the layer */
|
|
} LefMapping;
|
|
|
|
/* Structure used for non-default rules. */
|
|
|
|
typedef struct _lefRule {
|
|
lefLayer *lefInfo; /* Layer or via referenced by the rule */
|
|
int width; /* Non-default width value for layer */
|
|
int spacing; /* Non-default spacing value for layer */
|
|
int extend; /* Non-default extension value for layer */
|
|
struct _lefRule *next;
|
|
} lefRule;
|
|
|
|
/* Structure to hold nondefault rules required by nets */
|
|
|
|
typedef struct {
|
|
const char *name;
|
|
lefRule *rule;
|
|
} LefRules;
|
|
|
|
/* Structure holding the counts of regular and special nets */
|
|
|
|
typedef struct {
|
|
int regular;
|
|
int special;
|
|
int blockages;
|
|
bool has_nets;
|
|
} NetCount;
|
|
|
|
/* Linked string structure used to maintain list of nets to ignore */
|
|
typedef struct _linkedNetName {
|
|
const char *lnn_name;
|
|
struct _linkedNetName *lnn_next;
|
|
} linkedNetName;
|
|
|
|
/* External declaration of global variables */
|
|
extern int lefCurrentLine;
|
|
extern HashTable LefInfo;
|
|
extern HashTable LefNonDefaultRules;
|
|
extern linkedNetName *lefIgnoreNets;
|
|
|
|
/* Forward declarations */
|
|
|
|
extern int lefDefInitFunc(CellDef *def);
|
|
extern int lefDefPushFunc(CellUse *use, bool *recurse);
|
|
extern FILE *lefFileOpen(CellDef *def, const char *file, const char *suffix, const char *mode, char **prealfile);
|
|
|
|
extern int LefParseEndStatement(FILE *f, const char *match);
|
|
extern void LefSkipSection(FILE *f, const char *section);
|
|
extern void LefEndStatement(FILE *f);
|
|
extern CellDef *lefFindCell(const char *name);
|
|
extern const char *LefNextToken(FILE *f, bool ignore_eol);
|
|
extern char *LefLower(char *token);
|
|
extern TileType LefHelper_DBTechNameType_LefLower(const char *name);
|
|
extern LinkedRect *LefReadGeometry(CellDef *lefMacro, FILE *f, float oscale, Point *, bool do_list, bool is_imported);
|
|
extern void LefEstimate(int processed, int total, const char *item_name);
|
|
extern lefLayer *LefRedefined(lefLayer *lefl, const char *redefname);
|
|
extern void LefAddViaGeometry(FILE *f, lefLayer *lefl, TileType curlayer, float oscale);
|
|
extern void LefGenViaGeometry(FILE *f, lefLayer *lefl, int sizex, int sizey, int spacex, int spacey, int encbx,
|
|
int encby, int enctx, int encty, int rows, int cols, TileType tlayer, TileType clayer,
|
|
TileType blayer, float oscale);
|
|
extern Rect *LefReadRect(FILE *f, TileType curlayer, float oscale);
|
|
extern TileType LefReadLayer(FILE *f, bool obstruct);
|
|
extern void LefReadLayerSection(FILE *f, const char *lname, int mode, lefLayer *lefl);
|
|
|
|
extern LefMapping *defMakeInverseLayerMap(bool do_vias);
|
|
|
|
/* Variable argument procedure requires parameter list. */
|
|
extern void LefError(int type, const char *fmt, ...) ATTR_FORMAT_PRINTF_2;
|
|
|
|
/* C99 compat */
|
|
extern void LefRead(const char *inName, bool importForeign, bool doAnnotate, int lefTimestamp);
|
|
extern CellDef *DefRead(const char *inName, bool dolabels, bool annotate, bool noblockage);
|
|
|
|
extern void LefWriteAll(CellUse *rootUse, bool writeTopCell, bool lefTech, int lefHide, int lefPinOnly, bool lefTopLayer,
|
|
bool lefDoMaster, bool recurse);
|
|
extern void DefWriteCell(CellDef *def, char *outName, bool allSpecial, int units, bool analRetentive);
|
|
extern void LefWriteCell(CellDef *def, char *outName, bool isRoot, bool lefTech, int lefHide, int lefPinOnly,
|
|
bool lefTopLayer, bool lefDoMaster);
|
|
extern int DRCGetDefaultLayerWidth(TileType ttype);
|
|
extern void LefTechInit(void);
|
|
extern void lefRemoveGeneratedVias(void);
|
|
|
|
/* Definitions for type passed to LefError() */
|
|
|
|
#define LEF_ERROR 0
|
|
#define LEF_WARNING 1
|
|
#define LEF_INFO 2
|
|
#define LEF_SUMMARY 3
|
|
#define DEF_ERROR 4
|
|
#define DEF_WARNING 5
|
|
#define DEF_INFO 6
|
|
#define DEF_SUMMARY 7
|
|
|
|
#endif /* _MAGIC__LEF__LEFINT_H */
|