Skip to content

Commit 10c397a

Browse files
committed
minor improvements
1 parent e8e6ecc commit 10c397a

File tree

4 files changed

+60
-59
lines changed

4 files changed

+60
-59
lines changed

act/tech.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,3 +1133,9 @@ GDSLayer *Technology::GDSlookup (const char *s)
11331133
}
11341134
return (GDSLayer *) b->v;
11351135
}
1136+
1137+
const char *Material::viaUpName()
1138+
{
1139+
Assert (viaup, "What?");
1140+
return viaup->getName();
1141+
}

act/tech.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ class Material {
113113
void addGDS (char **table, int sz);
114114
void addGDSBloat (int *table, int sz);
115115

116+
const char *viaUpName();
117+
116118
protected:
117119
const char *name; /* drawing name in magic */
118120

tech/layout.conf

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
#
66
begin info
7-
string name "SCN3N_SUBM.30 rules"
7+
string name "scmos.30 rules"
88
string date "Created on Feb 26, 2018 by Rajit Manohar"
99
end
1010

@@ -236,22 +236,10 @@ begin vias
236236
string_table pdiff_gds "OD" "CO" "M1" "NW"
237237
int_table pdiff_gds_bloat 0 0 0 6
238238

239-
string nwell "ct_to_active"
240-
string nwell_name "nwc"
241-
string_table nwell_gds "OD" "CO" "M1" "NW"
242-
int_table nwell_gds_bloat 0 0 0 0
243-
244-
245-
string pwell "ct_to_active"
246-
string pwell_name "pwc"
247-
string_table pwell_gds "OD" "CO" "M1" "PW"
248-
int_table pwell_gds_bloat 0 0 0 0
249-
250239
string nndiff "ct_to_active"
251240
string nndiff_name "nsc"
252241
string_table nndiff_gds "OD" "CO" "M1" "NW" "NN"
253242
int_table nndiff_gds_bloat 0 0 0 0 0
254-
255243

256244
string ppdiff "ct_to_active"
257245
string ppdiff_name "psc"

tech/techgen.cc

Lines changed: 51 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,12 @@ static void emit_tiletypes (pp_t *pp)
108108
if (Technology::T->diff[j][i]) {
109109
pp_printf (pp, "active %s", Technology::T->diff[j][i]->getName());
110110
pp_nl;
111-
pp_printf (pp, "active %sc", Technology::T->diff[j][i]->getName());
111+
pp_printf (pp, "active %s", Technology::T->diff[j][i]->viaUpName());
112112
pp_nl;
113113
empty = 0;
114114
}
115115
if (Technology::T->welldiff[j][i]) {
116-
pp_printf (pp, "active %sc", Technology::T->welldiff[j][i]->getName());
116+
pp_printf (pp, "active %s", Technology::T->welldiff[j][i]->viaUpName());
117117
pp_nl;
118118
empty = 0;
119119
}
@@ -125,7 +125,7 @@ static void emit_tiletypes (pp_t *pp)
125125
}
126126
}
127127
pp_printf (pp, "active %s", Technology::T->poly->getName()); pp_nl;
128-
pp_printf (pp, "active %sc", Technology::T->poly->getName()); pp_nl;
128+
pp_printf (pp, "active %s", Technology::T->poly->viaUpName()); pp_nl;
129129
pp_nl;
130130

131131
for (int i=0; i < Technology::T->nmetals; i++) {
@@ -134,9 +134,6 @@ static void emit_tiletypes (pp_t *pp)
134134
if (i != Technology::T->nmetals-1) {
135135
pp_printf (pp, "metal%d m%dc,v%d", i+1, i+2, i+1); pp_nl;
136136
}
137-
else {
138-
pp_printf (pp, "metal%d", i+1); pp_nl;
139-
}
140137
}
141138
pp_printf (pp, "comment comment");
142139
pp_UNTAB;
@@ -149,33 +146,33 @@ static void emit_contacts (pp_t *pp)
149146
pp_printf (pp, "#--- contacts ---"); pp_nl;
150147
pp_printf (pp, "contact"); pp_TAB;
151148

152-
pp_printf (pp, "%sc %s metal1", Technology::T->poly->getName(),
149+
pp_printf (pp, "%s %s m1", Technology::T->poly->viaUpName(),
153150
Technology::T->poly->getName());
154151
pp_nl;
155152
for (int i=0; i < Technology::T->num_devs; i++) {
156153
for (int j=0; j < 2; j++) {
157154
if (Technology::T->diff[j][i]) {
158-
pp_printf (pp, "%sc %s metal1", Technology::T->diff[j][i]->getName(),
155+
pp_printf (pp, "%s %s m1", Technology::T->diff[j][i]->viaUpName(),
159156
Technology::T->diff[j][i]->getName());
160157
pp_nl;
161158
}
162159
#if 0
163160
if (Technology::T->well[j][i]) {
164-
pp_printf (pp, "%sc %s metal1", Technology::T->well[j][i]->getName(),
161+
pp_printf (pp, "%s %s m1", Technology::T->well[j][i]->viaUpName(),
165162
Technology::T->well[j][i]->getName());
166163
pp_nl;
167164
}
168165
#endif
169166
if (Technology::T->welldiff[j][i]) {
170-
pp_printf (pp, "%sc %s metal1", Technology::T->welldiff[j][i]->getName(),
167+
pp_printf (pp, "%s %s m1", Technology::T->welldiff[j][i]->viaUpName(),
171168
Technology::T->welldiff[j][i]->getName());
172169
pp_nl;
173170
}
174171
}
175172
}
176173

177174
for (int i=1; i < Technology::T->nmetals; i++) {
178-
pp_printf (pp, "m%dc metal%d metal%d", i+1, i, i+1);
175+
pp_printf (pp, "m%dc m%d m%d", i+1, i, i+1);
179176
pp_nl;
180177
}
181178
pp_printf (pp, "stackable"); pp_UNTAB;
@@ -201,8 +198,8 @@ static void emit_styles (pp_t *pp)
201198
if (Technology::T->diff[j][i]) {
202199
pp_printf (pp, "%s %cdiffusion",
203200
Technology::T->diff[j][i]->getName(), c); pp_nl;
204-
pp_printf (pp, "%sc %cdiffusion metal1 contact_X'es",
205-
Technology::T->diff[j][i]->getName(), c); pp_nl;
201+
pp_printf (pp, "%s %cdiffusion metal1 contact_X'es",
202+
Technology::T->diff[j][i]->viaUpName(), c); pp_nl;
206203
}
207204
if (Technology::T->fet[j][i]) {
208205
pp_printf (pp, "%s %ctransistor %ctransistor_stripes",
@@ -211,8 +208,8 @@ static void emit_styles (pp_t *pp)
211208
if (Technology::T->welldiff[j][i]) {
212209
pp_printf (pp, "%s %cdiff_in_%cwell", Technology::T->welldiff[j][i]->getName(), d, d);
213210
pp_nl;
214-
pp_printf (pp, "%sc %cdiff_in_%cwell metal1_alt contact_X'es",
215-
Technology::T->welldiff[j][i]->getName(), d, d);
211+
pp_printf (pp, "%s %cdiff_in_%cwell metal1_alt contact_X'es",
212+
Technology::T->welldiff[j][i]->viaUpName(), d, d);
216213
pp_nl;
217214
}
218215
if (Technology::T->sel[j][i]) {
@@ -221,8 +218,8 @@ static void emit_styles (pp_t *pp)
221218
}
222219
}
223220
pp_printf (pp, "%s polysilicon", Technology::T->poly->getName()); pp_nl;
224-
pp_printf (pp, "%sc poly_contact contact_X'es",
225-
Technology::T->poly->getName()); pp_nl;
221+
pp_printf (pp, "%s poly_contact contact_X'es",
222+
Technology::T->poly->viaUpName()); pp_nl;
226223

227224

228225
for (int i=0; i < Technology::T->nmetals; i++) {
@@ -233,7 +230,7 @@ static void emit_styles (pp_t *pp)
233230
}
234231
}
235232

236-
pp_printf (pp, "boundary subcircuit"); pp_nl;
233+
//pp_printf (pp, "boundary subcircuit"); pp_nl;
237234
pp_printf (pp, "error_p error_waffle"); pp_nl;
238235
pp_printf (pp, "error_s error_waffle"); pp_nl;
239236
pp_printf (pp, "error_ps error_waffle"); pp_nl;
@@ -261,20 +258,26 @@ static void emit_compose (pp_t *pp)
261258
Technology::T->diff[1-j][i]->getName(),
262259
Technology::T->well[j][i]->getName(),
263260
Technology::T->diff[j][i]->getName()); pp_nl;
264-
pp_printf (pp, "paint %sc %s %sc",
265-
Technology::T->diff[1-j][i]->getName(),
266-
Technology::T->well[j][i]->getName(),
267-
Technology::T->diff[j][i]->getName()); pp_nl;
268261
pp_printf (pp, "paint %s %s %s",
269262
Technology::T->fet[1-j][i]->getName(),
270263
Technology::T->well[j][i]->getName(),
271264
Technology::T->fet[j][i]->getName()); pp_nl;
272-
if (Technology::T->well[1-j][i]) {
265+
266+
#if 0
267+
/* add this later */
268+
if (Technology::T->welldiff[1-j][i] &&
269+
Technology::T->welldiff[j][i]) {
273270
pp_printf (pp, "paint %sc %s %sc",
274-
Technology::T->well[1-j][i]->getName(),
271+
Technology::T->welldiff[1-j][i]->getName(),
272+
Technology::T->well[j][i]->getName(),
273+
Technology::T->welldiff[j][i]->getName()); pp_nl;
274+
275+
pp_printf (pp, "paint %sc %s %sc",
276+
Technology::T->welldiff[1-j][i]->getName(),
275277
Technology::T->well[j][i]->getName(),
276278
Technology::T->well[j][i]->getName()); pp_nl;
277279
}
280+
#endif
278281
}
279282
}
280283
}
@@ -289,15 +292,15 @@ static void emit_connect (pp_t *pp)
289292
Material *m1, *m2;
290293
pp_printf (pp, "connect"); pp_TAB;
291294
pp_printf (pp, "%s", Technology::T->poly->getName());
292-
pp_printf (pp, ",%sc/a", Technology::T->poly->getName());
295+
pp_printf (pp, ",%s/a", Technology::T->poly->viaUpName());
293296
for (int i=0; i < Technology::T->num_devs; i++) {
294297
for (int j=0; j < 2; j++) {
295298
pp_printf (pp, ",%s", Technology::T->fet[j][i]->getName());
296299
}
297300
}
298301
pp_printf (pp, " ");
299302
pp_printf (pp, "%s", Technology::T->poly->getName());
300-
pp_printf (pp, ",%sc/a", Technology::T->poly->getName());
303+
pp_printf (pp, ",%s/a", Technology::T->poly->viaUpName());
301304
for (int i=0; i < Technology::T->num_devs; i++) {
302305
for (int j=0; j < 2; j++) {
303306
pp_printf (pp, ",%s", Technology::T->fet[j][i]->getName());
@@ -310,46 +313,46 @@ static void emit_connect (pp_t *pp)
310313
m1 = Technology::T->welldiff[j][i];
311314
m2 = Technology::T->well[j][i];
312315
if (m1 && m2) {
313-
pp_printf (pp, "%s,%s,%sc/a ", m1->getName(), m2->getName(),
314-
m1->getName());
315-
pp_printf (pp, "%s,%s,%sc/a", m1->getName(), m2->getName(),
316-
m1->getName());
316+
pp_printf (pp, "%s,%s,%s/a ", m1->getName(), m2->getName(),
317+
m1->viaUpName());
318+
pp_printf (pp, "%s,%s,%s/a", m1->getName(), m2->getName(),
319+
m1->viaUpName());
317320
pp_nl;
318321
}
319322

320323
m1 = Technology::T->diff[j][i];
321324
if (m1) {
322-
pp_printf (pp, "%s,%sc/a %s,%sc/a", m1->getName(),
323-
m1->getName(), m1->getName(), m1->getName());
325+
pp_printf (pp, "%s,%s/a %s,%s/a", m1->getName(),
326+
m1->viaUpName(), m1->getName(), m1->viaUpName());
324327
pp_nl;
325328
}
326329
}
327330
}
328331

329-
pp_printf (pp, "m1,m2c/m1,%sc/m1", Technology::T->poly->getName());
332+
pp_printf (pp, "m1,m2c/m1,%s/m1", Technology::T->poly->viaUpName());
330333
for (int i=0; i < Technology::T->num_devs; i++) {
331334
for (int j=0; j < 2; j++) {
332335
m1 = Technology::T->welldiff[j][i];
333336
if (m1) {
334-
pp_printf (pp, ",%sc/a", m1->getName());
337+
pp_printf (pp, ",%s/a", m1->viaUpName());
335338
}
336339
m1 = Technology::T->diff[j][i];
337340
if (m1) {
338-
pp_printf (pp, ",%sc/a", m1->getName());
341+
pp_printf (pp, ",%s/a", m1->viaUpName());
339342
}
340343
}
341344
}
342345
pp_printf (pp, " ");
343-
pp_printf (pp, "m1,m2c/m1,%sc/m1", Technology::T->poly->getName());
346+
pp_printf (pp, "m1,m2c/m1,%s/m1", Technology::T->poly->viaUpName());
344347
for (int i=0; i < Technology::T->num_devs; i++) {
345348
for (int j=0; j < 2; j++) {
346349
m1 = Technology::T->welldiff[j][i];
347350
if (m1) {
348-
pp_printf (pp, ",%sc/a", m1->getName());
351+
pp_printf (pp, ",%s/a", m1->viaUpName());
349352
}
350353
m1 = Technology::T->diff[j][i];
351354
if (m1) {
352-
pp_printf (pp, ",%sc/a", m1->getName());
355+
pp_printf (pp, ",%s/a", m1->viaUpName());
353356
}
354357
}
355358
}
@@ -381,7 +384,7 @@ void emit_mzrouter (pp_t *pp)
381384
pp_printf (pp, "style irouter"); pp_nl;
382385
pp_printf (pp, "layer m1 2 1 1 1"); pp_nl;
383386
pp_printf (pp, "layer %s 2 2 1 1", Technology::T->poly->getName()); pp_nl;
384-
pp_printf (pp, "contact %sc m1 %s 10", Technology::T->poly->getName(),
387+
pp_printf (pp, "contact %s m1 %s 10", Technology::T->poly->viaUpName(),
385388
Technology::T->poly->getName());
386389
pp_UNTAB;
387390
pp_printf (pp, "end");
@@ -472,7 +475,7 @@ void emit_extract (pp_t *pp)
472475
pp_printf (pp, "extract"); pp_TAB;
473476

474477
pp_printf (pp, "style generic"); pp_nl;
475-
pp_printf (pp, "scale 1"); pp_nl;
478+
pp_printf (pp, "cscale 1"); pp_nl;
476479
pp_printf (pp, "lambda 5"); pp_nl;
477480
pp_printf (pp, "step 100"); pp_nl;
478481
pp_printf (pp, "sidehalo 8"); pp_nl;
@@ -495,6 +498,8 @@ void emit_extract (pp_t *pp)
495498
fet nfet ndiff,ndc 1 nfet GND! pwell 56 48
496499
*/
497500

501+
pp_printf (pp, "planeorder comment %d", order++);
502+
498503
pp_UNTAB;
499504
pp_printf (pp, "end");
500505
pp_SPACE;
@@ -506,11 +511,11 @@ void emit_wiring (pp_t *pp)
506511

507512
pp_printf (pp, "# dummy"); pp_nl;
508513
for (int i=0; i < Technology::T->nmetals-1; i++) {
509-
pp_printf (pp, "contact m%dc 28 metal%d 0 metal%d 0", i+2,
514+
pp_printf (pp, "contact m%dc 28 m%d 0 m%d 0", i+2,
510515
i+1, i+2); pp_nl;
511516
}
512-
pp_printf (pp, "contact %sc 28 metal1 0 %s 0",
513-
Technology::T->poly->getName(),
517+
pp_printf (pp, "contact %s 28 m1 0 %s 0",
518+
Technology::T->poly->viaUpName(),
514519
Technology::T->poly->getName());
515520

516521
pp_UNTAB;
@@ -523,8 +528,8 @@ void emit_router (pp_t *pp)
523528
pp_printf (pp, "router"); pp_TAB;
524529

525530
pp_printf (pp, "# dummy"); pp_nl;
526-
pp_printf (pp, "layer1 metal1 18 m1,m2c/m1 18"); pp_nl;
527-
pp_printf (pp, "layer2 metal2 20 m2c/m2,m3c,m2 20"); pp_nl;
531+
pp_printf (pp, "layer1 m1 18 m1,m2c/m1 18"); pp_nl;
532+
pp_printf (pp, "layer2 m2 20 m2c/m2,m3c,m2 20"); pp_nl;
528533
pp_printf (pp, "contacts m2c 28"); pp_nl;
529534
pp_printf (pp, "gridspacing 8");
530535

@@ -562,7 +567,7 @@ void emit_plot (pp_t *pp)
562567
pp_printf (pp, "style pnm"); pp_TAB;
563568

564569
for (int i=0; i < Technology::T->nmetals; i++) {
565-
pp_printf (pp, "draw metal%d", i+1); pp_nl;
570+
pp_printf (pp, "draw m%d", i+1); pp_nl;
566571
}
567572
pp_printf (pp, "draw polysilicon"); pp_nl;
568573

0 commit comments

Comments
 (0)