diff --git a/base/ext.c b/base/ext.c index 747b1e9..8f27d7d 100644 --- a/base/ext.c +++ b/base/ext.c @@ -23,12 +23,14 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include /* for strtod() */ #include +#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 +188,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 = my_hash; if (LookupCellFile(fname, filenum) != NULL) { Printf("Error: Duplicate cell name \"%s\"!\n", fname); @@ -652,7 +654,7 @@ char *ReadSim(char *fname, int *fnum) /* Make sure all .sim file reading is case sensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = hash; + hashfunc = my_hash; CellDef(fname, filenum); diff --git a/base/flatten.h b/base/flatten.h new file mode 100644 index 0000000..605ab1b --- /dev/null +++ b/base/flatten.h @@ -0,0 +1,6 @@ +#ifndef _FLATTEN_H +#define _FLATTEN_H + +void flattenCell(char *name, int file); + +#endif /* _FLATTEN_H */ \ No newline at end of file diff --git a/base/hash.c b/base/hash.c index bd3ba58..40a2a84 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 my_hash(char *s, int hashsize) { unsigned long hashval; diff --git a/base/hash.h b/base/hash.h index 4bd4c3d..be5a30d 100644 --- a/base/hash.h +++ b/base/hash.h @@ -15,40 +15,40 @@ struct hashdict { }; -extern void InitializeHashTable(struct hashdict *dict, int size); -extern int RecurseHashTable(struct hashdict *dict, +void InitializeHashTable(struct hashdict *dict, int size); +int RecurseHashTable(struct hashdict *dict, int (*func)(struct hashlist *elem)); -extern int RecurseHashTableValue(struct hashdict *dict, +int RecurseHashTableValue(struct hashdict *dict, int (*func)(struct hashlist *elem, int), int); -extern struct nlist *RecurseHashTablePointer(struct hashdict *dict, +struct nlist *RecurseHashTablePointer(struct hashdict *dict, struct nlist *(*func)(struct hashlist *elem, void *), void *pointer); -extern void HashDelete(char *name, struct hashdict *dict); -extern void HashIntDelete(char *name, int value, struct hashdict *dict); -extern void HashKill(struct hashdict *dict); +void HashDelete(char *name, struct hashdict *dict); +void HashIntDelete(char *name, int value, struct hashdict *dict); +void HashKill(struct hashdict *dict); -extern int CountHashTableEntries(struct hashlist *p); -extern int CountHashTableBinsUsed(struct hashlist *p); +int CountHashTableEntries(struct hashlist *p); +int CountHashTableBinsUsed(struct hashlist *p); /* these functions return a pointer to a hash list element */ -extern struct hashlist *HashInstall(char *name, struct hashdict *dict); -extern struct hashlist *HashPtrInstall(char *name, void *ptr, +struct hashlist *HashInstall(char *name, struct hashdict *dict); +struct hashlist *HashPtrInstall(char *name, void *ptr, struct hashdict *dict); -extern struct hashlist *HashIntPtrInstall(char *name, int value, void *ptr, +struct hashlist *HashIntPtrInstall(char *name, int value, void *ptr, struct hashdict *dict); -extern struct hashlist *HashInt2PtrInstall(char *name, int c, void *ptr, +struct hashlist *HashInt2PtrInstall(char *name, int c, void *ptr, struct hashdict *dict); /* these functions return the ->ptr field of a struct hashlist */ -extern void *HashLookup(char *s, struct hashdict *dict); -extern void *HashIntLookup(char *s, int i, struct hashdict *dict); -extern void *HashInt2Lookup(char *s, int c, struct hashdict *dict); -extern void *HashFirst(struct hashdict *dict); -extern void *HashNext(struct hashdict *dict); +void *HashLookup(char *s, struct hashdict *dict); +void *HashIntLookup(char *s, int i, struct hashdict *dict); +void *HashInt2Lookup(char *s, int c, struct hashdict *dict); +void *HashFirst(struct hashdict *dict); +void *HashNext(struct hashdict *dict); -extern unsigned long hashnocase(char *s, int hashsize); -extern unsigned long hash(char *s, int hashsize); +unsigned long hashnocase(char *s, int hashsize); +unsigned long my_hash(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..4430e51 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 @@ -35,6 +37,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef TCL_NETGEN #include +int check_interrupt(); #endif #include "netgen.h" @@ -45,6 +48,7 @@ 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; @@ -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 = my_hash; 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..62d8da0 100644 --- a/base/netcmp.h +++ b/base/netcmp.h @@ -18,50 +18,59 @@ extern int InterruptPending; /* Exported procedures */ -extern void PrintElementClasses(struct ElementClass *EC, int type, int dolist); -extern void PrintNodeClasses(struct NodeClass *NC, int type, int dolist); -extern void SummarizeNodeClasses(struct NodeClass *NC); -extern void PrintPropertyResults(int do_list); -extern void PrintCoreStats(void); -extern void ResetState(void); -extern void CreateTwoLists(char *name1, int file1, char *name2, int file2, +void PrintElementClasses(struct ElementClass *EC, int type, int dolist); +void PrintNodeClasses(struct NodeClass *NC, int type, int dolist); +void SummarizeNodeClasses(struct NodeClass *NC); +void PrintPropertyResults(int do_list); +void PrintCoreStats(void); +void ResetState(void); +void CreateTwoLists(char *name1, int file1, char *name2, int file2, int dolist); -extern int Iterate(void); -extern int VerifyMatching(void); -extern void PrintAutomorphisms(void); -extern int ResolveAutomorphisms(void); -extern void PermuteAutomorphisms(void); -extern int Permute(void); -extern int PermuteSetup(char *model, int filenum, char *pin1, char *pin2); -extern int PermuteForget(char *model, int filenum, char *pin1, char *pin2); -extern int EquivalenceElements(char *name1, int file1, char *name2, int file2); -extern int EquivalenceNodes(char *name1, int file1, char *name2, int file2); -extern int EquivalenceClasses(char *name1, int file1, char *name2, int file2); -extern int IgnoreClass(char *name, int file, unsigned char type); -extern int MatchPins(struct nlist *tp1, struct nlist *tp2, int dolist); -extern int PropertyOptimize(struct objlist *ob, struct nlist *tp, int run, +int Iterate(void); +int VerifyMatching(void); +void PrintAutomorphisms(void); +int ResolveAutomorphisms(void); +void PermuteAutomorphisms(void); +int Permute(void); +int PermuteSetup(char *model, int filenum, char *pin1, char *pin2); +int PermuteForget(char *model, int filenum, char *pin1, char *pin2); +int EquivalenceElements(char *name1, int file1, char *name2, int file2); +int EquivalenceNodes(char *name1, int file1, char *name2, int file2); +int EquivalenceClasses(char *name1, int file1, char *name2, int file2); +int IgnoreClass(char *name, int file, unsigned char type); +int MatchPins(struct nlist *tp1, struct nlist *tp2, int dolist); +int PropertyOptimize(struct objlist *ob, struct nlist *tp, int run, int series, int comb); -extern int CreateCompareQueue(char *, int, char *, int); -extern int GetCompareQueueTop(char **, int *, char **, int *); -extern int PeekCompareQueueTop(char **, int *, char **, int *); -extern void RemoveCompareQueue(); +int CreateCompareQueue(char *, int, char *, int); +int GetCompareQueueTop(char **, int *, char **, int *); +int PeekCompareQueueTop(char **, int *, char **, int *); +void RemoveCompareQueue(); -extern void PrintIllegalClasses(); -extern void PrintIllegalNodeClasses(); -extern void PrintIllegalElementClasses(); +void PrintIllegalClasses(); +void PrintIllegalNodeClasses(); +void PrintIllegalElementClasses(); + +void DumpNetwork(struct objlist *ob, int cidx); +void DumpNetworkAll(char *name, int file); + +void RegroupDataStructures(); +void FormatIllegalElementClasses(); +void FormatIllegalNodeClasses(); +int ResolveAutomorphsByProperty(); +int ResolveAutomorphsByPin(); +void SummarizeElementClasses(struct ElementClass *EC); +int remove_group_tags(struct objlist *ob); -extern void DumpNetwork(struct objlist *ob, int cidx); -extern void DumpNetworkAll(char *name, int file); #ifdef TCL_NETGEN -extern int EquivalentNode(); -extern int EquivalentElement(); +int EquivalentNode(); +int EquivalentElement(); -extern void enable_interrupt(); -extern void disable_interrupt(); +void enable_interrupt(); +void disable_interrupt(); -extern Tcl_Obj *ListNodeClasses(int legal); -extern Tcl_Obj *ListElementClasses(int legal); +Tcl_Obj *ListNodeClasses(int legal); +Tcl_Obj *ListElementClasses(int legal); #endif diff --git a/base/netgen.h b/base/netgen.h index b60893c..982fc9b 100644 --- a/base/netgen.h +++ b/base/netgen.h @@ -18,6 +18,8 @@ #define HORIZONTAL 1 #define VERTICAL 2 +int UniquePins(char *name, int filenum); + /* netgen.c */ extern void ReopenCellDef(char *name, int file); extern void CellDef(char *name, int file); diff --git a/base/objlist.c b/base/objlist.c index 17102f2..2cdbb86 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; @@ -178,7 +179,7 @@ char *strsave(char *s) int match(char *st1, char *st2) { - if (0==strcmp(st1,st2)) return(1); + if (0==strncmp(st1,st2,PATH_MAX)) return(1); else return(0); } @@ -288,7 +289,7 @@ static struct hashdict cell_dict; void InitCellHashTable(void) { - hashfunc = hash; + hashfunc = my_hash; matchfunc = NULL; matchintfunc = matchfile; InitializeHashTable(&cell_dict, CELLHASHSIZE); diff --git a/base/objlist.h b/base/objlist.h index 500018e..b3d9f4c 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); +void DeleteProperties(struct keyvalue **topptr); +void AddProperty(struct keyvalue **topptr, char *key, char *value); +void AddScaledProperty(struct keyvalue **topptr, char *key, char *value, double scale); +void DeleteProperties(struct keyvalue **topptr); +struct objlist *LinkProperties(char *model, struct keyvalue *topptr); + +void ClassDelete(char *class, int file); +void RemoveShorted(char *class, int file); +void CellRehash(char *name, char *newname, int file); + +/* defined in netgen.c */ +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..82d31c4 --- /dev/null +++ b/base/tech.h @@ -0,0 +1,8 @@ +#ifndef _TECH_H +#define _TECH_H + +int ActelLibPresent(void); +void ActelLib(void); +void VerilogTop(char *name, int fnum, char *filename); + +#endif /* _TECH_H */ \ No newline at end of file diff --git a/base/verilog.c b/base/verilog.c index f5ac6b0..5b92a90 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 = my_hash; } 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..bb6b7c6 --- /dev/null +++ b/base/xilinx.h @@ -0,0 +1,10 @@ +#ifndef _XILINX_H +#define _XILINX_H + +void xilinx_sym(struct nlist *nl, struct objlist *gob); +void Xilinx(char *cellname, char *filename); +int xilinxCell(char *cell); +int XilinxLibPresent(void); +void XilinxLib(void); + +#endif /* _XILINX_H */ \ No newline at end of file diff --git a/tcltk/Makefile b/tcltk/Makefile index e74b1b5..c637eee 100644 --- a/tcltk/Makefile +++ b/tcltk/Makefile @@ -9,7 +9,7 @@ EXTRA_LIBS = ${MAIN_EXTRA_LIBS} DFLAGS += -DNETGEN_DATE="\"`date`\"" LIBS += -lm CLEANS += netgen.sh netgen.tcl netgenexec${EXEEXT} -CFLAGS += -I${NETGENDIR}/base +CFLAGS += -I${NETGENDIR}/base -I./base TCL_FILES = \ $(DESTDIR)${INSTALL_TCLDIR}/tkcon.tcl \ diff --git a/tcltk/tclnetgen.c b/tcltk/tclnetgen.c index f933bb8..c59e16c 100644 --- a/tcltk/tclnetgen.c +++ b/tcltk/tclnetgen.c @@ -32,6 +32,8 @@ 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" #ifndef TRUE #define TRUE 1 @@ -976,7 +978,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);