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