⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timing_place.c

📁 VPR布局布线源码
💻 C
字号:
#include <stdio.h>#include <math.h>#include "util.h"#include "vpr_types.h"#include "globals.h"#include "path_delay.h"#include "path_delay2.h"#include "net_delay.h"#include "timing_place_lookup.h"#include "timing_place.h"float **timing_place_crit;	/*available externally */static struct s_linked_vptr *timing_place_crit_chunk_list_head;static struct s_linked_vptr *net_delay_chunk_list_head;/******** prototypes ******************/static float **alloc_crit(struct s_linked_vptr **chunk_list_head_ptr);static void free_crit(struct s_linked_vptr **chunk_list_head_ptr);/**************************************/static float **alloc_crit(struct s_linked_vptr **chunk_list_head_ptr){    /* Allocates space for the timing_place_crit data structure *     * [0..num_nets-1][1..num_pins-1].  I chunk the data to save space on large    *     * problems.                                                                   */    float **local_crit;		/* [0..num_nets-1][1..num_pins-1] */    float *tmp_ptr;    int inet;    int chunk_bytes_avail;    char *chunk_next_avail_mem;    *chunk_list_head_ptr = NULL;    chunk_bytes_avail = 0;    chunk_next_avail_mem = NULL;    local_crit = (float **)my_malloc(num_nets * sizeof(float *));    for(inet = 0; inet < num_nets; inet++)	{	    tmp_ptr = (float *)my_chunk_malloc((net[inet].num_sinks) *					       sizeof(float),					       chunk_list_head_ptr,					       &chunk_bytes_avail,					       &chunk_next_avail_mem);	    local_crit[inet] = tmp_ptr - 1;	/* [1..num_sinks] */	}    return (local_crit);}/**************************************/static voidfree_crit(struct s_linked_vptr **chunk_list_head_ptr){    free_chunk_memory(*chunk_list_head_ptr);    *chunk_list_head_ptr = NULL;}/**************************************/voidprint_sink_delays(char *fname){    int num_at_level, num_edges, inode, ilevel, i;    FILE *fp;    fp = my_fopen(fname, "w");    for(ilevel = num_tnode_levels - 1; ilevel >= 0; ilevel--)	{	    num_at_level = tnodes_at_level[ilevel].nelem;	    for(i = 0; i < num_at_level; i++)		{		    inode = tnodes_at_level[ilevel].list[i];		    num_edges = tnode[inode].num_edges;		    if(num_edges == 0)			{	/* sink */			    fprintf(fp, "%g\n", tnode[inode].T_arr);			}		}	}    fclose(fp);}/**************************************/voidload_criticalities(struct s_placer_opts placer_opts,		   float **net_slack,		   float d_max,		   float crit_exponent){    /*set criticality values, returns the maximum criticality found */    /*assumes that net_slack contains correct values, ie. assumes  *     *that load_net_slack has been called*/    int inet, ipin;    float pin_crit;    for(inet = 0; inet < num_nets; inet++)	{	    if(inet == OPEN)		continue;	    if(net[inet].is_global)		continue;	    for(ipin = 1; ipin <= net[inet].num_sinks; ipin++)		{		    /*clip the criticality to never go negative (could happen */		    /*for a constant generator since it's slack is huge) */		    pin_crit = max(1 - net_slack[inet][ipin] / d_max, 0.);		    timing_place_crit[inet][ipin] =			pow(pin_crit, crit_exponent);		}	}}/**************************************/voidalloc_lookups_and_criticalities(t_chan_width_dist chan_width_dist,				struct s_router_opts router_opts,				struct s_det_routing_arch det_routing_arch,				t_segment_inf * segment_inf,				t_timing_inf timing_inf,				t_subblock_data subblock_data,				float ***net_delay,				float ***net_slack){    (*net_slack) = alloc_and_load_timing_graph(timing_inf, subblock_data);    (*net_delay) = alloc_net_delay(&net_delay_chunk_list_head);    compute_delay_lookup_tables(router_opts, det_routing_arch, segment_inf,				timing_inf, chan_width_dist, subblock_data);    timing_place_crit = alloc_crit(&timing_place_crit_chunk_list_head);}/**************************************/voidfree_lookups_and_criticalities(float ***net_delay,			       float ***net_slack){    free(timing_place_crit);    free_crit(&timing_place_crit_chunk_list_head);    free_timing_graph(*net_slack);    free_net_delay(*net_delay, &net_delay_chunk_list_head);}/**************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -