/* * 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 */