1 #define NETGEN_COPYRIGHT "Copyright 1990,1991,2002,2004,2005" 2 #define NETGEN_AUTHOR "Massimo A. Sivilotti, Caltech" 3 #define NETGEN_DEVELOPER "R. Timothy Edwards, MultiGiG, Inc." 4 5 #ifndef _NETGEN_H 6 #define _NETGEN_H 7 8 #ifndef _OBJLIST_H 9 #include "objlist.h" 10 #endif 11 12 #ifndef NULL 13 #define NULL 0 14 #endif 15 16 /* various Composition directions */ 17 #define NONE 0 18 #define HORIZONTAL 1 19 #define VERTICAL 2 20 21 /* netgen.c */ 22 extern void ReopenCellDef(char *name, int file); 23 extern void CellDef(char *name, int file); 24 extern void CellDefNoCase(char *name, int file); 25 extern void EndCell(void); 26 extern void Port(char *name); 27 extern int CountPorts(char *name, int file); 28 extern void SetClass(unsigned char class); 29 extern struct property *PropertyValue(char *name, int fnum, char *key, 30 double slop, double pdefault); 31 extern struct property *PropertyDouble(char *name, int fnum, char *key, 32 double slop, double pdefault); 33 extern struct property *PropertyInteger(char *name, int fnum, char *key, 34 int slop, int pdefault); 35 extern struct property *PropertyString(char *name, int fnum, char *key, 36 double slop, char *pdefault); 37 extern int PropertyDelete(char *name, int fnum, char *key); 38 extern void SetParallelCombine(int value); 39 extern void SetSeriesCombine(int value); 40 extern int PropertyTolerance(char *name, int fnum, char *key, int ival, 41 double dval); 42 extern int PropertyMerge(char *name, int fnum, char *key, int merge_type, 43 int merge_mask); 44 extern void ResolveProperties(char *name1, int file1, char *name2, int file2); 45 extern void CopyProperties(struct objlist *obj_to, struct objlist *obj_from); 46 extern int PromoteProperty(struct property *, struct valuelist *, 47 struct objlist *, struct nlist *); 48 extern int SetPropertyDefault(struct property *, struct valuelist *); 49 extern struct objlist *LinkProperties(char *model, struct keyvalue *topptr); 50 extern int ReduceExpressions(struct objlist *instprop, struct objlist *parprops, 51 struct nlist *parent, int glob); 52 extern void Node(char *name); 53 extern void Global(char *name); 54 extern void UniqueGlobal(char *name); 55 extern void Instance(char *model, char *instancename); 56 extern void PortList(char *prefix, char *list_template); 57 extern char *Cell(char *inststr, char *model, ...); 58 extern int IsIgnored(char *, int); 59 60 extern int auto_blackbox; /* For handling empty subcircuits */ 61 62 /* netcmp.c */ 63 extern struct nlist *LookupClassEquivalent(char *model, int file1, int file2); 64 extern void AssignCircuits(char *name1, int file1, char *name2, int file2); 65 66 /* flatten.c */ 67 extern int PrematchLists(char *, int, char *, int); 68 69 /* verilog.c */ 70 struct cellstack { 71 char *cellname; 72 struct cellstack *next; 73 }; 74 75 void ReadVerilogFile(char *fname, int filenum, struct cellstack **CellStackPtr, 76 int blackbox); 77 78 /* Define (enumerate) various device classes, largely based on SPICE */ 79 /* model types, mixed with some ext/sim types. */ 80 81 #define CLASS_SUBCKT 0 /* Any cell containing components; default */ 82 #define CLASS_NMOS 1 /* sim "n" */ 83 #define CLASS_PMOS 2 /* sim "p" */ 84 #define CLASS_FET3 3 /* unknown; 3-terminal NMOS or PMOS */ 85 #define CLASS_NMOS4 4 /* 4-terminal NMOS */ 86 #define CLASS_PMOS4 5 /* 4-terminal PMOS */ 87 #define CLASS_FET4 6 /* unknown; 4-terminal NMOS or PMOS */ 88 #define CLASS_FET 7 /* unknown; 3- or 4-terminal NMOS or PMOS */ 89 #define CLASS_PNP 8 90 #define CLASS_NPN 9 /* sim "b" */ 91 #define CLASS_BJT 10 /* unknown; PNP or NPN */ 92 #define CLASS_RES 11 /* sim "r" */ 93 #define CLASS_RES3 12 /* 3-terminal resistor */ 94 #define CLASS_CAP 13 /* sim "c" */ 95 #define CLASS_ECAP 14 /* moscap (3-terminal w/source, drain) */ 96 #define CLASS_CAP3 15 /* cap with dummy terminal */ 97 #define CLASS_DIODE 16 /* standard SPICE diode */ 98 #define CLASS_INDUCTOR 17 /* standard SPICE inductor */ 99 #define CLASS_XLINE 18 /* transmission line model */ 100 #define CLASS_VSOURCE 19 /* independent voltage source */ 101 #define CLASS_ISOURCE 20 /* independent current source */ 102 #define CLASS_MODULE 21 /* sim "x"; black-box subcircuit */ 103 #define CLASS_UNDEF 22 /* not defined; error */ 104 105 extern char *P(char *fname, char *inststr, char *drain, char *gate, char *source); 106 extern char *P4(char *fname, char *inststr, char *drain, char *gate, char *source, 107 char *bulk); 108 extern char *N(char *fname, char *inststr, char *drain, char *gate, char *source); 109 extern char *N4(char *fname, char *inststr, char *drain, char *gate, char *source, 110 char *bulk); 111 extern char *B(char *fname, char *inststr, char *, char *, char *); 112 extern char *E(char *fname, char *inststr, char *, char *, char *); 113 extern char *Cap3(char *fname, char *inststr, char *, char *, char *); 114 extern char *Res3(char *fname, char *inststr, char *, char *, char *); 115 extern char *Cap(char *fname, char *inststr, char *, char *); 116 extern char *Res(char *fname, char *inststr, char *, char *); 117 extern char *XLine(char *fname, char *inststr, char *, char *, char *, char *); 118 extern char *Inductor(char *fname, char *inststr, char *, char *); 119 120 extern int StringIsValue(char *); 121 extern char *ConvertParam(char *); 122 extern int ConvertStringToFloat(char *, double *); 123 extern char *ScaleStringFloatValue(char *, double); 124 extern void join(char *node1, char *node2); 125 extern void Connect(char *tplt1, char *tplt2); 126 extern void Place(char *name); 127 extern void Array(char *Cell, int num); 128 extern void ActelLib(void); 129 extern void Flatten(char *name, int file); 130 extern void FlattenInstancesOf(char *model, int file); 131 extern int flattenInstancesOf(char *model, int file, char *instance); 132 extern void FlattenCurrent(); 133 extern void ConvertGlobals(char *name, int fnum); 134 extern int CleanupPins(char *name, int fnum); 135 extern void ConnectAllNodes(char *model, int fnum); 136 extern int CombineParallel(char *model, int fnum); 137 extern int CombineSeries(char *model, int fnum); 138 extern int NoDisconnectedNodes; 139 extern int PropertyKeyMatch(char *, char *); 140 extern int PropertyValueMatch(char *, char *); 141 142 /* objlist.c */ 143 extern void CellDelete(char *name, int file); 144 extern void InstanceRename(char *from, char *to, int file); 145 146 extern int Debug; 147 extern int VerboseOutput; /* set this to 1 to enable extra output */ 148 extern int IgnoreRC; /* set this to 1 to ignore capacitance and resistance */ 149 extern int NoOutput; /* set this to 1 to disable stdout output */ 150 extern int Composition; /* direction of composition */ 151 extern int UnixWildcards; /* TRUE if *,?,{},[] only; false if full REGEXP */ 152 extern int GlobalParallelNone; /* If TRUE, don't parallel combine any cells */ 153 extern int GlobalParallelOpen; /* If TRUE, parallel combine cells w/no-connects */ 154 /* magic internal flag to restrict searches to recently placed cells */ 155 extern int QuickSearch; 156 /* does re"CellDef"ing a cell add to it or overwrite it??? */ 157 extern int AddToExistingDefinition; 158 /* procedure to facilitate generating file/cell/pin names */ 159 char *Str(char *format, ...); 160 161 162 /* these are defined in data.h */ 163 extern void Initialize(void); 164 extern void InitializeCommandLine(int argc, char **argv); 165 #ifdef TCL_NETGEN 166 extern void PrintAllElements(char *cell, int file); 167 #else 168 extern void PrintElement(char *cell, char *list_template); 169 #endif 170 extern void Fanout(char *cell, char *node, int filter); 171 extern void PrintCell(char *name, int file); 172 extern void Query(void); 173 174 /* this is defined in xnetgen.h */ 175 void X_main_loop(int argc, char *argv[]); 176 177 /* output file formats; also defined in netfile.h */ 178 extern void Ntk(char *name, char *filename); 179 extern void Actel(char *name, char *filename); 180 extern void Wombat(char *name, char *filename); 181 extern void Ext(char *name, int fnum); 182 extern void Sim(char *name, int fnum); 183 extern void SpiceCell(char *name, int fnum, char *filename); 184 extern void EsacapCell(char *name, char *filename); 185 extern void WriteNetgenFile(char *name, char *filename); 186 extern void Ccode(char *name, char *filename); 187 188 /* input file formats, these routines return the name of the top-level cell */ 189 extern char *ReadNtk (char *fname, int *fnum); 190 extern char *ReadExtHier(char *fname, int *fnum); 191 extern char *ReadExtFlat(char *fname, int *fnum); 192 extern char *ReadSim(char *fname, int *fnum); 193 extern char *ReadSpice(char *fname, int *fnum); 194 extern char *ReadSpiceLib(char *fname, int *fnum); 195 extern char *ReadNetgenFile (char *fname, int *fnum); 196 extern char *ReadVerilog(char *fname, int *fnum); 197 198 extern char *ReadNetlist(char *fname, int *fnum); 199 200 201 /* these are defined in place.h */ 202 extern void Embed(char *cellname); 203 extern void PROTOCHIP(void); 204 205 /* these are defined in netcmp.c */ 206 extern void NETCOMP(void); 207 extern int Compare(char *cell1, char *cell2); 208 209 /* this is defined in tclnetgen.c */ 210 #ifdef TCL_NETGEN 211 extern char *tcl_calloc(size_t, size_t); 212 #endif 213 214 #endif /* _NETGEN_H */ 215