Verilog to Routing - VPR
Functions
place_and_route.cpp File Reference
#include <sys/types.h>
#include <cstdio>
#include <ctime>
#include <climits>
#include <cstdlib>
#include <cmath>
#include "vtr_util.h"
#include "vtr_memory.h"
#include "vtr_assert.h"
#include "vtr_log.h"
#include "vpr_types.h"
#include "vpr_utils.h"
#include "vpr_error.h"
#include "globals.h"
#include "atom_netlist.h"
#include "place_and_route.h"
#include "place.h"
#include "read_place.h"
#include "read_route.h"
#include "route_export.h"
#include "draw.h"
#include "stats.h"
#include "check_route.h"
#include "rr_graph.h"
#include "net_delay.h"
#include "timing_place.h"
#include "read_xml_arch_file.h"
#include "echo_files.h"
#include "route_common.h"
#include "place_macro.h"
#include "power.h"
#include "RoutingDelayCalculator.h"
#include "timing_info.h"
#include "tatum/echo_writer.hpp"
Include dependency graph for place_and_route.cpp:

Functions

static float comp_width (t_chan *chan, float x, float separation)
 Return the relative channel density. More...
 
int binary_search_place_and_route (const t_placer_opts &placer_opts_ref, const t_annealing_sched &annealing_sched, const t_router_opts &router_opts, const t_analysis_opts &analysis_opts, const t_file_name_opts &filename_opts, const t_arch *arch, bool verify_binary_search, int min_chan_width_hint, t_det_routing_arch *det_routing_arch, std::vector< t_segment_inf > &segment_inf, ClbNetPinsMatrix< float > &net_delay, std::shared_ptr< SetupHoldTimingInfo > timing_info, std::shared_ptr< RoutingDelayCalculator > delay_calc)
 This routine performs a binary search to find the minimum number of tracks per channel required to successfully route a circuit, and returns that minimum width_fac. More...
 
t_chan_width init_chan (int cfactor, t_chan_width_dist chan_width_dist)
 Assigns widths to channels (in tracks). More...
 
void post_place_sync ()
 After placement, logical pins for blocks, and nets must be updated to correspond with physical pins of type. More...
 

Function Documentation

◆ binary_search_place_and_route()

int binary_search_place_and_route ( const t_placer_opts placer_opts_ref,
const t_annealing_sched annealing_sched,
const t_router_opts router_opts,
const t_analysis_opts analysis_opts,
const t_file_name_opts filename_opts,
const t_arch *  arch,
bool  verify_binary_search,
int  min_chan_width_hint,
t_det_routing_arch det_routing_arch,
std::vector< t_segment_inf > &  segment_inf,
ClbNetPinsMatrix< float > &  net_delay,
std::shared_ptr< SetupHoldTimingInfo >  timing_info,
std::shared_ptr< RoutingDelayCalculator >  delay_calc 
)

This routine performs a binary search to find the minimum number of tracks per channel required to successfully route a circuit, and returns that minimum width_fac.

◆ comp_width()

static float comp_width ( t_chan *  chan,
float  x,
float  separation 
)
static

Return the relative channel density.

Parameters
chanpoints to a channel functional description data structure
xthe distance (between 0 and 1) we are across the chip.
separationthe distance between two channels, in the 0 to 1 coordinate system

◆ init_chan()

t_chan_width init_chan ( int  cfactor,
t_chan_width_dist  chan_width_dist 
)

Assigns widths to channels (in tracks).

Minimum one track per channel. The channel distributions read from the architecture file are scaled by cfactor.

◆ post_place_sync()

void post_place_sync ( )

After placement, logical pins for blocks, and nets must be updated to correspond with physical pins of type.

This is required by blocks with capacity > 1 (e.g. typically IOs with multiple instaces in each placement gride location). Since they may be swapped around during placement, we need to update which pins the various nets use.

This updates both the external inter-block net connecitivity (i.e. the clustered netlist), and the intra-block connectivity (since the internal pins used also change).

This function should only be called once