annotate ueda/unet-bind/readunet.c @ 101:ffab0a4424ad

ueda: unet-bind program moved into sensibly named unet-bind subdir
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 29 Sep 2019 22:42:41 +0000
parents ueda/sverp-bind/readunet.c@ce887659d12e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
1 #include <stdio.h>
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
2 #include <stdlib.h>
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
3 #include <string.h>
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
4 #include <strings.h>
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
5 #include "../libueda/xga.h"
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
6 #include "../libunet/unetrd.h"
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
7 #include "struct.h"
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
8
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
9 extern char *pinname_to_pinnumber();
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
10 extern struct net *find_net_by_name();
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
11 extern struct instance *find_instance();
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
12
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
13 extern char *input_filename;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
14 extern int unbound_instances;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
15
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
16 static struct unetrd_state rdstate;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
17 static struct unetrd_out rdout;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
18
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
19 static int
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
20 resolve_pinnum_numeric(oc, pinnumstr)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
21 struct outcomp *oc;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
22 register char *pinnumstr;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
23 {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
24 register int num;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
25
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
26 if (!string_is_valid_decnum(pinnumstr)) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
27 invnum: fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
28 "%s line %d: component %s has numeric pins and \"%s\" is not a valid pin number\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
29 input_filename, rdstate.lineno, oc->name, pinnumstr);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
30 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
31 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
32 num = atoi(pinnumstr);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
33 if (num < 1)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
34 goto invnum;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
35 if (num > oc->npins) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
36 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
37 "%s line %d: attempting connection to pin %d on component %s that only has %d pins\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
38 input_filename, rdstate.lineno, num, oc->name,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
39 oc->npins);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
40 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
41 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
42 return(num - 1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
43 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
44
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
45 static int
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
46 resolve_pinnum_grid(oc, pinnumstr)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
47 struct outcomp *oc;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
48 char *pinnumstr;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
49 {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
50 register struct grid_pkg_desc *xga = oc->grid_pkg;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
51 struct xga_parsed_pinnum rowcol;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
52 register int idx;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
53
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
54 if (parse_xga_pinnumber(xga, pinnumstr, &rowcol) < 0) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
55 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
56 "%s line %d: \"%s\" is not a valid pin number for grid package %s\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
57 input_filename, rdstate.lineno, pinnumstr, oc->name);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
58 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
59 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
60 idx = rowcol.row_0based * xga->ncolumns + rowcol.col_0based;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
61 if (xga->holes_array[idx]) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
62 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
63 "%s line %d: pin position %s is a hole in the grid package for %s\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
64 input_filename, rdstate.lineno, pinnumstr, oc->name);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
65 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
66 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
67 return(idx);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
68 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
69
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
70 static int
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
71 resolve_pinnum(oc, pinnumstr)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
72 register struct outcomp *oc;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
73 char *pinnumstr;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
74 {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
75 if (oc->grid_pkg)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
76 return resolve_pinnum_grid(oc, pinnumstr);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
77 else
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
78 return resolve_pinnum_numeric(oc, pinnumstr);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
79 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
80
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
81 static struct pinconn *
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
82 create_pinconn()
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
83 {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
84 register struct pinconn *conn;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
85 register struct net *net;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
86
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
87 if (rdout.connect_to_net) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
88 net = find_net_by_name(rdout.connect_to_net);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
89 conn = (struct pinconn *) malloc(sizeof(struct pinconn));
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
90 if (!conn) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
91 perror("malloc");
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
92 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
93 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
94 conn->net = net;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
95 conn->nc_comment = 0;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
96 } else {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
97 conn = (struct pinconn *) malloc(sizeof(struct pinconn) +
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
98 strlen(rdout.nc_comment) + 1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
99 if (!conn) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
100 perror("malloc");
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
101 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
102 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
103 conn->net = 0;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
104 conn->nc_comment = (char *)(conn + 1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
105 strcpy(conn->nc_comment, rdout.nc_comment);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
106 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
107 conn->input_lineno = rdstate.lineno;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
108 return conn;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
109 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
110
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
111 static void
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
112 connect_pin(oc, pinnumstr)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
113 register struct outcomp *oc;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
114 char *pinnumstr;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
115 {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
116 register int pinidx;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
117
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
118 pinidx = resolve_pinnum(oc, pinnumstr);
37
ce887659d12e unet-bind: implemented hier=flip:... hack for 2-pin components
Space Falcon <falcon@ivan.Harhan.ORG>
parents: 29
diff changeset
119 if (oc->reverse_2pin)
ce887659d12e unet-bind: implemented hier=flip:... hack for 2-pin components
Space Falcon <falcon@ivan.Harhan.ORG>
parents: 29
diff changeset
120 pinidx = !pinidx;
19
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
121 if (oc->conn_array[pinidx]) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
122 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
123 "error: multiple connections to %s pin %s (input lines %d and %d)\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
124 oc->name, pinnumstr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
125 oc->conn_array[pinidx]->input_lineno, rdstate.lineno);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
126 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
127 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
128 oc->conn_array[pinidx] = create_pinconn();
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
129 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
130
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
131 static void
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
132 process_pinmap(inst)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
133 struct instance *inst;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
134 {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
135 register struct outcomp *oc = inst->outcomp;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
136 register char *pinnum;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
137
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
138 if (!oc->mclcomp) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
139 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
140 "%s line %d: PINMAP is meaningless for starpoints\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
141 input_filename, rdstate.lineno);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
142 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
143 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
144 pinnum = pinname_to_pinnumber(oc->mclcomp, rdout.objname, inst->slot);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
145 if (!pinnum) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
146 fprintf(stderr, "PINMAP error on %s line %d\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
147 input_filename, rdstate.lineno);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
148 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
149 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
150 connect_pin(oc, pinnum);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
151 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
152
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
153 static void
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
154 process_component()
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
155 {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
156 struct instance *inst;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
157
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
158 inst = find_instance(rdout.objname);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
159 if (!inst) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
160 fprintf(stderr, "%s line %d: instance %s not bound in MCL\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
161 input_filename, rdstate.lineno, rdout.objname);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
162 unbound_instances++;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
163 } else {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
164 if (inst->claimed) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
165 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
166 "%s line %d: instance %s appears more than once\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
167 input_filename, rdstate.lineno, inst->name);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
168 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
169 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
170 inst->claimed = 1;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
171 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
172 for (;;) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
173 if (!read_unet_line(&rdstate, &rdout)) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
174 fprintf(stderr, "%s error: EOF in component block\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
175 input_filename);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
176 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
177 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
178 if (rdout.typecode == UNETOBJ_CLOSINGBRACE)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
179 break;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
180 switch(rdout.typecode) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
181 case UNETOBJ_PRIMITIVE:
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
182 case UNETOBJ_ALTNAME:
29
dcdf606dfaaa unet-bind: ignore ATTR lines in unet input
Space Falcon <falcon@ivan.Harhan.ORG>
parents: 19
diff changeset
183 case UNETOBJ_ATTR:
19
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
184 continue;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
185 case UNETOBJ_PIN:
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
186 if (inst)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
187 connect_pin(inst->outcomp, rdout.objname);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
188 continue;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
189 case UNETOBJ_PINMAP:
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
190 if (inst)
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
191 process_pinmap(inst);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
192 continue;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
193 default:
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
194 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
195 "%s line %d: object type %s unexpected in component block\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
196 input_filename, rdstate.lineno, rdout.keyword);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
197 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
198 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
199 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
200 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
201
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
202 process_input_unet()
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
203 {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
204 open_unet_input_file(input_filename, &rdstate);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
205 while (read_unet_line(&rdstate, &rdout)) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
206 switch(rdout.typecode) {
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
207 case UNETOBJ_CLOSINGBRACE:
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
208 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
209 "%s line %d: unexpected '}' outside of component block\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
210 input_filename, rdstate.lineno);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
211 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
212 case UNETOBJ_NET:
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
213 enter_net_object(rdout.objname, 0);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
214 continue;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
215 case UNETOBJ_COMPONENT:
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
216 process_component();
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
217 continue;
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
218 case UNETOBJ_STARPOINT:
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
219 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
220 "error: STARPOINT objects not expected in unet-bind input (%s line %d)\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
221 input_filename, rdstate.lineno);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
222 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
223 default:
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
224 fprintf(stderr,
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
225 "%s line %d: unexpected object type %s\n",
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
226 input_filename, rdstate.lineno, rdout.keyword);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
227 exit(1);
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
228 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
229 }
1d4c693b8f35 unet-bind: sverp netlist reading implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
230 }