FreeCalypso > hg > ueda-linux
annotate ueda/sverp-bind/output.c @ 31:61272ee5aadc
unet-bind: implemented -a option for specifying wanted attributes
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Sat, 08 Aug 2015 21:44:10 +0000 |
parents | 558269596a5c |
children | 6c7c79d37eff |
rev | line source |
---|---|
22
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 #include <stdio.h> |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 #include <stdlib.h> |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 #include <string.h> |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 #include <strings.h> |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 #include "../libueda/xga.h" |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 #include "../libunet/nethash.h" |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include "struct.h" |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 extern char *MCLfile; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 extern char *input_filename; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 extern char *output_filename; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 extern struct net *net_list_head; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 extern int ncomponents; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 extern struct outcomp *netlist_comps; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 extern struct outcomp *starpoint_list_head; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 static FILE *outF; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 generate_output() |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 if (output_filename) { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 outF = fopen(output_filename, "w"); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 if (!outF) { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 perror(output_filename); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 exit(1); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 } else |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 outF = stdout; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 fprintf(outF, "# This netlist has been generated by unet-bind\n"); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 fprintf(outF, "# from %s and %s\n", MCLfile, input_filename); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 if (net_list_head) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 emit_output_nets(); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 if (starpoint_list_head) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 emit_output_starpoints(); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 if (ncomponents) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 emit_output_components(); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 if (outF != stdout) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 fclose(outF); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 emit_output_nets() |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 register struct net *n; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 fprintf(outF, "\n# Nets unchanged from %s:\n#\n", input_filename); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 for (n = net_list_head; n; n = n->nextinlist) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 fprintf(outF, "NET %s\n", n->name); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 emit_output_components() |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 register int n; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 fprintf(outF, "\n# %d components from MCL:\n", ncomponents); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 for (n = 0; n < ncomponents; n++) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 emit_component_block(netlist_comps + n, "COMPONENT"); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 emit_output_starpoints() |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 register struct outcomp *oc; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 fprintf(outF, "\n# Star connection points:\n"); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 for (oc = starpoint_list_head; oc; oc = oc->next) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 emit_component_block(oc, "STARPOINT"); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
69 static void |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
70 emit_output_pin_number(oc, pinidx) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
71 register struct outcomp *oc; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
72 register int pinidx; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
73 { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
74 register struct grid_pkg_desc *xga = oc->grid_pkg; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
75 int r, c; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
76 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
77 if (!xga) { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
78 fprintf(outF, "%d", pinidx + 1); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 return; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
81 r = pinidx / xga->ncolumns; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
82 c = pinidx % xga->ncolumns; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
83 fprintf(outF, "%c%d", xga->row_letters[r], c + 1); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
84 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
85 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
86 static void |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
87 emit_output_pin_line(oc, pinidx) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
88 register struct outcomp *oc; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
89 int pinidx; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
90 { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
91 register struct pinconn *conn; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
92 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
93 fputs(" PIN ", outF); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
94 emit_output_pin_number(oc, pinidx); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
95 fputs(" = ", outF); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
96 conn = oc->conn_array[pinidx]; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
97 if (!conn) { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
98 fprintf(outF, "NC (unet-bind found no connection)\n"); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
99 return; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
100 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
101 if (conn->net) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
102 fprintf(outF, "NET %s\n", conn->net->name); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
103 else |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
104 fprintf(outF, "NC (%s)\n", conn->nc_comment); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
105 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
106 |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
107 emit_component_block(oc, comp_type_kw) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
108 register struct outcomp *oc; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
109 char *comp_type_kw; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
110 { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
111 register int pinidx; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
112 |
23
558269596a5c
unet-bind output spacing fix
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
22
diff
changeset
|
113 fprintf(outF, "\n%s %s {\n", comp_type_kw, oc->name); |
22
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
114 if (oc->altname) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
115 fprintf(outF, " ALTNAME %s\n", oc->altname); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
116 for (pinidx = 0; pinidx < oc->npins; pinidx++) { |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
117 if (oc->grid_pkg && oc->grid_pkg->holes_array[pinidx]) |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
118 continue; |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
119 emit_output_pin_line(oc, pinidx); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
120 } |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
121 fputs("}\n", outF); |
c7ebd6179f5d
ueda-bind: output implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
122 } |