📄 vpr_types.h
字号:
int frequency; int length; short wire_switch; short opin_switch; float frac_cb; float frac_sb; boolean longline; float Rmetal; float Cmetal; enum e_directionality directionality; boolean *cb; int cb_len; boolean *sb; int sb_len;}t_segment_inf;/* Lists all the important information about a certain segment type. Only * * used if the route_type is DETAILED. [0 .. det_routing_arch.num_segment] * * frequency: ratio of tracks which are of this segment type. * * length: Length (in clbs) of the segment. * * wire_switch: Index of the switch type that connects other wires *to* * * this segment. * * opin_switch: Index of the switch type that connects output pins (OPINs) * * *to* this segment. * * frac_cb: The fraction of logic blocks along its length to which this * * segment can connect. (i.e. internal population). * * frac_sb: The fraction of the length + 1 switch blocks along the segment * * to which the segment can connect. Segments that aren't long * * lines must connect to at least two switch boxes. * * Cmetal: Capacitance of a routing track, per unit logic block length. * * Rmetal: Resistance of a routing track, per unit logic block length. * (UDSD by AY) drivers: How do signals driving a routing track connect to * * the track? */struct s_switch_inf{ boolean buffered; float R; float Cin; float Cout; float Tdel; float mux_trans_size; float buf_size; char *name;};/* Lists all the important information about a switch type. * * [0 .. det_routing_arch.num_switch] * * buffered: Does this switch include a buffer? * * R: Equivalent resistance of the buffer/switch. * * Cin: Input capacitance. * * Cout: Output capacitance. * * Tdel: Intrinsic delay. The delay through an unloaded switch is * * Tdel + R * Cout. * * mux_trans_size: The area of each transistor in the segment's driving mux * * measured in minimum width transistor units * * buf_size: The area of the buffer. If set to zero, area should be * * calculated from R */enum e_direction{ INC_DIRECTION = 0, DEC_DIRECTION = 1, BI_DIRECTION = 2}; /* UDSD by AY */typedef struct s_seg_details{ int length; int start; boolean longline; boolean *sb; boolean *cb; short wire_switch; short opin_switch; float Rmetal; float Cmetal; boolean twisted; enum e_direction direction; /* UDSD by AY */ enum e_drivers drivers; /* UDSD by AY */ int start_track; /* UDSD by AY */ int end_track; /* UDSD by AY */ int group_start; int group_size; int index;}t_seg_details;/* Lists detailed information about segmentation. [0 .. W-1]. * * length: length of segment. * * start: index at which a segment starts in channel 0. * * longline: TRUE if this segment spans the entire channel. * * sb: [0..length]: TRUE for every channel intersection, relative to the * * segment start, at which there is a switch box. * * cb: [0..length-1]: TRUE for every logic block along the segment at * * which there is a connection box. * * wire_switch: Index of the switch type that connects other wires *to* * * this segment. * * opin_switch: Index of the switch type that connects output pins (OPINs) * * *to* this segment. * * Cmetal: Capacitance of a routing track, per unit logic block length. * * Rmetal: Resistance of a routing track, per unit logic block length. * * (UDSD by AY) direction: The direction of a routing track. * * (UDSD by AY) drivers: How do signals driving a routing track connect to * * the track? * * (UDSD by AY) start_track: The index of the first track of this segment * * type. * * (UDSD by AY) end_track: The index of the last track of this segment type.* * index: index of the segment type used for this track. */struct s_linked_f_pointer{ struct s_linked_f_pointer *next; float *fptr;};/* A linked list of float pointers. Used for keeping track of * * which pathcosts in the router have been changed. *//* Uncomment lines below to save some memory, at the cost of debugging ease. *//*enum e_rr_type {SOURCE, SINK, IPIN, OPIN, CHANX, CHANY}; *//* typedef short t_rr_type */typedef enum e_rr_type{ SOURCE, SINK, IPIN, OPIN, CHANX, CHANY, NUM_RR_TYPES }t_rr_type;/* Type of a routing resource node. x-directed channel segment, * * y-directed channel segment, input pin to a clb to pad, output * * from a clb or pad (i.e. output pin of a net) and: * * SOURCE: A dummy node that is a logical output within a block * * -- i.e., the gate that generates a signal. * * SINK: A dummy node that is a logical input within a block * * -- i.e. the gate that needs a signal. */struct s_trace{ int index; short iswitch; struct s_trace *next;};/* Basic element used to store the traceback (routing) of each net. * * index: Array index (ID) of this routing resource node. * * iswitch: Index of the switch type used to go from this rr_node to * * the next one in the routing. OPEN if there is no next node * * (i.e. this node is the last one (a SINK) in a branch of the * * net's routing). * * next: pointer to the next traceback element in this route. */#define NO_PREVIOUS -1typedef struct s_rr_node{ short xlow; short xhigh; short ylow; short yhigh; short ptc_num; short cost_index; short occ; short capacity; short fan_in; short num_edges; t_rr_type type; int *edges; short *switches; float R; float C; enum e_direction direction; /* UDSD by AY */ enum e_drivers drivers; /* UDSD by AY */ int num_wire_drivers; /* UDSD by WMF */ int num_opin_drivers; /* UDSD by WMF (could use "short") */}t_rr_node;/* Main structure describing one routing resource node. Everything in * * this structure should describe the graph -- information needed only * * to store algorithm-specific data should be stored in one of the * * parallel rr_node_?? structures. * * * * xlow, xhigh, ylow, yhigh: Integer coordinates (see route.c for * * coordinate system) of the ends of this routing resource. * * xlow = xhigh and ylow = yhigh for pins or for segments of * * length 1. These values are used to decide whether or not this * * node should be added to the expansion heap, based on things * * like whether it's outside the net bounding box or is moving * * further away from the target, etc. * * type: What is this routing resource? * * ptc_num: Pin, track or class number, depending on rr_node type. * * Needed to properly draw. * * cost_index: An integer index into the table of routing resource indexed * * data (this indirection allows quick dynamic changes of rr * * base costs, and some memory storage savings for fields that * * have only a few distinct values). * * occ: Current occupancy (usage) of this node. * * capacity: Capacity of this node (number of routes that can use it). * * num_edges: Number of edges exiting this node. That is, the number * * of nodes to which it connects. * * edges[0..num_edges-1]: Array of indices of the neighbours of this * * node. * * switches[0..num_edges-1]: Array of switch indexes for each of the * * edges leaving this node. * * * * The following parameters are only needed for timing analysis. * * R: Resistance to go through this node. This is only metal * * resistance (end to end, so conservative) -- it doesn't include the * * switch that leads to another rr_node. * * C: Total capacitance of this node. Includes metal capacitance, the * * input capacitance of all switches hanging off the node, the * * output capacitance of all switches to the node, and the connection * * box buffer capacitances hanging off it. * * (UDSD by AY) direction: if the node represents a track, this field * * indicates the direction of the track. Otherwise * * the value contained in the field should be * * ignored. * * (UDSD by AY) drivers: if the node represents a track, this field * * indicates the driving architecture of the track. * * Otherwise the value contained in the field should * * be ignored. */typedef struct s_rr_indexed_data{ float base_cost; float saved_base_cost; int ortho_cost_index; int seg_index; float inv_length; float T_linear; float T_quadratic; float C_load;}t_rr_indexed_data;/* Data that is pointed to by the .cost_index member of t_rr_node. It's * * purpose is to store the base_cost so that it can be quickly changed * * and to store fields that have only a few different values (like * * seg_index) or whose values should be an average over all rr_nodes of a * * certain type (like T_linear etc., which are used to predict remaining * * delay in the timing_driven router). * * * * base_cost: The basic cost of using an rr_node. * * ortho_cost_index: The index of the type of rr_node that generally * * connects to this type of rr_node, but runs in the * * orthogonal direction (e.g. vertical if the direction * * of this member is horizontal). * * seg_index: Index into segment_inf of this segment type if this type of * * rr_node is an CHANX or CHANY; OPEN (-1) otherwise. * * inv_length: 1/length of this type of segment. * * T_linear: Delay through N segments of this type is N * T_linear + N^2 * * * T_quadratic. For buffered segments all delay is T_linear. * * T_quadratic: Dominant delay for unbuffered segments, 0 for buffered * * segments. * * C_load: Load capacitance seen by the driver for each segment added to * * the chain driven by the driver. 0 for buffered segments. */enum e_cost_indices{ SOURCE_COST_INDEX = 0, SINK_COST_INDEX, OPIN_COST_INDEX, IPIN_COST_INDEX, CHANX_COST_INDEX_START};/* Gives the index of the SOURCE, SINK, OPIN, IPIN, etc. member of * * rr_indexed_data. *//* Type to store our list of token to enum pairings */struct s_TokenPair{ char *Str; int Enum;};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -