VPR-6.0
|
00001 /* 00002 Global variables 00003 00004 Key global variables that are used everywhere are: 00005 clb_net, vpack_net, block, and logical_block 00006 These variables represent the user netlist in various stages of the CAD flow 00007 */ 00008 00009 #ifndef GLOBALS_H 00010 #define GLOBALS_H 00011 00012 /******************************************************************** 00013 User Netlist Globals 00014 ********************************************************************/ 00015 00016 /**@{*/ 00017 /** external-to-complex block nets in the user netlist */ 00018 extern int num_nets; 00019 extern struct s_net *clb_net; 00020 /**@}*/ 00021 00022 /**@{*/ 00023 /** blocks in the user netlist */ 00024 extern int num_blocks; 00025 extern struct s_block *block; 00026 /**@}*/ 00027 00028 00029 /******************************************************************** 00030 Physical FPGA architecture globals 00031 *********************************************************************/ 00032 00033 /** x and y dimensions of the FPGA itself, the core of the FPGA is from [1..nx][1..ny], the I/Os form a perimeter surrounding the core */ 00034 extern int nx, ny; 00035 extern struct s_grid_tile **grid; /**< FPGA complex blocks grid [0..nx+1][0..ny+1] */ 00036 00037 /**@{*/ 00038 /** Special pointers to identify special blocks on an FPGA: I/Os, unused, and default */ 00039 extern t_type_ptr IO_TYPE; 00040 extern t_type_ptr EMPTY_TYPE; 00041 extern t_type_ptr FILL_TYPE; 00042 /**@}*/ 00043 00044 /**@{*/ 00045 /** type_descriptors are blocks that can be moved by the placer 00046 such as: I/Os, CLBs, memories, multipliers, etc 00047 Different types of physical block are contained in type descriptors 00048 */ 00049 extern int num_types; 00050 extern struct s_type_descriptor *type_descriptors; 00051 /**@}*/ 00052 00053 /** Default prefix string for output files */ 00054 extern char *OutFilePrefix; 00055 00056 /** Name of the blif circuit */ 00057 extern char *blif_circuit_name; 00058 00059 /** Default area of a 1x1 logic tile (excludes routing) on the FPGA */ 00060 extern float grid_logic_tile_area; 00061 00062 /** Area of a mux transistor for the input connection block */ 00063 extern float ipin_mux_trans_size; 00064 00065 /******************************************************************* 00066 Packing related globals 00067 ********************************************************************/ 00068 00069 /* Netlist description data structures. */ 00070 00071 /**@{*/ 00072 /** User netlist information */ 00073 extern int num_logical_nets, num_logical_blocks, num_saved_logical_blocks, num_saved_logical_nets; 00074 extern int num_p_inputs, num_p_outputs; 00075 extern struct s_net *vpack_net, *saved_logical_nets; 00076 extern struct s_logical_block *logical_block, *saved_logical_blocks; 00077 extern struct s_subckt *subckt; 00078 /**@}*/ 00079 00080 /** Primary inputs removed from circuit */ 00081 extern struct s_linked_vptr *circuit_p_io_removed; 00082 00083 /**@{*/ 00084 /** Relationship between external-to-complex block nets and internal-to-complex block nets. */ 00085 extern int *clb_to_vpack_net_mapping; /**< [0..num_clb_nets - 1] */ 00086 extern int *vpack_to_clb_net_mapping; /**< [0..num_vpack_nets - 1] */ 00087 /**@}*/ 00088 00089 /** Number in original netlist, before FF packing. */ 00090 extern int num_luts, num_latches, num_subckts; 00091 00092 /******************************************************************* 00093 Routing related globals 00094 ********************************************************************/ 00095 00096 /** chan_width_x is the x-directed channel; i.e. between rows. 00097 * numerical form */ 00098 extern int *chan_width_x, *chan_width_y; 00099 00100 /** [0..num_nets-1] of linked list start pointers. Defines the routing. */ 00101 extern struct s_trace **trace_head, **trace_tail; 00102 00103 /**@{*/ 00104 /** Structures to define the routing architecture of the FPGA. */ 00105 extern int num_rr_nodes; 00106 extern t_rr_node *rr_node; /**< [0..num_rr_nodes-1] */ 00107 extern int num_rr_indexed_data; 00108 extern t_rr_indexed_data *rr_indexed_data; /**< [0 .. num_rr_indexed_data-1] */ 00109 extern t_ivec ***rr_node_indices; 00110 extern int **net_rr_terminals; /**< [0..num_nets-1][0..num_pins-1] */ 00111 extern struct s_switch_inf *switch_inf; /**< [0..det_routing_arch.num_switch-1] */ 00112 extern int **rr_blk_source; /**< [0..num_blocks-1][0..num_class-1] */ 00113 /**@}*/ 00114 00115 00116 /******************************************************************* 00117 Timing related globals 00118 ********************************************************************/ 00119 extern t_tnode *tnode; /**< [0..num_tnodes - 1] */ 00120 extern int num_tnodes; /**< Number of nodes (pins) in the timing graph */ 00121 extern float pb_max_internal_delay; /**< biggest internal delay of block */ 00122 extern const t_pb_type *pbtype_max_internal_delay; /**< block type with highest internal delay */ 00123 00124 00125 #endif 00126