comparison ueda/unet-bind/outcomp.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/outcomp.c@c59f52e4bacf
children
comparison
equal deleted inserted replaced
100:071b24bca546 101:ffab0a4424ad
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <strings.h>
5 #include "../libueda/mcl.h"
6 #include "../libueda/xga.h"
7 #include "struct.h"
8
9 extern struct component components[];
10 extern int ncomponents;
11
12 extern char *get_comp_attr();
13 extern struct grid_pkg_desc *read_grid_pkg_file();
14
15 extern int check_completeness;
16
17 struct outcomp *netlist_comps;
18
19 static int
20 try_numpins(oc)
21 register struct outcomp *oc;
22 {
23 char *npins_attr;
24 register int n;
25
26 npins_attr = get_comp_attr(oc->mclcomp, "npins");
27 if (!npins_attr)
28 return(0);
29 n = atoi(npins_attr);
30 if (n <= 0) {
31 fprintf(stderr, "component %s: invalid npins attribute\n",
32 oc->name);
33 exit(1);
34 }
35 oc->npins = n;
36 return(1);
37 }
38
39 static int
40 try_gridpkg(oc)
41 register struct outcomp *oc;
42 {
43 char *attr;
44 register struct grid_pkg_desc *desc;
45
46 attr = get_comp_attr(oc->mclcomp, "grid_pkg");
47 if (!attr)
48 return(0);
49 desc = read_grid_pkg_file(attr);
50 oc->grid_pkg = desc;
51 oc->npins = desc->nrows * desc->ncolumns;
52 return(1);
53 }
54
55 static void
56 init_one_outcomp(oc)
57 register struct outcomp *oc;
58 {
59 register struct pinconn **conn_array;
60 register char *attr;
61
62 oc->name = oc->mclcomp->name;
63 try_numpins(oc);
64 if (!oc->npins)
65 try_gridpkg(oc);
66 if (!oc->npins) {
67 fprintf(stderr,
68 "error: %s has neither npins nor grid_pkg attribute\n",
69 oc->name);
70 exit(1);
71 }
72 conn_array = (struct pinconn **) malloc(sizeof(struct pinconn *) *
73 oc->npins);
74 if (!conn_array) {
75 perror("malloc");
76 exit(1);
77 }
78 bzero(conn_array, sizeof(struct pinconn *) * oc->npins);
79 oc->conn_array = conn_array;
80 if (attr = get_comp_attr(oc->mclcomp, "hier"))
81 process_hier_attr(oc, attr);
82 else if (attr = get_comp_attr(oc->mclcomp, "slotmap"))
83 process_slotmap_attr(oc, attr);
84 else if (check_completeness)
85 fprintf(stderr, "MCL component %s has no binding\n", oc->name);
86 }
87
88 init_outcomp_from_MCL()
89 {
90 register int i;
91
92 netlist_comps = (struct outcomp *)
93 malloc(sizeof(struct outcomp) * ncomponents);
94 if (!netlist_comps) {
95 perror("malloc");
96 exit(1);
97 }
98 bzero(netlist_comps, sizeof(struct outcomp) * ncomponents);
99 for (i = 0; i < ncomponents; i++) {
100 netlist_comps[i].mclcomp = components + i;
101 init_one_outcomp(netlist_comps + i);
102 }
103 }