VPR-7.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
path_delay.h
Go to the documentation of this file.
1 #ifndef PATH_DELAY
2 #define PATH_DELAY
3 
4 #define DO_NOT_ANALYSE -1
5 
6 /*********************** Defines for timing options *******************************/
7 
8 #define SLACK_DEFINITION 'R'
9 /* Choose how to normalize negative slacks for the optimizers (not in the final timing analysis for output statistics):
10  'R' (T_req-relaxed): For each constraint, set the required time at sink nodes to the max of the true required time
11  (constraint + tnode[inode].clock_skew) and the max arrival time. This means that the required time is "relaxed"
12  to the max arrival time for tight constraints which would otherwise give negative slack.
13  Criticalities are computed once per constraint, using a criticality denominator unique to that constraint
14  (maximum of the constraint and the max arrival time).
15  'S' (Shifted): After all slacks are computed, increase the value of all slacks by the largest negative slack,
16  if it exists. Equivalent to 'R' for single-clock cases.
17  Criticalities are computed once per timing analysis, using a single criticality denominator for all constraints
18  (maximum of all constraints and all required times).
19  This can give unusual results with multiple, very dissimilar constraints.
20 */
21 
22 #ifdef PATH_COUNTING /* Path counting options: */
23  #define DISCOUNT_FUNCTION_BASE 100
24  /* The base of the exponential discount function used to calculate
25  forward and backward path weights. Higher values discount paths
26  with higher slacks more greatly. */
27 
28  #define FINAL_DISCOUNT_FUNCTION_BASE DISCOUNT_FUNCTION_BASE
29  /* The base of the exponential disount function used to calculate
30  path criticality from forward and backward weights. Higher values
31  discount paths with higher slacks more greatly. By default, this
32  is the same as the original discount function base. */
33 
34  #define PACK_PATH_WEIGHT 1
35  #define TIMING_GAIN_PATH_WEIGHT PACK_PATH_WEIGHT
36  #define PLACE_PATH_WEIGHT 0
37  #define ROUTE_PATH_WEIGHT 0
38  /* The percentage of total criticality taken from path criticality
39  as opposed to timing criticality. A value of 0 uses only timing
40  criticality; a value of 1 uses only path criticality. */
41 #endif
42 
43 /*************************** Function declarations ********************************/
44 
46 
48  float inter_cluster_net_delay, t_model *models, t_timing_inf timing_inf);
49 
51 
53 
54 void do_timing_analysis(t_slack * slacks, boolean is_prepacked, boolean do_lut_input_balancing, boolean is_final_analysis);
55 
56 void free_timing_graph(t_slack * slack);
57 
58 void free_timing_stats(void);
59 
60 void print_timing_graph(const char *fname);
61 
62 void print_lut_remapping(const char *fname);
63 
64 void print_slack(float ** slack, boolean slack_is_normalized, const char *fname);
65 
66 void print_criticality(t_slack * slacks, boolean criticality_is_normalized, const char *fname);
67 
68 void print_net_delay(float **net_delay, const char *fname);
69 
70 #ifdef PATH_COUNTING
71 void print_path_criticality(float ** path_criticality, const char *fname);
72 #else
73 void print_clustering_timing_info(const char *fname);
74 
75 boolean has_valid_normalized_T_arr(int inode);
76 #endif
77 
78 void print_timing_stats(void);
79 
80 float get_critical_path_delay(void);
81 
82 void print_critical_path(const char *fname);
83 
84 void get_tnode_block_and_output_net(int inode, int *iblk_ptr, int *inet_ptr);
85 
87  float constant_net_delay_value);
88 
89 void print_timing_graph_as_blif (const char *fname, t_model *models);
90 
91 /*************************** Variable declarations ********************************/
92 
93 extern int num_tnodes; /* Number of nodes (pins) in the timing graph */
94 extern t_tnode *tnode; /* [0..num_tnodes - 1] nodes in the timing graph */
95 
96 #endif
void get_tnode_block_and_output_net(int inode, int *iblk_ptr, int *inet_ptr)
Definition: path_delay.c:2611
void print_criticality(t_slack *slacks, boolean criticality_is_normalized, const char *fname)
Definition: path_delay.c:559
void print_critical_path(const char *fname)
Definition: path_delay.c:2458
static float ** net_delay
void print_timing_graph_as_blif(const char *fname, t_model *models)
Definition: path_delay.c:3360
t_slack * alloc_and_load_pre_packing_timing_graph(float block_delay, float inter_cluster_net_delay, t_model *models, t_timing_inf timing_inf)
Definition: path_delay.c:288
void print_lut_remapping(const char *fname)
Definition: path_delay.c:2430
int num_tnodes
Definition: path_delay.c:144
boolean has_valid_normalized_T_arr(int inode)
Definition: path_delay.c:3054
void do_constant_net_delay_timing_analysis(t_timing_inf timing_inf, float constant_net_delay_value)
Definition: path_delay.c:2636
t_tnode * tnode
Definition: path_delay.c:143
void print_net_delay(float **net_delay, const char *fname)
Definition: path_delay.c:670
void load_timing_graph_net_delays(float **net_delay)
Definition: path_delay.c:368
t_linked_int * allocate_and_load_critical_path(void)
Definition: path_delay.c:2522
t_slack * alloc_and_load_timing_graph(t_timing_inf timing_inf)
Definition: path_delay.c:239
void print_slack(float **slack, boolean slack_is_normalized, const char *fname)
Definition: path_delay.c:441
void free_timing_stats(void)
Definition: path_delay.c:427
void free_timing_graph(t_slack *slack)
Definition: path_delay.c:390
void print_timing_stats(void)
Definition: path_delay.c:3081
void do_timing_analysis(t_slack *slacks, boolean is_prepacked, boolean do_lut_input_balancing, boolean is_final_analysis)
Definition: path_delay.c:1613
void print_clustering_timing_info(const char *fname)
Definition: path_delay.c:696
float get_critical_path_delay(void)
Definition: path_delay.c:3060
void print_timing_graph(const char *fname)
Definition: path_delay.c:1388