magic/utils/netlist.h

132 lines
4.7 KiB
C

/*
* netlist.h --
*
* This file defines the structures that represent netlists.
*
* *********************************************************************
* * Copyright (C) 1985, 1990 Regents of the University of California. *
* * Permission to use, copy, modify, and distribute this *
* * software and its documentation for any purpose and without *
* * fee is hereby granted, provided that the above copyright *
* * notice appear in all copies. The University of California *
* * makes no representations about the suitability of this *
* * software for any purpose. It is provided "as is" without *
* * express or implied warranty. Export of this software outside *
* * of the United States of America may require an export license. *
* *********************************************************************
*
*
* RCSID $Header: /usr/cvsroot/magic-8.0/utils/netlist.h,v 1.1.1.1 2008/02/03 20:43:50 tim Exp $
*/
#ifndef _MAGIC__UTILS__NETLIST_H
#define _MAGIC__UTILS__NETLIST_H
#include "utils/geometry.h"
#include "utils/magic.h"
#include "database/database.h"
/* --------------------------- Netlists ------------------------------- */
/*
* Nets and terminals.
* The current netlist is read into these structures so
* it can be worked with more conveniently and so its
* components can be given unique names.
*/
typedef struct nlTermLoc
{
/* Set prior to stem assignment */
struct nlTermLoc *nloc_next; /* Next location in list */
struct nlTerm *nloc_term; /* Back pointer to term */
Rect nloc_rect; /* Location of terminal itself */
Label *nloc_label; /* Points to original label */
/* Set during stem assignment */
Point nloc_stem; /* Point on channel boundary */
int nloc_dir; /* Direction from label to nloc_stem */
struct chan *nloc_chan; /* Contains nloc_stem */
struct pin *nloc_pin; /* Pin on nloc_chan boundary */
struct region *nloc_region; /* Region containing stem */
struct czone *nloc_czone; /* Range containing point */
int nloc_stemcost; /* Cost of stem */
int nloc_flags; /* Flags */
} NLTermLoc;
#define NLOC_TERM 001 /* Location used in steiner in net */
/*
* Each NLTerm corresponds to a name, but that name may
* have several locations if the label appears in several
* places inside a cell. It points back to the net to
* to which it belongs. The name nterm_name points to
* the key in the glnl_names hash table, so it shouldn't
* be freed explicitly.
*/
typedef struct nlTerm
{
struct nlTerm *nterm_next; /* Next terminal in net */
char *nterm_name; /* Name of this terminal */
struct nlTermLoc *nterm_locs; /* List of equivalent locations */
struct nlNet *nterm_net; /* Back pointer to net */
int nterm_flags; /* See below */
} NLTerm;
/* Flags for above */
#define RTERM_ISDRIVER 0x0001 /* Term is a transmission line driver */
/*
* Each NLNet consists of several terminals; in order to be
* of interest to the router, it must contain at least two.
*/
typedef struct nlNet
{
struct nlNet *nnet_next; /* Next net in netlist */
struct nlTerm *nnet_terms; /* List of terminals */
Rect nnet_area; /* Bounding box for net's terms */
ClientData nnet_cdata; /* For hire */
/********************************************************************
New Info for Area Router
*********************************************************************/
int nnet_cost; /* Cost of steiner tree */
int nnet_complexity;/* Complexity of steiner tree */
struct segment *nnet_segm; /* List of steiner segments */
struct via *nnet_vias; /* List of vias */
struct nlNet *nnet_stack; /* Queue of nets */
struct czlist *nnet_czlist; /* Czone list */
int nnet_attempts; /* Iteration count */
int nnet_state; /* Routing stats */
int nnet_flags; /* Flags */
struct svi *nnet_svi; /* Maze route/sever info */
} NLNet;
#define NT_ROUTED 001 /* Net successfully routed */
#define NT_FAILED 002 /* Net unsuccessfully routed */
#define NT_SEVERED 004 /* Net has been severed */
/*
* A NLNetList contains a list of nets, along with the
* table that maps from signal names to terminals.
*/
typedef struct
{
struct nlNet *nnl_nets; /* List of nets */
int nnl_numNets; /* # of nets in list (redundant, since
* the list is NULL-terminated, but it
* is convenient).
*/
HashTable nnl_names; /* Maps names to NLTerms */
} NLNetList;
/* Exports */
extern char *NLNetName();
/* C99 compat */
extern void NLFree();
extern int NLBuild();
extern void NLSort();
#endif /* _MAGIC__UTILS__NETLIST_H */