1 /************************************************************
3 ** COPYRIGHT (C) 1993 UNIVERSITY OF PITTSBURGH
4 ** COPYRIGHT (C) 1996 GANNON UNIVERSITY
7 ** This software is distributed on an as-is basis
8 ** with no warranty implied or intended. No author
9 ** or distributor takes responsibility to anyone
10 ** regarding its use of or suitability.
12 ** The software may be distributed and modified
13 ** freely for academic and other non-commercial
14 ** use but may NOT be utilized or included in whole
15 ** or part within any commercial product.
17 ** This copyright notice must remain on all copies
18 ** and modified versions of this software.
20 ************************************************************/
24 /*---------------------------------------------------------------
26 *---------------------------------------------------------------
29 /*---------------------------------------------------------------
31 *---------------------------------------------------------------
34 extern mlist
*modules
; /* M the set of all modules */
35 extern nlist
*nets
; /* N the set of all nets */
36 extern tlist
*ext_terms
; /* ST the set of all system terminals */
37 extern mlist
*ext_mods
; /* the modules associated w/ ST */
40 extern tlist
*int_terms
; /* T the set of all inter-module terminals */
42 /* FOR THE ROUTER (only) */
43 extern tile
**routingRoot
[2];
44 extern int currentPartition
;
47 extern mlist
**boxes
; /* the sets of unit boxes */
48 extern ctree
**parti_stats
; /* partition statistics */
50 /* FOR THE PLACER (only) */
51 extern mlist
**strings
; /* the set of strings */
52 extern mlist
**partitions
; /* the set of PARTITIONS (lists) of modules */
53 extern tile
**rootTiles
; /* the tile-spaces that correspond to each partition */
54 extern int *x_positions
; /* and their postions, after placement */
55 extern int *y_positions
;
56 extern int *str_length
;
57 extern int *str_height
;
59 /* Used by a lot of files: */
60 extern int *x_sizes
; /* max x size of each partition */
61 extern int *y_sizes
; /* max y size of each partition */
62 extern int xfloor
, yfloor
;
66 extern int partition_count
; /* the total number of partitions created */
67 extern int lcount
; /* number of input lines read */
68 extern int module_count
; /* number of modules/objects read in */
69 extern int node_count
; /* number of nodes/signals read in */
70 extern int terminal_count
; /* number of terminals read in */
72 extern int connected
[MAX_MOD
][MAX_MOD
]; /* BIG array of connection counts */
73 extern info_type module_info
[MAX_MOD
]; /* reused module information array */
75 extern int compute_aspect_ratios
; /* command line flag: a(spect ratios) */
76 extern int Xcanvas_scaling
; /* command line flag: b (use XCanvas scaling) */
77 extern int max_partition_conn
; /* command line arg: c(onnections) */
78 extern int debug_level
; /* command line arg: d(ebug) */
79 extern int stopAtFirstCut
; /* command line flag: f(irst cut @ Global Route) */
80 extern int congestion_rule
; /* command line flag: conGestion Rule */
81 extern int do_hand_placement
; /* command line flag: h(and placement) */
82 extern int includeSysterms
; /* command line flag: i(donot Include system terminals)*/
83 extern int cc_search_level
; /* command line arg: l(evel) */
84 extern int matrix_type
; /* command line arg: m(atrix type) */
85 extern int do_routing
; /* command line flag: n(o routing) */
86 extern FILE *outputFile
; /* command line arg: o(utput to file) */
87 extern int partition_rule
; /* command line arg: p(artition_rule) */
88 extern int recordStats
; /* command line flag: q(uality statistics) */
89 extern float partition_ratio
; /* command line arg: r(atio) */
90 extern int max_partition_size
; /* command line arg: s(ize) */
91 extern int turn_mode
; /* command line arg: t(urn mode) */
92 extern int useSlivering
; /* command line flag: v(bypass sliver correction code) */
93 extern int useAveraging
; /* command line flag: w(use Weighted averaging) */
94 extern int latex
; /* command line flag: x(lateX mode) */
95 extern int recordTiming
; /* command line flag: y(collect timing stats) */
96 extern int useBlockPartitioning
; /* -u flag; skips automatic partitioning */
97 extern int collapseNullModules
; /* -k flag;denies kollapse of NL_GATES */
99 /*---------------------------------------------------------------
101 *---------------------------------------------------------------
103 void GenerateXcircuitFormat(XCWindowData
*areastruct
, FILE *ps
, Boolean bIsSparmode
);
104 void Route(XCWindowData
*areastruct
, Boolean bIsSparmode
);
105 int SetDebugLevel(int *level
);
106 int ReadHSpice(char *fname
);
108 /*---------------------------------------------------------------
110 *---------------------------------------------------------------
113 extern int asg_make_instance(XCWindowData
*, char *, int, int, int, int);
114 extern void asg_make_polygon(XCWindowData
*, int, int x
[], int y
[]);
115 extern void asg_make_label(XCWindowData
*, u_char
, int, int, char *);
117 /*---------------------------------------------------------------
119 *---------------------------------------------------------------
122 extern module
*curobj_module
;
123 extern char *str_end_copy();
125 void AddModule(char *name
, char *type
, char *innode
, char *outnode
);
126 void Add2TermModule(char *, char *, char *, char *);
127 void AddNTermModule(char *, char *, int, ...);
128 void AddModuleTerm(char *, char *, int, int);
130 /*---------------------------------------------------------------
132 *---------------------------------------------------------------
135 extern int partition();
136 extern void place_first_strings();
137 extern void box_placement();
138 extern void placement_prep();
139 extern mlist
*partition_placement();
140 extern mlist
*gross_systerm_placement();
141 extern mlist
*make_room_for_systerm_placement();
142 extern int cross_coupled_p();
143 extern int on_output_net_p();
145 /*---------------------------------------------------------------
146 * Defined in terminals.c
147 *---------------------------------------------------------------
149 extern mlist
*fine_systerm_placement();
151 /*---------------------------------------------------------------
152 * Defined in hand_place.c
153 *---------------------------------------------------------------
155 extern mlist
*hand_placement();
157 /*---------------------------------------------------------------
158 * Defined in global_route.c
159 *---------------------------------------------------------------
161 extern void create_routing_space();
162 extern nlist
*first_global_route();
163 extern nlist
*incremental_global_route();
164 extern void print_global_route();
165 extern int identity();
166 extern int (*set_congestion_value
)();
168 /*---------------------------------------------------------------
169 * Defined in local_route.c
170 *---------------------------------------------------------------
172 extern void local_route();
173 extern void print_local_route_to_file(FILE *f
, nlist
*nets
);
174 extern void xc_print_local_route(XCWindowData
*areastruct
, nlist
*nets
);
175 extern void collect_congestion_stats();
177 /*---------------------------------------------------------------
178 * Defined in psfigs.c
179 *---------------------------------------------------------------
181 extern int ps_print_seg();
182 extern int ps_print_mod();
183 extern int xc_print_mod(XCWindowData
*areastruct
, module
*m
);
184 extern int ps_print_contact();
185 extern int ps_print_border();
186 extern int ps_put_label();
187 extern int ps_put_int();
189 extern int ps_print_standard_header();
191 /*---------------------------------------------------------------
193 *---------------------------------------------------------------
195 extern void print_modules();
196 extern void print_nets();
197 extern void print_ext();
198 extern void print_connections();
199 extern void p_cons();
200 extern int print_ctree();
201 extern void print_info();
202 extern void print_boxes();
203 extern void print_strings();
204 extern void print_result();
205 extern void draft_statistics();
206 extern float manhattan_PWS();
207 extern void print_distance_stats();
208 extern void print_distance_matricies();
210 /*---------------------------------------------------------------
211 * Defined in utility.c
212 *---------------------------------------------------------------
214 extern void newnode();
215 extern module
*newobject();
217 extern void addout();
218 extern void adddelay();
219 extern void add_port();
221 extern llist
*insert_index_list();
222 extern module
*get_module();
223 extern mark_connection();
224 extern count_terms();
225 extern count_terms_part();
227 extern tnode
*build_leaf();
228 extern tnode
*build_node();
230 extern int pull_terms_from_nets();
231 extern int add_terms_to_nets();
233 extern void clip_null_gates();
235 extern int pin_spacing();
236 extern int get_terminal_counts();
237 extern int reposition_all_terminals();
238 extern int reset_default_icon_size();
239 extern int fix_pin_position();