VPR-6.0

vpr/SRC/base/globals.h

Go to the documentation of this file.
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