diff --git a/VERSION b/VERSION index 2593151..bca61d4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.5.209 +1.5.210 diff --git a/base/ext.c b/base/ext.c index 747b1e9..1774512 100644 --- a/base/ext.c +++ b/base/ext.c @@ -23,12 +23,13 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include /* for strtod() */ #include +#include #include "netgen.h" -#include "hash.h" #include "objlist.h" #include "netfile.h" #include "print.h" +#include "hash.h" void extCell(char *name, int filenum) { @@ -186,7 +187,7 @@ char *ReadExt(char *fname, int doflat, int *fnum) /* Make sure all .ext file reading is case sensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = hash; + hashfunc = hashcase; if (LookupCellFile(fname, filenum) != NULL) { Printf("Error: Duplicate cell name \"%s\"!\n", fname); @@ -652,7 +653,7 @@ char *ReadSim(char *fname, int *fnum) /* Make sure all .sim file reading is case sensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = hash; + hashfunc = hashcase; CellDef(fname, filenum); diff --git a/base/flatten.h b/base/flatten.h new file mode 100644 index 0000000..d259998 --- /dev/null +++ b/base/flatten.h @@ -0,0 +1,7 @@ +#ifndef _FLATTEN_H +#define _FLATTEN_H + +extern int UniquePins(char *name, int filenum); +extern void flattenCell(char *name, int file); + +#endif /* _FLATTEN_H */ diff --git a/base/hash.c b/base/hash.c index bd3ba58..31c8245 100644 --- a/base/hash.c +++ b/base/hash.c @@ -30,8 +30,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include "netgen.h" -#include "hash.h" #include "objlist.h" +#include "hash.h" unsigned long (*hashfunc)(char *, int) = NULL; int (*matchfunc)(char *, char *) = NULL; @@ -148,7 +148,7 @@ unsigned long hashnocase(char *s, int hashsize) return (hashsize == 0) ? hashval : (hashval % hashsize); } -unsigned long hash(char *s, int hashsize) +unsigned long hashcase(char *s, int hashsize) { unsigned long hashval; diff --git a/base/hash.h b/base/hash.h index 4bd4c3d..4007a3e 100644 --- a/base/hash.h +++ b/base/hash.h @@ -48,7 +48,7 @@ extern void *HashFirst(struct hashdict *dict); extern void *HashNext(struct hashdict *dict); extern unsigned long hashnocase(char *s, int hashsize); -extern unsigned long hash(char *s, int hashsize); +extern unsigned long hashcase(char *s, int hashsize); extern int (*matchfunc)(char *, char *); /* matchintfunc() compares based on the name and the first */ diff --git a/base/netcmp.c b/base/netcmp.c index 4b8d19b..9161dbb 100644 --- a/base/netcmp.c +++ b/base/netcmp.c @@ -21,11 +21,13 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include +#include /* for rand(), abs(), etc */ #include #include #include /* for time() as a seed for random number generator */ #include #include /* for fabs() */ +#include /* for toupper() */ #ifdef IBMPC #include @@ -45,11 +47,13 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "netfile.h" #include "print.h" #include "dbug.h" +#include "hash.h" #ifdef TCL_NETGEN int InterruptPending = 0; void (*oldinthandler)() = SIG_DFL; extern Tcl_Interp *netgeninterp; +extern int check_interrupt(); #endif /* define the following to debug core allocation */ @@ -3757,7 +3761,7 @@ void CreateTwoLists(char *name1, int file1, char *name2, int file2, int dolist) /* determine if matching will be case sensitive or case insensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = hash; + hashfunc = hashcase; if (tc1 != NULL && tc2 != NULL) { if ((tc1->flags & CELL_NOCASE) && (tc2->flags & CELL_NOCASE)) { matchfunc = matchnocase; diff --git a/base/netcmp.h b/base/netcmp.h index 9d289f0..da7a722 100644 --- a/base/netcmp.h +++ b/base/netcmp.h @@ -54,6 +54,15 @@ extern void PrintIllegalElementClasses(); extern void DumpNetwork(struct objlist *ob, int cidx); extern void DumpNetworkAll(char *name, int file); +extern void RegroupDataStructures(); +extern void FormatIllegalElementClasses(); +extern void FormatIllegalNodeClasses(); +extern int ResolveAutomorphsByProperty(); +extern int ResolveAutomorphsByPin(); +extern void SummarizeElementClasses(struct ElementClass *EC); +extern int remove_group_tags(struct objlist *ob); + + #ifdef TCL_NETGEN extern int EquivalentNode(); extern int EquivalentElement(); diff --git a/base/objlist.c b/base/objlist.c index 17102f2..9b2236b 100644 --- a/base/objlist.c +++ b/base/objlist.c @@ -22,6 +22,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include +#include #ifdef IBMPC #include #endif @@ -31,13 +32,13 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include "netgen.h" -#include "hash.h" #include "objlist.h" #include "regexp.h" #include "dbug.h" #include "print.h" #include "netfile.h" #include "netcmp.h" +#include "hash.h" #ifdef TCL_NETGEN extern Tcl_Interp *netgeninterp; @@ -288,7 +289,7 @@ static struct hashdict cell_dict; void InitCellHashTable(void) { - hashfunc = hash; + hashfunc = hashcase; matchfunc = NULL; matchintfunc = matchfile; InitializeHashTable(&cell_dict, CELLHASHSIZE); diff --git a/base/objlist.h b/base/objlist.h index 500018e..6845a29 100644 --- a/base/objlist.h +++ b/base/objlist.h @@ -312,6 +312,19 @@ extern void GarbageCollect(void); extern void InitGarbageCollection(void); extern void AddToGarbageList(struct objlist *head); +extern void DeleteProperties(struct keyvalue **topptr); +extern void AddProperty(struct keyvalue **topptr, char *key, char *value); +extern void AddScaledProperty(struct keyvalue **topptr, char *key, char *value, double scale); +extern void DeleteProperties(struct keyvalue **topptr); +extern struct objlist *LinkProperties(char *model, struct keyvalue *topptr); + +extern void ClassDelete(char *class, int file); +extern void RemoveShorted(char *class, int file); +extern void CellRehash(char *name, char *newname, int file); + +/* defined in netgen.c */ +extern int ConvertStringToInteger(char *string, int *ival); + #ifdef HAVE_MALLINFO void PrintMemoryStats(void); #endif diff --git a/base/query.c b/base/query.c index b22c2d3..55147cd 100644 --- a/base/query.c +++ b/base/query.c @@ -1033,7 +1033,7 @@ void Query(void) break; case 'v': promptstring("Write Verilog: circuit name: ", repstr); - VerilogModule(repstr, filenum, ""); + VerilogTop(repstr, filenum, ""); break; case 'E': promptstring("Write ESACAP: circuit name: ", repstr); diff --git a/base/spice.c b/base/spice.c index 7c83788..95378e0 100644 --- a/base/spice.c +++ b/base/spice.c @@ -26,6 +26,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include /* for calloc(), free(), getenv() */ +#include /* for toupper(), isascii() */ #ifndef IBMPC #include /* for getpwnam() tilde expansion */ #include @@ -40,6 +41,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "objlist.h" #include "netfile.h" #include "print.h" +#include "query.h" +#include "objlist.h" // Global storage for parameters from .PARAM struct hashdict spiceparams; diff --git a/base/tech.h b/base/tech.h new file mode 100644 index 0000000..c1aa8e3 --- /dev/null +++ b/base/tech.h @@ -0,0 +1,8 @@ +#ifndef _TECH_H +#define _TECH_H + +extern int ActelLibPresent(void); +extern void ActelLib(void); +extern void VerilogTop(char *name, int fnum, char *filename); + +#endif /* _TECH_H */ diff --git a/base/verilog.c b/base/verilog.c index f5ac6b0..b8d8b11 100644 --- a/base/verilog.c +++ b/base/verilog.c @@ -52,10 +52,10 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include "netgen.h" -#include "hash.h" #include "objlist.h" #include "netfile.h" #include "print.h" +#include "hash.h" // See netfile.c for explanation of delimiters. 'X' // separates single-character delimiters from two-character delimiters. @@ -2239,7 +2239,7 @@ char *ReadVerilogTop(char *fname, int *fnum, int blackbox) else { matchfunc = match; matchintfunc = matchfile; - hashfunc = hash; + hashfunc = hashcase; } InitializeHashTable(&verilogparams, OBJHASHSIZE); diff --git a/base/xilinx.c b/base/xilinx.c index b448364..71beda2 100644 --- a/base/xilinx.c +++ b/base/xilinx.c @@ -23,6 +23,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include +#include #ifdef IBMPC #include /* for strtol on PC */ @@ -33,6 +34,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "netfile.h" #include "hash.h" #include "print.h" +#include "xilinx.h" +#include "flatten.h" #define XILINXHASHSIZE 99 static long xilinxhashbase = 0xA00; @@ -132,10 +135,8 @@ char *xilinx_class(model) } return(model); } -void -Xilinx(cellname, filename) - char *cellname; - char *filename; + +void Xilinx(char *cellname, char *filename) { char Path[500]; char FileName[500]; @@ -163,8 +164,7 @@ Xilinx(cellname, filename) CloseFile(FileName); } -xilinxCell(cell) - char *cell; +int xilinxCell(char *cell) { struct nlist *nl; struct objlist *ob; @@ -252,9 +252,7 @@ struct objlist *xilinx_gate(ob,nl) return(nob); } -xilinx_sym(nl,gob) - struct nlist *nl; - struct objlist *gob; +void xilinx_sym(struct nlist *nl, struct objlist *gob) { struct objlist *ob; char *cp,*rindex(); diff --git a/base/xilinx.h b/base/xilinx.h new file mode 100644 index 0000000..6f9f55c --- /dev/null +++ b/base/xilinx.h @@ -0,0 +1,10 @@ +#ifndef _XILINX_H +#define _XILINX_H + +extern void xilinx_sym(struct nlist *nl, struct objlist *gob); +extern void Xilinx(char *cellname, char *filename); +extern int xilinxCell(char *cell); +extern int XilinxLibPresent(void); +extern void XilinxLib(void); + +#endif /* _XILINX_H */ diff --git a/tcltk/tclnetgen.c b/tcltk/tclnetgen.c index f933bb8..aa6c438 100644 --- a/tcltk/tclnetgen.c +++ b/tcltk/tclnetgen.c @@ -32,6 +32,9 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "print.h" #include "query.h" /* for ElementNodes() */ #include "hash.h" +#include "xilinx.h" +#include "tech.h" +#include "flatten.h" #ifndef TRUE #define TRUE 1 @@ -976,7 +979,7 @@ _netgen_writenet(ClientData clientData, SpiceCell(repstr, filenum, ""); break; case VERILOG_IDX: - VerilogModule(repstr, filenum, ""); + VerilogTop(repstr, filenum, ""); break; case WOMBAT_IDX: Wombat(repstr,NULL);