PandA-2024.02
Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Friends
AllocationInformation Class Reference

#include <allocation_information.hpp>

Inheritance diagram for AllocationInformation:
Inheritance graph
[legend]
Collaboration diagram for AllocationInformation:
Collaboration graph
[legend]

Public Types

enum  op_target { initiation_time, power_consumption, execution_time }
 

Public Member Functions

 AllocationInformation (const HLS_managerRef _hls_manager, const unsigned int _function_index, const ParameterConstRef parameters)
 Constructor. More...
 
void Initialize () override
 Initialize all the data structure. More...
 
void Clear () override
 Clear all the data structure. More...
 
 ~AllocationInformation () override
 Destructor. More...
 
const CustomOrderedSet< unsigned int > & can_implement_set (const vertex v) const
 Returns the set of functional units that can be used to implement the operation associated with vertex v. More...
 
const CustomOrderedSet< unsigned int > & can_implement_set (const unsigned int v) const
 
bool CanImplementSetNotEmpty (const unsigned int v) const
 Return if any functional unit has been allocated for an operation. More...
 
std::pair< std::string, std::string > get_fu_name (unsigned int id) const
 Returns the name of the functional unit, associated with the name of the library, given the corresponding identifier. More...
 
unsigned int get_number_fu (unsigned int fu_name) const
 Returns the number of functional unit given its id. More...
 
unsigned int get_number_fu_types () const
 Returns the number of functional units types. More...
 
double get_execution_time (const unsigned int fu_name, const vertex v, const OpGraphConstRef g) const
 Returns the execution time for a given vertex and a given functional unit. More...
 
double get_execution_time (const unsigned int fu_name, const unsigned int v) const
 
ControlStep op_et_to_cycles (double et, double clock_period) const
 Calculates the control steps required for a specific operation. More...
 
unsigned int max_number_of_resources (const vertex v) const
 Computes the maximum number of resources implementing the operation associated with the vertex v. More...
 
unsigned int max_number_of_operations (unsigned int fu) const
 return the maximum number of operations that insists on the same type of functional unit More...
 
double get_attribute_of_fu_per_op (const vertex v, const OpGraphConstRef g, const Allocation_MinMax allocation_min_max, op_target target, unsigned int &fu_name, bool &flag, const updatecopy_HLS_constraints_functor *CF=nullptr) const
 This method returns the min or the max value of the execution time/power consumption/initiation time for a vertex. More...
 
double get_attribute_of_fu_per_op (const vertex v, const OpGraphConstRef g, const Allocation_MinMax allocation_min_max, op_target target) const
 This method returns the min or the max value of the execution time/power consumption/initiation time for a vertex. More...
 
unsigned int min_number_of_resources (const vertex v) const
 Computes the minum number of resources implementing the operation associated with the vertex v. More...
 
double get_setup_hold_time () const
 
bool is_indirect_access_memory_unit (unsigned int fu) const
 return true in case fu type is a resource unit performing an indirect access to memory More...
 
double get_worst_execution_time (const unsigned int fu_name) const
 Returns the worst execution time for all the operations associated with the functional unit. More...
 
double get_area (const unsigned int fu_name) const
 Returns the area for a given functional unit. More...
 
double GetStatementArea (const unsigned int statement_index) const
 Returns the area for a given statement. More...
 
unsigned long long get_prec (const unsigned int fu_name) const
 return the precision of the given functional unit More...
 
double get_DSPs (const unsigned int fu_name) const
 return an estimation of the number of DSPs used by the unit More...
 
ControlStep get_initiation_time (const unsigned int fu_name, const vertex v) const
 Returns the initiation time for a given vertex and a given functional unit. More...
 
ControlStep get_initiation_time (const unsigned int fu_name, const unsigned int statement_index) const
 Returns the initiation time for a given operation and a given functional unit. More...
 
bool is_operation_bounded (const OpGraphConstRef g, const vertex &op, unsigned int fu_type) const
 Checks if the given operation has a bounded execution time or not. More...
 
bool is_operation_bounded (const unsigned int index, unsigned int fu_type) const
 Checks if the given operation has a bounded execution time or not. More...
 
bool is_operation_bounded (const unsigned int index) const
 Checks if the given operation has a bounded execution time or not if the operation is assigned to a functional unit, check if execution time on it is bounded or not if the operation is not assigned to a functional unit, return true for small operations (i.e., Boolean expression) More...
 
bool is_operation_PI_registered (const OpGraphConstRef g, const vertex &op, unsigned int fu_type) const
 Checks if the given operation has its primary input registered or not. More...
 
bool is_operation_PI_registered (const unsigned int index, unsigned int fu_type) const
 Checks if the given operation has its primary input registered or not. More...
 
bool is_operation_PI_registered (const unsigned int index) const
 Checks if the given operation has its primary input registered or not. More...
 
bool is_direct_access_memory_unit (unsigned int fu_type) const
 return true in case fu type is a memory unit with direct access channels More...
 
bool is_dual_port_memory (unsigned int fu_type) const
 return true in case the memory has decoupled addresses for writing and reading More...
 
bool is_direct_proxy_memory_unit (unsigned int fu_type) const
 return true in case4 fu type is a memory unit accessed through a proxy module More...
 
bool is_read_cond (const unsigned int fu_name) const
 Checks if the functional unit implements a READ_COND operation. More...
 
bool is_assign (const unsigned int fu_name) const
 Checks if the functional unit implements an ASSIGN operation. More...
 
bool is_return (const unsigned int fu_name) const
 Checks if the functional unit implements a RETURN operation. More...
 
bool is_memory_unit (const unsigned int fu_name) const
 Returns true if the fu_name is a memory unit. More...
 
bool is_proxy_unit (const unsigned int fu_name) const
 check if a functional unit is a proxy More...
 
bool is_proxy_function_unit (const unsigned int fu_name) const
 check if a functional unit is a proxy function unit More...
 
bool is_proxy_wrapped_unit (const unsigned int fu_name) const
 check if a functional unit is a proxy wrapped unit More...
 
unsigned int get_memory_var (const unsigned int fu_name) const
 Returns the base address of the functional unit. More...
 
const std::map< unsigned int, unsigned int > & get_proxy_memory_units () const
 return the set of proxy memory units More...
 
unsigned int get_proxy_memory_var (const unsigned int fu_name) const
 return the var associated with the proxy unit More...
 
const std::map< unsigned int, std::string > & get_proxy_function_units () const
 return the set of proxy function units More...
 
const std::map< unsigned int, std::string > & get_proxy_wrapped_units () const
 return the set of proxy wrapped units More...
 
double get_stage_period (const unsigned int fu_name, const vertex v, const OpGraphConstRef g) const
 Return the stage period for a given vertex and a given pipelined functional unit. More...
 
double get_stage_period (const unsigned int fu_name, const unsigned int v) const
 
double get_correction_time (unsigned int fu, const std::string &operation_name, unsigned int n_ins) const
 return a time to be subtracted to the execution time/stage period More...
 
double estimate_mux_time (unsigned int fu_name) const
 estimate the delay of a mux that can be uses to mux the input of the given functional unit More...
 
double estimate_muxNto1_delay (unsigned long long fu_prec, unsigned int mux_ins) const
 Return the delay due to mux with n-inputs. More...
 
double estimate_muxNto1_area (unsigned long long fu_prec, unsigned int mux_ins) const
 Return the area due to mux with n-inputs. More...
 
double mux_time_unit (unsigned long long fu_prec) const
 
double mux_time_unit_raw (unsigned long long fu_prec) const
 
unsigned int get_cycles (const unsigned int fu_name, const unsigned int v) const
 Return the number of cycles for given vertex and a given functional unit. More...
 
unsigned int get_cycles (const unsigned int fu_name, const vertex v, const OpGraphConstRef g) const
 
bool is_vertex_bounded_with (const unsigned int v, unsigned int &fu_name) const
 In case the vertex is bounded to a particular functional unit, it returns true and the functional unit. More...
 
bool is_vertex_bounded_with (const vertex v, unsigned int &fu_name) const
 
bool is_vertex_bounded (const unsigned int fu_name) const
 Checks if the functional unit is uniquely bounded to a vertex. More...
 
technology_nodeRef get_fu (unsigned int fu_name) const
 Returns the reference to a functional unit given its id. More...
 
unsigned int get_number_channels (unsigned int fu_name) const
 return the number of channels available for the functional unit More...
 
double EstimateControllerDelay () const
 estimate the delay of the controller in straightforward mode More...
 
double estimate_controller_delay_fb () const
 estimate the delay of the controller in feedback mode More...
 
std::string get_string_name (unsigned int fu_name) const
 Returns the name of the functional for debug purpose. More...
 
double compute_normalized_area (unsigned int fu_s1) const
 compute a number representing the "weight" of the functional unit More...
 
std::map< unsigned int, unsigned int > get_memory_units () const
 Returns the memory units. More...
 
bool has_to_be_synthetized (const unsigned int fu_name) const
 Checks if the functional unit has to be synthetized. More...
 
double estimate_call_delay () const
 
bool has_to_be_shared (const unsigned int fu_name) const
 Checks if the functional unit has to be shared. More...
 
void check_library ()
 Checks library type and sets if it's ordered, complete or simple. More...
 
bool is_one_cycle_direct_access_memory_unit (unsigned int fu_type) const
 return true in case the functional unit is a direct_access memory unit with a single clock latency for LOAD More...
 
void print_allocated_resources () const
 Prints the actual allocation. More...
 
void print (std::ostream &os) const
 
bool is_artificial_fu (const unsigned int fu_name) const
 Checks if the functional unit is actually an artificial functional unit like: NOP, ENTRY and EXIT. More...
 
bool can_implement (const unsigned int fu_id, const vertex v) const
 Checks if the operation associated with a vertex can be implemented by a given functional unit. More...
 
std::pair< double, double > GetTimeLatency (const unsigned int operation, const unsigned int functional_unit, const unsigned int stage=0) const
 Return the execution time of (a stage of) an operation. More...
 
std::pair< double, double > GetTimeLatency (const vertex operation, const unsigned int functional_unit, const unsigned int stage=0) const
 
double GetConnectionTime (const unsigned int first_operation, const unsigned int second_operation, const AbsControlStep cs) const
 Return the connection time for a couple of operations or the phi overhead for a single operation. More...
 
double GetConnectionTime (const vertex first_operation, const vertex second_operation, const AbsControlStep cs) const
 
bool IsVariableExecutionTime (const unsigned int operation_index) const
 Return true if the variable execution time depends on the scheduling. More...
 
double getMinimumSlack () const
 
void setMinimumSlack (const double slack)
 set the minimum slack of the component estimated by scheduling More...
 
double GetCondExprTimeLatency (const unsigned int operation_index) const
 Return the execution time of a cond expr corresponding to the gimple_phi. More...
 
unsigned int GetCycleLatency (const unsigned int operationID) const
 Return the latency of an operation in cycle. More...
 
unsigned int GetCycleLatency (const vertex operationID) const
 
unsigned int GetFuType (const unsigned int operation) const
 Return the functional unit type used to execute an operation. More...
 
unsigned int GetFuType (const vertex operation) const
 
unsigned int get_n_complex_operations () const
 
double get_connection_time (unsigned fu_type, bool add_delay1, bool add_delay2, size_t n_complex_ops, size_t n_mem_ops) const
 return an estimation of the interconnection time More...
 
double mux_area_unit_raw (unsigned long long fu_prec) const
 
double estimate_mux_area (unsigned int fu_name) const
 Estimate the area of a mux attached to a given functional unit. More...
 
unsigned int get_worst_number_of_cycles (const unsigned int fu_name) const
 
bool has_constant_in (unsigned int fu_name) const
 return true in case the functional unit has an input connected to a constant value More...
 
bool is_proxy_memory_unit (const unsigned int fu_name) const
 Returns true if the fu_name is a proxy memory unit. More...
 
bool is_readonly_memory_unit (const unsigned int fu_name) const
 return true in case the functional unit is a read-only memory unit More...
 
double GetClockPeriodMargin () const
 Return the margin to be considered when performing scheduling. More...
 
bool is_single_bool_test_cond_expr_units (const unsigned int fu_name) const
 return true in case the functional unit implement a cond_expr operation and the condition is a Boolean one More...
 
bool is_simple_pointer_plus_expr (const unsigned int fu_name) const
 return true in case the functional unit implement a pointer_plus operation and the operands are constants More...
 
bool can_be_asynchronous_ram (tree_managerConstRef TM, unsigned int var, unsigned int threshold, bool is_read_only_variable, unsigned int channel_number)
 
bool CanBeChained (const unsigned int first_statement_index, const unsigned int second_statement_index) const
 Check if two statements can be chained. More...
 
bool CanBeChained (const vertex first_statement, const vertex second_statement) const
 Check if two statements can be chained. More...
 
double getConnectionOffset () const
 getConnectionOffset More...
 
- Public Member Functions inherited from HLSFunctionIR
 HLSFunctionIR (const HLS_managerRef hls_manager, const unsigned int function_index, const ParameterConstRef parameters)
 Constructor. More...
 
 ~HLSFunctionIR () override
 Destructor. More...
 
- Public Member Functions inherited from HLSIR
 HLSIR (const HLS_managerRef &hls_manager, const ParameterConstRef &parameters)
 Constructor. More...
 
 ~HLSIR () override
 Destructor. More...
 
- Public Member Functions inherited from IntermediateRepresentation
 IntermediateRepresentation (const ParameterConstRef &parameters)
 Constructor. More...
 
virtual ~IntermediateRepresentation ()
 Destructor. More...
 

Static Public Member Functions

static std::string extract_bambu_provided_name (unsigned long long prec_in, unsigned long long prec_out, const HLS_managerConstRef hls_manager, technology_nodeRef &current_fu)
 

Private Member Functions

std::string get_latency_string (const std::string &lat) const
 
double time_m_execution_time (operation *op) const
 return the execution time of the operation corrected by time_multiplier factor More...
 
double time_m_stage_period (operation *op) const
 return the stage time of the operation corrected by time_multiplier factor More...
 
double get_execution_time_dsp_modified (const unsigned int fu_name, const technology_nodeRef &node_op) const
 
double get_stage_period_dsp_modified (const unsigned int fu_name, const technology_nodeRef &node_op) const
 
double get_worst_stage_period (const unsigned int fu_name) const
 Returns the worst stage period for all the operations associated with the functional unit. More...
 
void set_number_channels (unsigned int fu_name, unsigned int n_ports)
 set the number of ports associated with the functional unit More...
 
void GetNodeTypePrec (const vertex node, const OpGraphConstRef g, node_kind_prec_infoRef info, HLS_manager::io_binding_type &constant_id, bool is_constrained) const
 Extract the node kind and precision, if available. More...
 
double GetPhiConnectionLatency (const unsigned int statement_index) const
 Return the connection delay due to phi. More...
 
bool CanBeMerged (const unsigned int first_operation, const unsigned int second_operation) const
 Return true if the two operations can be mapped on the same LUT. More...
 
CustomSet< unsigned int > ComputeRoots (const unsigned int ssa, const AbsControlStep cs) const
 Compute the roots to be considered for fan out computation. More...
 
CustomSet< unsigned int > ComputeDrivenCondExpr (const unsigned int ssa) const
 Compute the cond_expr indirectly driven by a ssa. More...
 
double GetToDspRegisterDelay (const unsigned int statement_index) const
 Add the delay to reach a DSP register if necessary. More...
 
CustomSet< unsigned int > GetZeroDistanceOperations (const unsigned int statement_index) const
 Return the set of operations with zero time distance from source. More...
 

Static Private Member Functions

static technology_nodeRef get_fu (const std::string &fu_name, const HLS_managerConstRef hls_manager)
 Returns the technology_node associated with the given operation. More...
 
static const std::pair< const CustomMap< unsigned long long, CustomUnorderedMapStable< unsigned int, double > > &, const CustomMap< unsigned long long, CustomUnorderedMapStable< unsigned int, double > > & > InitializeMuxDB (const AllocationInformationConstRef allocation_information)
 Compute the values for the initialization of the multiplexer characteristics database. More...
 
static const std::tuple< const std::vector< unsigned int > &, const std::vector< unsigned int > & > InitializeDSPDB (const AllocationInformationConstRef allocation_information)
 Compute the values for the initialization of the DSP characteristics database. More...
 

Private Attributes

double connection_time_ratio
 coefficient used to estimate connection delay More...
 
double controller_delay_multiplier
 coefficient used to estimate the controller delay More...
 
double setup_multiplier
 coefficient used to modify setup value More...
 
double time_multiplier
 coefficient used to modify execution time and stage time More...
 
double mux_time_multiplier
 
double memory_correction_coefficient
 coefficient used to correct timing of memories More...
 
double connection_offset
 
double output_DSP_connection_time
 Connection delay at the exit of DSP. More...
 
double output_carry_connection_time
 Connection delay at the exit of carry. More...
 
double fanout_coefficient
 The coefficient used for estimating fanout delay. More...
 
size_t max_fanout_size {0}
 The maximum size of fanout. More...
 
double DSPs_margin
 coefficient used to modify DSPs execution time More...
 
double DSPs_margin_stage
 coefficient used to modify DSPs stage period More...
 
double DSP_allocation_coefficient
 coefficient used to modify pipelining DSPs allocation More...
 
OpGraphConstRef op_graph
 The operation graph. More...
 
HLS_constraintsConstRef HLS_C
 HLS constraints. More...
 
HLS_deviceConstRef HLS_D
 reference to the information representing the target for the synthesis More...
 
BehavioralHelperConstRef behavioral_helper
 The behavioral helper. More...
 
memoryConstRef Rmem
 The memory. More...
 
const unsigned int & address_bitsize
 
tree_managerConstRef TreeM
 The tree manager. More...
 
double minimumSlack
 minimum slack More...
 
unsigned int n_complex_operations {0}
 number of complex operations More...
 
CustomUnorderedMap< unsigned int, std::pair< std::string, std::string > > id_to_fu_names
 map between the functional unit identifier and the pair (library, fu) of names for the unit More...
 
CustomOrderedSet< unsigned int > is_vertex_bounded_rel
 Store the set of functional units (identifiers) uniquely bounded. More...
 
std::vector< technology_nodeReflist_of_FU
 Stores the list of the functional units. More...
 
std::map< unsigned int, unsigned int > memory_units
 map between memory units and the associated variables More...
 
std::map< unsigned int, unsigned int > nports_map
 define the number of ports associated with the functional unit More...
 
std::map< unsigned int, unsigned long long > precision_map
 map functional units with their precision More...
 
std::map< unsigned int, std::string > proxy_function_units
 put into relation proxy function units with shared functions More...
 
std::map< unsigned int, unsigned int > proxy_memory_units
 put into relation proxy memory units with variables More...
 
std::map< unsigned int, std::string > proxy_wrapped_units
 put into relation proxy wrapped units with shared functions More...
 
std::vector< unsigned int > tech_constraints
 For each functional unit (position in the vector), tech_constraints stores the maximum number of resources. More...
 
CustomUnorderedMap< std::pair< unsigned int, std::string >, CustomOrderedSet< unsigned int > > node_id_to_fus
 for each operation (node-id, operation) return the set of functional unit that can be used More...
 
CustomUnorderedMap< unsigned int, CustomOrderedSet< unsigned int > > fus_to_node_id
 reverse map putting into relation functional units with the operations that can be mapped on More...
 
CustomUnorderedMap< unsigned int, std::pair< std::string, unsigned int > > binding
 Puts into relation operation with type and functional units. More...
 
std::map< unsigned int, unsigned long long > memory_units_sizes
 size of each memory unit in bytes More...
 
std::map< unsigned int, unsigned int > vars_to_memory_units
 map between variables and associated memory_units More...
 
std::map< std::string, std::string > precomputed_pipeline_unit
 store the pre-computed pipeline unit: given a functional unit it return the pipeline id compliant More...
 
CustomUnorderedSet< unsigned int > single_bool_test_cond_expr_units
 store all cond_expr units having a Boolean condition More...
 
CustomUnorderedSet< unsigned int > simple_pointer_plus_expr
 in case of pointer plus expr between constants: no wire delay More...
 
CustomMap< unsigned int, CustomSet< unsigned int > > ssa_roots
 The roots used to compute a ssa. More...
 
CustomMap< unsigned int, std::pair< unsigned int, AbsControlStep > > ssa_bb_versions
 The bb_version-control root on which the roots of a ssa have been computed. More...
 
CustomMap< unsigned int, CustomSet< unsigned int > > ssa_cond_exprs
 The cond exprs driven by a ssa. More...
 
CustomMap< unsigned int, unsigned int > cond_expr_bb_versions
 The bb_version on which the cond exprs driven by a ssan have been computed. More...
 
CustomMap< unsigned int, CustomSet< unsigned int > > zero_distance_ops
 The operations reachable with delay zero. More...
 
CustomMap< unsigned int, unsigned int > zero_distance_ops_bb_version
 The bb_version on which the reachable delay zero operations. More...
 
CustomMap< unsigned long long, CustomUnorderedMapStable< unsigned int, double > > mux_timing_db
 store mux timing for the current technology More...
 
CustomMap< unsigned long long, CustomUnorderedMapStable< unsigned int, double > > mux_area_db
 store mux timing for the current technology More...
 
std::vector< unsigned int > DSP_x_db
 store DSP x sizes More...
 
std::vector< unsigned int > DSP_y_db
 store DSP y sizes More...
 
std::map< unsigned int, std::string > sync_ram_var_latency
 put into relation variable and their latency when they are mapped on a private synchronous ram More...
 

Friends

class allocation
 
struct updatecopy_HLS_constraints_functor
 

Additional Inherited Members

- Protected Attributes inherited from HLSFunctionIR
hlsRef hls
 The hls of the function. More...
 
const unsigned int function_index
 The index of the function to which this IR is associated. More...
 
- Protected Attributes inherited from HLSIR
const HLS_managerRef hls_manager
 The HLS manager. More...
 
- Protected Attributes inherited from IntermediateRepresentation
const ParameterConstRef parameters
 The set of input parameters. More...
 
int debug_level
 The debug level. More...
 

Detailed Description

Definition at line 94 of file allocation_information.hpp.

Member Enumeration Documentation

◆ op_target

Enumerator
initiation_time 
power_consumption 
execution_time 

Definition at line 380 of file allocation_information.hpp.

Constructor & Destructor Documentation

◆ AllocationInformation()

AllocationInformation::AllocationInformation ( const HLS_managerRef  _hls_manager,
const unsigned int  _function_index,
const ParameterConstRef  parameters 
)

Constructor.

Parameters
HLS_mgris the HLS manager NOTE: hls cannot be got from HLS_mgr since when allocation information constructor is called we are still in the hls constructor
function_idis the index of the function
parametersis the set of input parameters

Definition at line 249 of file allocation_information.cpp.

References IntermediateRepresentation::debug_level, GET_CLASS, and ~AllocationInformation().

Here is the call graph for this function:

◆ ~AllocationInformation()

AllocationInformation::~AllocationInformation ( )
overridedefault

Destructor.

Referenced by AllocationInformation().

Here is the caller graph for this function:

Member Function Documentation

◆ can_be_asynchronous_ram()

bool AllocationInformation::can_be_asynchronous_ram ( tree_managerConstRef  TM,
unsigned int  var,
unsigned int  threshold,
bool  is_read_only_variable,
unsigned int  channel_number 
)

Definition at line 3694 of file allocation_information.cpp.

References tree_helper::CGetType(), tree_helper::get_array_dim_and_bitsize(), GET_CONST_NODE, tree_manager::get_tree_node_const(), tree_helper::Size(), and THROW_ERROR.

Referenced by allocation::IntegrateTechnologyLibraries(), and setMinimumSlack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ can_implement()

bool AllocationInformation::can_implement ( const unsigned int  fu_id,
const vertex  v 
) const

Checks if the operation associated with a vertex can be implemented by a given functional unit.

Parameters
fu_nameis the id of the functional unit.
vis the vertex for which the test is performed.
Returns
true when the functional unit can implement the operation associated with the vertex, false otherwise.
the minimum slack of the component estimated by scheduling

Definition at line 1195 of file allocation_information.cpp.

References can_implement_set().

Here is the call graph for this function:

◆ can_implement_set() [1/2]

const CustomOrderedSet< unsigned int > & AllocationInformation::can_implement_set ( const vertex  v) const

Returns the set of functional units that can be used to implement the operation associated with vertex v.

Parameters
vis the vertex.
gis the graph of the vertex v.

Definition at line 285 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo(), and op_graph.

Referenced by parametric_list_based::add_to_priority_queues(), can_implement(), get_cycles(), get_execution_time(), get_initiation_time(), and get_stage_period().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ can_implement_set() [2/2]

const CustomOrderedSet< unsigned int > & AllocationInformation::can_implement_set ( const unsigned int  v) const

Definition at line 290 of file allocation_information.cpp.

References tree_manager::CGetTreeNode(), ENTRY_ID, EXIT_ID, node_id_to_fus, THROW_ASSERT, tree_node::ToString(), and TreeM.

Here is the call graph for this function:

◆ CanBeChained() [1/2]

bool AllocationInformation::CanBeChained ( const unsigned int  first_statement_index,
const unsigned int  second_statement_index 
) const

Check if two statements can be chained.

Parameters
first_statement_indexis the index of the first statement
second_statement_indexis the index of the second statement
Returns
true if they can be chained

Load/Store from distributed memory cannot be chained with non-zero delay operations

STORE cannot be executed in the same clock cycle of the condition which controls it

UNBOUNDED operations cannot be executed in the same clock cycle of the condition which controls it

labels cannot be executed in the same clock cycle of the condition which controls it

Operations with side effect cannot be executed in the same clock cycle of the control_step which controls them

Load and store from bus cannot be chained (if param is enabled)

Definition at line 3830 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, ENTRY_ID, EXIT_ID, INDENT_DBG_MEX, test_panda::parameters, STR, and fu_binding::UNKNOWN.

Referenced by SDCScheduling::AddDelayConstraints(), parametric_list_based::compute_starting_ending_time_asap(), and setMinimumSlack().

Here is the caller graph for this function:

◆ CanBeChained() [2/2]

bool AllocationInformation::CanBeChained ( const vertex  first_statement,
const vertex  second_statement 
) const

Check if two statements can be chained.

Parameters
first_statementis the first vertex
second_statementis the second vertex
Returns
true if they can be chained

Definition at line 3822 of file allocation_information.cpp.

◆ CanBeMerged()

bool AllocationInformation::CanBeMerged ( const unsigned int  first_operation,
const unsigned int  second_operation 
) const
private

Return true if the two operations can be mapped on the same LUT.

Parameters
first_operationis the index of the first operation
second_operationis the index of the second operations
Returns
true if the two operations can be mapped on the same LUT

Definition at line 3789 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, ENTRY_ID, epsilon, EXIT_ID, INDENT_DBG_MEX, tree_helper::Size(), STR, and fu_binding::UNKNOWN.

Here is the call graph for this function:

◆ CanImplementSetNotEmpty()

bool AllocationInformation::CanImplementSetNotEmpty ( const unsigned int  v) const

Return if any functional unit has been allocated for an operation.

Returns
true if at least one functional unit exists

Definition at line 310 of file allocation_information.cpp.

References tree_manager::CGetTreeNode(), ENTRY_ID, EXIT_ID, node_id_to_fus, and TreeM.

Referenced by GetStatementArea(), is_operation_bounded(), and is_operation_PI_registered().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_library()

void AllocationInformation::check_library ( )

Checks library type and sets if it's ordered, complete or simple.

◆ Clear()

void AllocationInformation::Clear ( )
overridevirtual

Clear all the data structure.

Implements HLSIR.

Definition at line 4004 of file allocation_information.cpp.

References HLSIR::Clear(), and max.

Referenced by allocation::Initialize().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ compute_normalized_area()

double AllocationInformation::compute_normalized_area ( unsigned int  fu_s1) const

compute a number representing the "weight" of the functional unit

Parameters
fu_s1is the functional unit id
Returns
normalized area of fu_s1

Definition at line 2970 of file allocation_information.cpp.

References test_panda::parameters.

Referenced by cdfc_module_binding::can_be_clustered(), and cdfc_module_binding::InternalExec().

Here is the caller graph for this function:

◆ ComputeDrivenCondExpr()

CustomSet< unsigned int > AllocationInformation::ComputeDrivenCondExpr ( const unsigned int  ssa) const
private

Compute the cond_expr indirectly driven by a ssa.

Parameters
ssais the ssa to be considered
Returns
the set of cond_expr indirectly driven by ssa

Definition at line 3210 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, GET_NODE, INDENT_DBG_MEX, and STR.

◆ ComputeRoots()

CustomSet< unsigned int > AllocationInformation::ComputeRoots ( const unsigned int  ssa,
const AbsControlStep  cs 
) const
private

Compute the roots to be considered for fan out computation.

Parameters
ssais the ssa to be considered as starting point of the root conditions
csis the control step where the operation using ssa must be scheduled
Returns
the set of ssas which are used in comparison which generate the input ssa

Definition at line 3074 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, GET_NODE, INDENT_DBG_MEX, hls::Rsch, STR, and AbsControlStep::UNKNOWN.

◆ estimate_call_delay()

double AllocationInformation::estimate_call_delay ( ) const
Returns
an estimation of the delay of a call_expr

Check if the operation mapped on this fu is bounded

Add delay due to multiplexer in front of the input; the multiplexer has as input the actual input used in first clock cycle and the registered input used in the following cycles

Definition at line 2920 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, structural_manager::get_circ(), structural_object::get_typeRef(), structural_type_descriptor::id_type, INDENT_DBG_MEX, max, test_panda::parameters, STR, hls::top, and WORK_LIBRARY.

Referenced by add_library::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ estimate_controller_delay_fb()

double AllocationInformation::estimate_controller_delay_fb ( ) const

estimate the delay of the controller in feedback mode

Returns
the controller delay

Definition at line 2399 of file allocation_information.cpp.

Referenced by parametric_list_based::compute_starting_ending_time_asap().

Here is the caller graph for this function:

◆ estimate_mux_area()

double AllocationInformation::estimate_mux_area ( unsigned int  fu_name) const

Estimate the area of a mux attached to a given functional unit.

Parameters
fu_nameis the functional unit id
Returns
the area of a mux connected with fu_name

Definition at line 2392 of file allocation_information.cpp.

References resize_1_8_pow2().

Referenced by cdfc_module_binding::InternalExec(), and setMinimumSlack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ estimate_mux_time()

double AllocationInformation::estimate_mux_time ( unsigned int  fu_name) const

estimate the delay of a mux that can be uses to mux the input of the given functional unit

Parameters
fu_nameis the functional unit id
Returns
the mux delay

Definition at line 1082 of file allocation_information.cpp.

References get_prec(), mux_time_unit(), and resize_1_8_pow2().

Referenced by cdfc_module_binding::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ estimate_muxNto1_area()

double AllocationInformation::estimate_muxNto1_area ( unsigned long long  fu_prec,
unsigned int  mux_ins 
) const

Return the area due to mux with n-inputs.

Parameters
fu_precis the bitsize of the data
mux_insis the number of mux inputs

Definition at line 1119 of file allocation_information.cpp.

References max, MAX_MUX_N_INPUTS, mux_area_db, resize_1_8_pow2(), and THROW_ASSERT.

Referenced by module_binding_check< vertex_type >::check_edge_compatibility(), module_binding_check< vertex_type >::cost(), and estimate_muxes().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ estimate_muxNto1_delay()

double AllocationInformation::estimate_muxNto1_delay ( unsigned long long  fu_prec,
unsigned int  mux_ins 
) const

Return the delay due to mux with n-inputs.

Parameters
fu_precis the bitsize of the data
mux_insis the number of mux inputs

Definition at line 1089 of file allocation_information.cpp.

References get_setup_hold_time(), HLS_C, MAX_MUX_N_INPUTS, mux_timing_db, resize_1_8_pow2(), STR, and THROW_ASSERT.

Referenced by module_binding_check< vertex_type >::check_edge_compatibility(), estimate_muxes(), and allocation::is_ram_not_timing_compliant().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EstimateControllerDelay()

double AllocationInformation::EstimateControllerDelay ( ) const

◆ extract_bambu_provided_name()

std::string AllocationInformation::extract_bambu_provided_name ( unsigned long long  prec_in,
unsigned long long  prec_out,
const HLS_managerConstRef  hls_manager,
technology_nodeRef current_fu 
)
static

◆ get_area()

double AllocationInformation::get_area ( const unsigned int  fu_name) const

Returns the area for a given functional unit.

Parameters
fu_nameis the id of the functional unit.
Returns
the area for the functional unit.

Definition at line 653 of file allocation_information.cpp.

References area_info::get_area_value(), get_number_fu_types(), area_info::get_resource_value(), has_to_be_synthetized(), id_to_fu_names, list_of_FU, and THROW_ASSERT.

Referenced by GetStatementArea(), cdfc_module_binding::InternalExec(), resource_ordering_functor::operator()(), and cdfc_resource_ordering_functor::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_attribute_of_fu_per_op() [1/2]

double AllocationInformation::get_attribute_of_fu_per_op ( const vertex  v,
const OpGraphConstRef  g,
const Allocation_MinMax  allocation_min_max,
AllocationInformation::op_target  target,
unsigned int &  fu_name,
bool flag,
const updatecopy_HLS_constraints_functor CF = nullptr 
) const

This method returns the min or the max value of the execution time/power consumption/initiation time for a vertex.

Parameters
vis the vertex for which the analysis is performed.
gis the graph of the vertex v.
allocation_min_maxis an enum that indicates if the desired value is the minimum or the maximum among the fu that can handle the execution of the vertex v.
targetis an enum that indicates "initiation time" if the needed value is the initiation time, "power consumption" if the needed value is the power consumption, "execution time" if the needed value is the execution time.
fu_nameis the id of the functional unit associated with vertex v and with the searched attribute.
flagis true when there exist a functional_unit for vertex v.
CFis the functor used to retrive information
Returns
the max or min value.

Definition at line 419 of file allocation_information.cpp.

References binding, OpGraph::CGetOpNodeInfo(), tree_manager::CGetTreeNode(), IntermediateRepresentation::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, ENTRY_ID, execution_time, EXIT_ID, from_strongtype_cast(), get_execution_time_dsp_modified(), GET_NAME, has_to_be_synthetized(), id_to_fu_names, INDENT_DBG_MEX, initiation_time, list_of_FU, max, MAX, MIN, min, node_id_to_fus, tree_helper::NormalizeTypename(), power_consumption, STR, THROW_ASSERT, THROW_ERROR, and TreeM.

Referenced by get_attribute_of_fu_per_op().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_attribute_of_fu_per_op() [2/2]

double AllocationInformation::get_attribute_of_fu_per_op ( const vertex  v,
const OpGraphConstRef  g,
const Allocation_MinMax  allocation_min_max,
AllocationInformation::op_target  target 
) const

This method returns the min or the max value of the execution time/power consumption/initiation time for a vertex.

Parameters
vis the vertex for which the analysis is performed.
gis the graph of the vertex v.
allocation_min_maxan enum that indicates if the wanted value is the minimum or the maximum among the fu that can handle the execution of the vertex v.
targetis an enum that indicates "initiation time" if the needed value is the initiation time, "power consumption" if the needed value is the power consumption, "execution time" if the needed value is the execution time.
Returns
the max or min value.

Definition at line 408 of file allocation_information.cpp.

References get_attribute_of_fu_per_op(), and THROW_ASSERT.

Here is the call graph for this function:

◆ get_connection_time()

double AllocationInformation::get_connection_time ( unsigned  fu_type,
bool  add_delay1,
bool  add_delay2,
size_t  n_complex_ops,
size_t  n_mem_ops 
) const

return an estimation of the interconnection time

Returns
an estimation of the interconnection time based on setup/hold time

Referenced by setMinimumSlack().

Here is the caller graph for this function:

◆ get_correction_time()

double AllocationInformation::get_correction_time ( unsigned int  fu,
const std::string &  operation_name,
unsigned int  n_ins 
) const

return a time to be subtracted to the execution time/stage period

Parameters
fuis the functional unit
operation_nameis the operation name
Returns
a correction time

Definition at line 2471 of file allocation_information.cpp.

References tree_helper::AccessedMaximumBitsize(), ADDER_STD, ARRAY_1D_STD_BRAM_NN, ARRAY_1D_STD_BRAM_NN_SDS, ARRAY_1D_STD_BRAM_NN_SDS_BUS, ARRAY_1D_STD_BRAM_SDS, ARRAY_1D_STD_BRAM_SDS_BUS, ARRAY_1D_STD_DISTRAM_NN_SDS, ARRAY_1D_STD_DISTRAM_SDS, tree_helper::CGetType(), COND_EXPR_STD, DEBUG_LEVEL_VERY_PEDANTIC, delay(), tree_helper::get_array_dimensions(), technology_manager::get_fu(), time_info::get_initiation_time(), technology_manager::get_library(), functional_unit::get_operation(), functional_unit::get_operations(), tree_helper::get_type_index(), tree_helper::GetArrayDimensions(), INDENT_DBG_MEX, tree_helper::is_a_struct(), tree_helper::is_an_array(), tree_helper::is_an_union(), tree_helper::IsArrayEquivType(), LIBRARY_STD_FU, LUT_EXPR_STD, MEMORY_CTRL_TYPE_D00, MEMORY_CTRL_TYPE_DPROXY, MEMORY_CTRL_TYPE_DPROXYN, MEMORY_CTRL_TYPE_PROXY, MEMORY_CTRL_TYPE_PROXYN, MEMORY_CTRL_TYPE_SPROXY, MEMORY_CTRL_TYPE_SPROXYN, MEMORY_TYPE_ASYNCHRONOUS, MEMORY_TYPE_SYNCHRONOUS_SDS, MEMORY_TYPE_SYNCHRONOUS_SDS_BUS, MEMORY_TYPE_SYNCHRONOUS_UNALIGNED, resize_1_8_pow2(), STR, THROW_ASSERT, THROW_ERROR, and operation::time_m.

Referenced by cdfc_module_binding::can_be_clustered(), parametric_list_based::compute_exec_stage_time(), and allocation::IntegrateTechnologyLibraries().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_cycles() [1/2]

unsigned int AllocationInformation::get_cycles ( const unsigned int  fu_name,
const unsigned int  v 
) const

Return the number of cycles for given vertex and a given functional unit.

Parameters
fu_nameis the id of the functional unit.
vis the vertex for which the test is performed.
gis the graph of the vertex v.
Returns
the number of cycles

Definition at line 1148 of file allocation_information.cpp.

References can_implement_set(), tree_manager::CGetTreeNode(), ENTRY_ID, EXIT_ID, get_string_name(), has_to_be_synthetized(), id_to_fu_names, list_of_FU, tree_helper::NormalizeTypename(), THROW_ASSERT, and TreeM.

Referenced by parametric_list_based::CheckSchedulabilityConditions(), parametric_list_based::compute_exec_stage_time(), get_cycles(), allocation::InternalExec(), and cdfc_module_binding::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_cycles() [2/2]

unsigned int AllocationInformation::get_cycles ( const unsigned int  fu_name,
const vertex  v,
const OpGraphConstRef  g 
) const

Definition at line 1142 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo(), and get_cycles().

Here is the call graph for this function:

◆ get_DSPs()

double AllocationInformation::get_DSPs ( const unsigned int  fu_name) const

return an estimation of the number of DSPs used by the unit

Parameters
fu_nameis the id of the functional unit.

Definition at line 747 of file allocation_information.cpp.

References get_number_fu_types(), area_info::get_resource_value(), has_to_be_synthetized(), id_to_fu_names, list_of_FU, and THROW_ASSERT.

Referenced by get_execution_time_dsp_modified(), get_stage_period_dsp_modified(), allocation::InternalExec(), cdfc_module_binding::InternalExec(), resource_ordering_functor::operator()(), and cdfc_resource_ordering_functor::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_execution_time() [1/2]

double AllocationInformation::get_execution_time ( const unsigned int  fu_name,
const vertex  v,
const OpGraphConstRef  g 
) const

Returns the execution time for a given vertex and a given functional unit.

Parameters
fu_nameis the id of the functional unit.
vis the vertex for which the test is performed.
gis the graph of the vertex v.
Returns
the execution time for (fu_name, v, g)

Definition at line 324 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo().

Referenced by parametric_list_based::compute_exec_stage_time(), and parametric_list_based::exec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_execution_time() [2/2]

double AllocationInformation::get_execution_time ( const unsigned int  fu_name,
const unsigned int  v 
) const

first check for component_timing_alias

DSP based components are underestimated when the RTL synthesis backend converts in LUTs, so we slightly increase the execution time

FIXME: here we are passing fu_name and not the index of the alias function which does not exists; however fu_name is used to identify if the operation is mapped on the DSP, so for non DSP operations works

Definition at line 330 of file allocation_information.cpp.

References can_implement_set(), tree_manager::CGetTreeNode(), IntermediateRepresentation::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, ENTRY_ID, EXIT_ID, get_execution_time_dsp_modified(), get_string_name(), has_to_be_synthetized(), HLS_C, HLS_D, id_to_fu_names, INDENT_DBG_MEX, list_of_FU, tree_helper::NormalizeTypename(), STR, THROW_ASSERT, time_m_stage_period(), and TreeM.

Here is the call graph for this function:

◆ get_execution_time_dsp_modified()

double AllocationInformation::get_execution_time_dsp_modified ( const unsigned int  fu_name,
const technology_nodeRef node_op 
) const
private

Definition at line 1219 of file allocation_information.cpp.

References DSPs_margin, get_DSPs(), THROW_ASSERT, and time_m_execution_time().

Referenced by get_attribute_of_fu_per_op(), get_execution_time(), and get_worst_execution_time().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_fu() [1/2]

technology_nodeRef AllocationInformation::get_fu ( const std::string &  fu_name,
const HLS_managerConstRef  hls_manager 
)
staticprivate

◆ get_fu() [2/2]

technology_nodeRef AllocationInformation::get_fu ( unsigned int  fu_name) const

Returns the reference to a functional unit given its id.

Parameters
fu_nameis the id of the functional unit.
Returns
the reference to a functional unit

Definition at line 1170 of file allocation_information.cpp.

References get_number_fu_types(), list_of_FU, STR, and THROW_ASSERT.

Here is the call graph for this function:

◆ get_fu_name()

std::pair< std::string, std::string > AllocationInformation::get_fu_name ( unsigned int  id) const

◆ get_initiation_time() [1/2]

ControlStep AllocationInformation::get_initiation_time ( const unsigned int  fu_name,
const vertex  v 
) const

Returns the initiation time for a given vertex and a given functional unit.

Parameters
fu_nameis the id of the functional unit.
vis the vertex for which the test is performed.
Returns
the initiation_time for (fu_name, v, g).

Definition at line 766 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo(), and op_graph.

Referenced by SDCScheduling::AddDelayConstraints(), parametric_list_based::CheckSchedulabilityConditions(), parametric_list_based::compute_exec_stage_time(), parametric_list_based::exec(), BB_based_stg::InternalExec(), and cdfc_module_binding::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_initiation_time() [2/2]

ControlStep AllocationInformation::get_initiation_time ( const unsigned int  fu_name,
const unsigned int  statement_index 
) const

Returns the initiation time for a given operation and a given functional unit.

Parameters
fu_nameis the id of the functional unit.
statement_indexis the operation
Returns
the initiation_time for (fu_name, v, g).

Definition at line 771 of file allocation_information.cpp.

References can_implement_set(), tree_manager::CGetTreeNode(), ENTRY_ID, EXIT_ID, get_string_name(), has_to_be_synthetized(), id_to_fu_names, list_of_FU, tree_helper::NormalizeTypename(), THROW_ASSERT, and TreeM.

Here is the call graph for this function:

◆ get_latency_string()

std::string AllocationInformation::get_latency_string ( const std::string &  lat) const
private

Definition at line 2449 of file allocation_information.cpp.

References THROW_ERROR.

Referenced by allocation::get_synch_ram_latency(), and allocation::IntegrateTechnologyLibraries().

Here is the caller graph for this function:

◆ get_memory_units()

std::map< unsigned int, unsigned int > AllocationInformation::get_memory_units ( ) const

Returns the memory units.

Definition at line 994 of file allocation_information.cpp.

References memory_units.

Referenced by fu_binding::add_to_SM().

Here is the caller graph for this function:

◆ get_memory_var()

unsigned int AllocationInformation::get_memory_var ( const unsigned int  fu_name) const

Returns the base address of the functional unit.

Parameters
fu_nameis the id of the functional unit
Returns
the base address of the functional unit

Definition at line 988 of file allocation_information.cpp.

References is_memory_unit(), memory_units, and THROW_ASSERT.

Referenced by mux_connection_binding::address_precision(), parametric_list_based::check_non_direct_operation_chaining(), parametric_list_based::CheckSchedulabilityConditions(), parametric_list_based::compute_starting_ending_time_asap(), parametric_list_based::exec(), and cdfc_module_binding::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_n_complex_operations()

unsigned int AllocationInformation::get_n_complex_operations ( ) const

Definition at line 2988 of file allocation_information.cpp.

Referenced by setMinimumSlack().

Here is the caller graph for this function:

◆ get_number_channels()

unsigned int AllocationInformation::get_number_channels ( unsigned int  fu_name) const

◆ get_number_fu()

unsigned int AllocationInformation::get_number_fu ( unsigned int  fu_name) const

Returns the number of functional unit given its id.

Parameters
fu_nameis the id of the functional unit.
Returns
the number of functional unit for fu_name

Definition at line 279 of file allocation_information.cpp.

References get_number_fu_types(), tech_constraints, and THROW_ASSERT.

Referenced by parametric_list_based::BB_update_resources_use(), compute_condition1(), parametric_list_based::exec(), SDCScheduling::Initialize(), SDCScheduling::InternalExec(), cdfc_module_binding::InternalExec(), and BB_based_stg::res_const_operation().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_number_fu_types()

unsigned int AllocationInformation::get_number_fu_types ( ) const

◆ get_prec()

unsigned long long AllocationInformation::get_prec ( const unsigned int  fu_name) const

return the precision of the given functional unit

Parameters
fu_nameis the id of the functional unit.
Returns
the precision associated with the functional unit

Definition at line 1819 of file allocation_information.cpp.

References STR, and THROW_ASSERT.

Referenced by estimate_mux_time(), and cdfc_module_binding::InternalExec().

Here is the caller graph for this function:

◆ get_proxy_function_units()

const std::map< unsigned int, std::string > & AllocationInformation::get_proxy_function_units ( ) const

return the set of proxy function units

Returns
the set of proxy function units

Definition at line 1010 of file allocation_information.cpp.

References proxy_function_units.

Referenced by fu_binding::add_to_SM().

Here is the caller graph for this function:

◆ get_proxy_memory_units()

const std::map< unsigned int, unsigned int > & AllocationInformation::get_proxy_memory_units ( ) const

return the set of proxy memory units

Returns
the set of proxy memory units

Definition at line 999 of file allocation_information.cpp.

References proxy_memory_units.

Referenced by fu_binding::add_to_SM().

Here is the caller graph for this function:

◆ get_proxy_memory_var()

unsigned int AllocationInformation::get_proxy_memory_var ( const unsigned int  fu_name) const

return the var associated with the proxy unit

Parameters
fu_nameis functional unit
Returns
the var assiciated with fu_name

Definition at line 1004 of file allocation_information.cpp.

References proxy_memory_units, and THROW_ASSERT.

Referenced by fu_binding::add_to_SM(), mux_connection_binding::address_precision(), parametric_list_based::check_non_direct_operation_chaining(), parametric_list_based::CheckSchedulabilityConditions(), parametric_list_based::compute_starting_ending_time_asap(), parametric_list_based::exec(), and cdfc_module_binding::InternalExec().

Here is the caller graph for this function:

◆ get_proxy_wrapped_units()

const std::map< unsigned int, std::string > & AllocationInformation::get_proxy_wrapped_units ( ) const

return the set of proxy wrapped units

Returns
the set of proxy wrapped units

Definition at line 1015 of file allocation_information.cpp.

References proxy_wrapped_units.

Referenced by fu_binding::add_to_SM().

Here is the caller graph for this function:

◆ get_setup_hold_time()

double AllocationInformation::get_setup_hold_time ( ) const

◆ get_stage_period() [1/2]

double AllocationInformation::get_stage_period ( const unsigned int  fu_name,
const vertex  v,
const OpGraphConstRef  g 
) const

Return the stage period for a given vertex and a given pipelined functional unit.

Parameters
fu_nameis the id of the functional unit.
vis the vertex for which the test is performed.
gis the graph of the vertex v.
Returns
the stage period for (fu_name, v, g)

Definition at line 1037 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo().

Here is the call graph for this function:

◆ get_stage_period() [2/2]

double AllocationInformation::get_stage_period ( const unsigned int  fu_name,
const unsigned int  v 
) const

DSP based components are underestimated when the RTL synthesis backend converts in LUTs, so we slightly increase the stage period first check for component_timing_alias

Definition at line 1043 of file allocation_information.cpp.

References can_implement_set(), tree_manager::CGetTreeNode(), ENTRY_ID, EXIT_ID, get_string_name(), has_to_be_synthetized(), HLS_D, id_to_fu_names, list_of_FU, tree_helper::NormalizeTypename(), THROW_ASSERT, time_m_stage_period(), and TreeM.

Here is the call graph for this function:

◆ get_stage_period_dsp_modified()

double AllocationInformation::get_stage_period_dsp_modified ( const unsigned int  fu_name,
const technology_nodeRef node_op 
) const
private

Definition at line 1233 of file allocation_information.cpp.

References DSPs_margin_stage, get_DSPs(), and time_m_stage_period().

Referenced by get_worst_stage_period().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_string_name()

std::string AllocationInformation::get_string_name ( unsigned int  fu_name) const

Returns the name of the functional for debug purpose.

ToBeCompleted.

Do not use this string as key id.

Parameters
fu_nameis the id of the functional unit.
Returns
the string describing the functional unit.

Definition at line 1189 of file allocation_information.cpp.

References get_number_fu_types(), list_of_FU, STR, and THROW_ASSERT.

Referenced by fu_binding::add_to_SM(), fu_binding::bind(), mux_connection_binding::create_connections(), get_cycles(), get_execution_time(), fu_binding::get_fu_name(), get_initiation_time(), get_stage_period(), port_swapping::InternalExec(), and cdfc_module_binding::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_worst_execution_time()

double AllocationInformation::get_worst_execution_time ( const unsigned int  fu_name) const

Returns the worst execution time for all the operations associated with the functional unit.

Parameters
fu_nameis the id of the functional unit.
Returns
the worst execution time for fu_name

Definition at line 637 of file allocation_information.cpp.

References get_execution_time_dsp_modified(), has_to_be_synthetized(), list_of_FU, and max.

Referenced by cdfc_module_binding::can_be_clustered(), and resource_ordering_functor::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_worst_number_of_cycles()

unsigned int AllocationInformation::get_worst_number_of_cycles ( const unsigned int  fu_name) const

Definition at line 3048 of file allocation_information.cpp.

References max.

Referenced by compute_condition1(), and setMinimumSlack().

Here is the caller graph for this function:

◆ get_worst_stage_period()

double AllocationInformation::get_worst_stage_period ( const unsigned int  fu_name) const
private

Returns the worst stage period for all the operations associated with the functional unit.

Parameters
fu_nameis the id of the functional unit.
Returns
the worst stage period for fu_name

Definition at line 1246 of file allocation_information.cpp.

References get_stage_period_dsp_modified(), has_to_be_synthetized(), list_of_FU, and max.

Here is the call graph for this function:

◆ GetClockPeriodMargin()

double AllocationInformation::GetClockPeriodMargin ( ) const

Return the margin to be considered when performing scheduling.

Definition at line 3064 of file allocation_information.cpp.

References test_panda::parameters.

Referenced by Schedule::CanBeMoved(), Schedule::GetBBEndingTime(), SDCScheduling::Initialize(), setMinimumSlack(), and Schedule::UpdateTime().

Here is the caller graph for this function:

◆ GetCondExprTimeLatency()

double AllocationInformation::GetCondExprTimeLatency ( const unsigned int  operation_index) const

Return the execution time of a cond expr corresponding to the gimple_phi.

Parameters
operation_indexis the index of the gimple_phi
Returns
the execution time

Computing time of cond_expr as time of cond_expr_FU - setup_time In this way we are correctly estimating only phi with two inputs

Definition at line 2336 of file allocation_information.cpp.

References tree_helper::CGetType(), GET_CONST_NODE, resize_1_8_pow2(), tree_helper::Size(), STR, THROW_ASSERT, and test_panda::type.

Referenced by SDCScheduling::AddDelayConstraints(), and setMinimumSlack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getConnectionOffset()

double AllocationInformation::getConnectionOffset ( ) const
inline

getConnectionOffset

Returns
the connection offset

Definition at line 1050 of file allocation_information.hpp.

References get_setup_hold_time(), and max.

Here is the call graph for this function:

◆ GetConnectionTime() [1/2]

double AllocationInformation::GetConnectionTime ( const unsigned int  first_operation,
const unsigned int  second_operation,
const AbsControlStep  cs 
) const

Return the connection time for a couple of operations or the phi overhead for a single operation.

Parameters
first_operationis the first operation
second_operationis the second operation; if it is null, the phi contribution is returned
csis the control step in which second operation would be scheduled
Returns
the connection time

Definition at line 3340 of file allocation_information.cpp.

References tree_helper::ComputeSsaUses(), DEBUG_LEVEL_VERY_PEDANTIC, ENTRY_ID, epsilon, EXIT_ID, GET_CONST_NODE, GET_NODE, INDENT_DBG_MEX, INFINITE_UINT, tree_helper::is_int(), max, operation::operation(), test_panda::parameters, tree_helper::Size(), STR, THROW_ASSERT, THROW_ERROR, and fu_binding::UNKNOWN.

Referenced by SDCScheduling::AddDelayConstraints(), Schedule::CanBeMoved(), parametric_list_based::compute_exec_stage_time(), parametric_list_based::compute_starting_ending_time_asap(), Schedule::ComputeCriticalPath(), CondExprRestructuring::InternalExec(), commutative_expr_restructuring::InternalExec(), and Schedule::UpdateTime().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetConnectionTime() [2/2]

double AllocationInformation::GetConnectionTime ( const vertex  first_operation,
const vertex  second_operation,
const AbsControlStep  cs 
) const

Definition at line 3332 of file allocation_information.cpp.

◆ GetCycleLatency() [1/2]

unsigned int AllocationInformation::GetCycleLatency ( const unsigned int  operationID) const

Return the latency of an operation in cycle.

Parameters
operationis the operation
Returns
the number of cycles required to execute the operation

Definition at line 1935 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, ENTRY_ID, EXIT_ID, GET_CONST_NODE, tree_node::GetString(), INDENT_DBG_MEX, LIBRARY_STD_FU, resize_1_8_pow2(), tree_helper::Size(), STR, THROW_ASSERT, and THROW_UNREACHABLE.

Referenced by SDCScheduling::AddDelayConstraints(), SDCScheduling::AddDependenceConstraint(), SDCScheduling::AddStageConstraints(), Schedule::CanBeMoved(), SDCScheduling::InternalExec(), setMinimumSlack(), and Schedule::UpdateTime().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetCycleLatency() [2/2]

unsigned int AllocationInformation::GetCycleLatency ( const vertex  operationID) const

Definition at line 1930 of file allocation_information.cpp.

◆ GetFuType() [1/2]

unsigned int AllocationInformation::GetFuType ( const unsigned int  operation) const

Return the functional unit type used to execute an operation.

Parameters
operationis the operation
Returns
the id of the functional unit type

Definition at line 2354 of file allocation_information.cpp.

References INDENT_OUT_MEX, STR, and THROW_UNREACHABLE.

Referenced by SDCScheduling::AddDelayConstraints(), Schedule::CanBeMoved(), parametric_list_based::compute_exec_stage_time(), GetStatementArea(), SDCScheduling::Initialize(), SDCScheduling::InternalExec(), is_operation_bounded(), is_operation_PI_registered(), and setMinimumSlack().

Here is the caller graph for this function:

◆ GetFuType() [2/2]

unsigned int AllocationInformation::GetFuType ( const vertex  operation) const

Definition at line 2349 of file allocation_information.cpp.

◆ getMinimumSlack()

double AllocationInformation::getMinimumSlack ( ) const
inline
Returns
the minimum slack of the component estimated by scheduling

Definition at line 930 of file allocation_information.hpp.

References minimumSlack.

Referenced by BB_based_stg::InternalExec(), and parametric_list_based::InternalExec().

Here is the caller graph for this function:

◆ GetNodeTypePrec()

void AllocationInformation::GetNodeTypePrec ( const vertex  node,
const OpGraphConstRef  g,
node_kind_prec_infoRef  info,
HLS_manager::io_binding_type constant_id,
bool  is_constrained 
) const
private

Extract the node kind and precision, if available.

Parameters
nodeis the vertex of the graph.
gis the graph used to retrieve the required values of the vertex
infois where the information retrieved for the node get stored.
constant_idis a tree node id (i.e., different from zero) when one of the operands is constant

no constant characterization for cond expr

Now we need to normalize the size to be compliant with the technology library assumptions

DSPs based components have to be managed in a different way

After first match we exit to prevent matching with larger mults

ad hoc correction for float_expr conversion

ad hoc correction for fix_trunc_expr

these ops never have info->output_prec > max_size_in

timing does not change for these operations

NOT really managed real_output_nelem

NOT really managed real_output_nelem

fix for vec_perm_expr

Definition at line 1318 of file allocation_information.cpp.

References tree_helper::CGetElements(), OpGraph::CGetOpNodeInfo(), tree_manager::CGetTreeReindex(), tree_helper::CGetType(), IntermediateRepresentation::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, DSP_x_db, DSP_y_db, HLSFunctionIR::function_index, GET_NAME, tree_helper::GetFormalIth(), HLSIR::hls_manager, INDENT_DBG_MEX, index, tree_node::index, tree_helper::is_concat_bit_ior_expr(), tree_helper::IsArrayType(), tree_helper::IsBooleanType(), tree_helper::IsComplexType(), tree_helper::IsConstant(), tree_helper::IsPointerType(), tree_helper::IsRealType(), tree_helper::IsSignedIntegerType(), tree_helper::IsStructType(), tree_helper::IsUnionType(), tree_helper::IsUnsignedIntegerType(), tree_helper::IsVectorType(), max, min, tree_helper::NormalizeTypename(), resize_1_8_pow2(), tree_helper::Size(), starts_with(), STR, THROW_ASSERT, THROW_UNREACHABLE, THROW_WARNING, TreeM, and test_panda::type.

Referenced by allocation::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPhiConnectionLatency()

double AllocationInformation::GetPhiConnectionLatency ( const unsigned int  statement_index) const
private

Return the connection delay due to phi.

Parameters
statement_indexis the index of the operation producing the input of the phi
Returns
the connection delay

Checking for output phi

Definition at line 2272 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, ENTRY_ID, EXIT_ID, GET_NODE, INDENT_DBG_MEX, max, resize_1_8_pow2(), tree_helper::Size(), STR, lenet_tvm::target, and THROW_ASSERT.

Here is the call graph for this function:

◆ GetStatementArea()

double AllocationInformation::GetStatementArea ( const unsigned int  statement_index) const

Returns the area for a given statement.

Parameters
statement_indexis the index of the statement
Returns
the area

Computing time of cond_expr as time of cond_expr_FU - setup_time

Definition at line 670 of file allocation_information.cpp.

References CanImplementSetNotEmpty(), tree_manager::CGetTreeNode(), get_area(), GET_CONST_NODE, tree_node::get_kind(), GET_NODE, GetFuType(), tree_node::GetString(), HLS_D, LIBRARY_STD_FU, mux_area_unit_raw(), resize_1_8_pow2(), tree_helper::Size(), STR, THROW_ASSERT, THROW_UNREACHABLE, and TreeM.

Referenced by MultipleEntryIfReduction::GetAreaCost().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetTimeLatency() [1/2]

std::pair< double, double > AllocationInformation::GetTimeLatency ( const unsigned int  operation,
const unsigned int  functional_unit,
const unsigned int  stage = 0 
) const

Return the execution time of (a stage of) an operation.

Parameters
operationis the operation
functional_unitis the functional unit
stageis the stage to be considered for pipelined operation
ignore_connectionspecifies if connection delays have to be ignored

For the intermediate stage of multi-cycle the latency is the clock cycle

The operation execution time

The stage period

Computing time of cond_expr as time of cond_expr_FU - setup_time

Definition at line 2011 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, ENTRY_ID, epsilon, EXIT_ID, GET_CONST_NODE, GET_NODE, tree_node::GetString(), INDENT_DBG_MEX, LIBRARY_STD_FU, resize_1_8_pow2(), tree_helper::Size(), STR, THROW_ASSERT, THROW_ERROR, THROW_UNREACHABLE, and fu_binding::UNKNOWN.

Referenced by SDCScheduling::AddDelayConstraints(), Schedule::CanBeMoved(), parametric_list_based::compute_exec_stage_time(), Schedule::ComputeCriticalPath(), Schedule::EvaluateCondsMerging(), Schedule::EvaluateMultiWayIfsMerging(), CondExprRestructuring::InternalExec(), commutative_expr_restructuring::InternalExec(), and Schedule::UpdateTime().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetTimeLatency() [2/2]

std::pair< double, double > AllocationInformation::GetTimeLatency ( const vertex  operation,
const unsigned int  functional_unit,
const unsigned int  stage = 0 
) const

Definition at line 2004 of file allocation_information.cpp.

◆ GetToDspRegisterDelay()

double AllocationInformation::GetToDspRegisterDelay ( const unsigned int  statement_index) const
private

Add the delay to reach a DSP register if necessary.

Parameters
statement_indexis the index of the statement
Returns
the delay to reach a DSP register

Add further delay if operations are faraway

Definition at line 4043 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, ENTRY_ID, EXIT_ID, GET_CONST_NODE, INDENT_DBG_MEX, test_panda::parameters, sl, and STR.

◆ GetZeroDistanceOperations()

CustomSet< unsigned int > AllocationInformation::GetZeroDistanceOperations ( const unsigned int  statement_index) const
private

Return the set of operations with zero time distance from source.

Parameters
statement_indexis the operation to be considered
Returns
the set of operations at zero time distance

Definition at line 4127 of file allocation_information.cpp.

References DEBUG_LEVEL_VERY_PEDANTIC, GET_CONST_NODE, INDENT_DBG_MEX, STR, AbsControlStep::UNKNOWN, and fu_binding::UNKNOWN.

◆ has_constant_in()

bool AllocationInformation::has_constant_in ( unsigned int  fu_name) const

return true in case the functional unit has an input connected to a constant value

Parameters
fu_nameis the id of the functional unit
Returns
true in case fu_name has a constant in its inputs.

Definition at line 3014 of file allocation_information.cpp.

Referenced by setMinimumSlack().

Here is the caller graph for this function:

◆ has_to_be_shared()

bool AllocationInformation::has_to_be_shared ( const unsigned int  fu_name) const

Checks if the functional unit has to be shared.

Parameters
fu_nameis the id of the functional unit.
Returns
true when the functional unit has to be shared, false otherwise.

◆ has_to_be_synthetized()

bool AllocationInformation::has_to_be_synthetized ( const unsigned int  fu_name) const

Checks if the functional unit has to be synthetized.

Parameters
fu_nameis the id of the functional unit.
Returns
true when the functional unit is artificial, false otherwise.

Definition at line 1020 of file allocation_information.cpp.

References ENTRY_STD, EXIT_STD, get_number_fu_types(), GIMPLE_ASM_STD, GIMPLE_GOTO_STD, GIMPLE_LABEL_STD, GIMPLE_NOP_STD, GIMPLE_PHI_STD, GIMPLE_PRAGMA_STD, GIMPLE_RETURN_STD, list_of_FU, NOP_STD, and THROW_ASSERT.

Referenced by fu_binding::add_to_SM(), get_area(), get_attribute_of_fu_per_op(), get_cycles(), get_DSPs(), get_execution_time(), get_initiation_time(), get_stage_period(), get_worst_execution_time(), get_worst_stage_period(), and is_artificial_fu().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Initialize()

void AllocationInformation::Initialize ( )
overridevirtual

◆ InitializeDSPDB()

const std::tuple< const std::vector< unsigned int > &, const std::vector< unsigned int > & > AllocationInformation::InitializeDSPDB ( const AllocationInformationConstRef  allocation_information)
staticprivate

Compute the values for the initialization of the DSP characteristics database.

Parameters
allocation_informationis a reference to an instance of this class

initialize DSP x and y db

Definition at line 219 of file allocation_information.cpp.

References DSP_x_db, DSP_y_db, HLSIR::hls_manager, index, SplitString(), and THROW_ASSERT.

Here is the call graph for this function:

◆ InitializeMuxDB()

const std::pair< const CustomMap< unsigned long long, CustomUnorderedMapStable< unsigned int, double > > &, const CustomMap< unsigned long long, CustomUnorderedMapStable< unsigned int, double > > & > AllocationInformation::InitializeMuxDB ( const AllocationInformationConstRef  allocation_information)
staticprivate

Compute the values for the initialization of the multiplexer characteristics database.

Parameters
allocation_informationis a reference to an instance of this class
Returns
the pair mux_timing_db, mux_area_db

initialize mux DBs

Definition at line 82 of file allocation_information.cpp.

References functional_unit::area_m, technology_manager::get_fu(), functional_unit::get_operation(), area_info::get_resource_value(), get_setup_hold_time(), HLSIR::hls_manager, LIBRARY_STD_FU, MAX_MUX_N_INPUTS, mux_area_db, mux_area_unit_raw(), MUX_N_TO_1, mux_time_multiplier, mux_time_unit_raw(), mux_timing_db, SplitString(), STR, THROW_ASSERT, and time_multiplier.

Here is the call graph for this function:

◆ is_artificial_fu()

bool AllocationInformation::is_artificial_fu ( const unsigned int  fu_name) const

Checks if the functional unit is actually an artificial functional unit like: NOP, ENTRY and EXIT.

Parameters
fu_nameis the id of the functional unit.
Returns
true when the functional unit is artificial, false otherwise.

Definition at line 973 of file allocation_information.cpp.

References ASSIGN_REAL_STD, ASSIGN_SIGNED_STD, ASSIGN_UNSIGNED_STD, get_number_fu_types(), has_to_be_synthetized(), list_of_FU, and THROW_ASSERT.

Referenced by hls::xload().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_assign()

bool AllocationInformation::is_assign ( const unsigned int  fu_name) const

Checks if the functional unit implements an ASSIGN operation.

Parameters
fu_nameis the id of the functional unit.
Returns
true when the functional unit can implement a ASSIGN operation, false otherwise.

Definition at line 1206 of file allocation_information.cpp.

References ASSIGN_REAL_STD, ASSIGN_SIGNED_STD, ASSIGN_UNSIGNED_STD, get_number_fu_types(), list_of_FU, and THROW_ASSERT.

Referenced by hls::xload().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_direct_access_memory_unit()

bool AllocationInformation::is_direct_access_memory_unit ( unsigned int  fu_type) const

return true in case fu type is a memory unit with direct access channels

Parameters
fu_typeis functional unit id
Returns
true in case the functional unit has direct access channels

Definition at line 898 of file allocation_information.cpp.

References get_fu(), MEMORY_CTRL_TYPE_DPROXY, MEMORY_CTRL_TYPE_DPROXYN, MEMORY_CTRL_TYPE_PROXY, MEMORY_CTRL_TYPE_PROXYN, MEMORY_CTRL_TYPE_SPROXY, and MEMORY_CTRL_TYPE_SPROXYN.

Referenced by fu_binding::add_to_SM(), mux_connection_binding::address_precision(), parametric_list_based::check_direct_operation_chaining(), mux_connection_binding::create_connections(), parametric_list_based::exec(), cdfc_module_binding::InternalExec(), cdfc_resource_ordering_functor::operator()(), and fu_binding::specialise_fu().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_direct_proxy_memory_unit()

bool AllocationInformation::is_direct_proxy_memory_unit ( unsigned int  fu_type) const

return true in case4 fu type is a memory unit accessed through a proxy module

Parameters
fu_typeis functional unit id
Returns
true in case the functiona unit has direct access through a proxy module

Definition at line 909 of file allocation_information.cpp.

References get_fu(), MEMORY_CTRL_TYPE_DPROXY, MEMORY_CTRL_TYPE_DPROXYN, MEMORY_CTRL_TYPE_PROXY, MEMORY_CTRL_TYPE_PROXYN, MEMORY_CTRL_TYPE_SPROXY, and MEMORY_CTRL_TYPE_SPROXYN.

Referenced by fu_binding::add_to_SM().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_dual_port_memory()

bool AllocationInformation::is_dual_port_memory ( unsigned int  fu_type) const

return true in case the memory has decoupled addresses for writing and reading

Parameters
fu_typeis functional unit id
Returns
true in case the memory has decoupled addresses for writing and reading

Definition at line 888 of file allocation_information.cpp.

References get_fu(), MEMORY_CTRL_TYPE_DPROXY, MEMORY_CTRL_TYPE_DPROXYN, MEMORY_CTRL_TYPE_SPROXY, and MEMORY_CTRL_TYPE_SPROXYN.

Referenced by fu_binding::add_to_SM(), mux_connection_binding::create_connections(), and fu_binding::specialise_fu().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_indirect_access_memory_unit()

bool AllocationInformation::is_indirect_access_memory_unit ( unsigned int  fu) const

return true in case fu type is a resource unit performing an indirect access to memory

Parameters
fu_typeis functional unit id
Returns
true in case the functional unit access memories through the bus

Definition at line 627 of file allocation_information.cpp.

References get_fu(), MEMORY_CTRL_TYPE_DPROXY, MEMORY_CTRL_TYPE_DPROXYN, MEMORY_CTRL_TYPE_PROXY, MEMORY_CTRL_TYPE_PROXYN, MEMORY_CTRL_TYPE_SPROXY, and MEMORY_CTRL_TYPE_SPROXYN.

Referenced by allocation::add_tech_constraint(), fu_binding::add_to_SM(), parametric_list_based::check_non_direct_operation_chaining(), parametric_list_based::compute_exec_stage_time(), mux_connection_binding::create_connections(), allocation::InternalExec(), resource_ordering_functor::operator()(), and cdfc_resource_ordering_functor::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_memory_unit()

bool AllocationInformation::is_memory_unit ( const unsigned int  fu_name) const

Returns true if the fu_name is a memory unit.

Parameters
fu_nameis the id of the functional unit
Returns
true when the functional unit is a memory unit

Definition at line 918 of file allocation_information.cpp.

References get_number_fu_types(), memory_units, and THROW_ASSERT.

Referenced by fu_binding::add_to_SM(), mux_connection_binding::address_precision(), parametric_list_based::check_non_direct_operation_chaining(), parametric_list_based::CheckSchedulabilityConditions(), parametric_list_based::compute_starting_ending_time_asap(), parametric_list_based::exec(), get_memory_var(), unique_binding::InternalExec(), allocation::InternalExec(), and cdfc_module_binding::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_one_cycle_direct_access_memory_unit()

bool AllocationInformation::is_one_cycle_direct_access_memory_unit ( unsigned int  fu_type) const

return true in case the functional unit is a direct_access memory unit with a single clock latency for LOAD

Parameters
fu_typeis functional unit id
Returns
true in case fu_type is a distributed ram, false otherwise

Definition at line 1310 of file allocation_information.cpp.

References get_fu(), MEMORY_CTRL_TYPE_DPROXY, MEMORY_CTRL_TYPE_DPROXYN, and MEMORY_TYPE_ASYNCHRONOUS.

Referenced by Schedule::CanBeMoved(), parametric_list_based::check_non_direct_operation_chaining(), parametric_list_based::CheckSchedulabilityConditions(), parametric_list_based::compute_starting_ending_time_asap(), and cdfc_module_binding::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_operation_bounded() [1/3]

bool AllocationInformation::is_operation_bounded ( const OpGraphConstRef  g,
const vertex op,
unsigned int  fu_type 
) const

Checks if the given operation has a bounded execution time or not.

Parameters
gis the graph of the vertex
opis the vertex representing the operation
fu_typeis the identifier of the function unit
Returns
true if the operation op has a bounded execution time when executed by the unit fu_type

Definition at line 792 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo(), get_fu(), tree_helper::NormalizeTypename(), and THROW_ASSERT.

Referenced by SDCScheduling::AddDelayConstraints(), Schedule::CanBeMoved(), parametric_list_based::CheckSchedulabilityConditions(), parametric_list_based::exec(), SDCScheduling::InternalExec(), allocation::InternalExec(), is_operation_bounded(), and Schedule::UpdateTime().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_operation_bounded() [2/3]

bool AllocationInformation::is_operation_bounded ( const unsigned int  index,
unsigned int  fu_type 
) const

Checks if the given operation has a bounded execution time or not.

Parameters
indexis the index of the statement
fu_typeis the identifier of the function unit
Returns
true if the operation op has a bounded execution time when executed by the unit fu_type

Definition at line 802 of file allocation_information.cpp.

References tree_manager::CGetTreeNode(), get_fu(), get_fu_name(), functional_unit::get_operation(), tree_helper::NormalizeTypename(), THROW_ASSERT, and TreeM.

Here is the call graph for this function:

◆ is_operation_bounded() [3/3]

bool AllocationInformation::is_operation_bounded ( const unsigned int  index) const

Checks if the given operation has a bounded execution time or not if the operation is assigned to a functional unit, check if execution time on it is bounded or not if the operation is not assigned to a functional unit, return true for small operations (i.e., Boolean expression)

currently all the operations introduced after the allocation has been performed are bounded

currently all the operations introduced after the allocation has been performed are bounded

Definition at line 845 of file allocation_information.cpp.

References CanImplementSetNotEmpty(), tree_manager::CGetTreeNode(), GET_CONST_NODE, GetFuType(), tree_node::GetString(), is_operation_bounded(), THROW_ASSERT, THROW_ERROR, and TreeM.

Here is the call graph for this function:

◆ is_operation_PI_registered() [1/3]

bool AllocationInformation::is_operation_PI_registered ( const OpGraphConstRef  g,
const vertex op,
unsigned int  fu_type 
) const

Checks if the given operation has its primary input registered or not.

Parameters
gis the graph of the vertex
opis the vertex representing the operation
fu_typeis the identifier of the function unit
Returns
true if the operation op has its primary input registered or not

Definition at line 814 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo(), get_fu(), tree_helper::NormalizeTypename(), and THROW_ASSERT.

Referenced by SDCScheduling::AddDelayConstraints(), parametric_list_based::CheckSchedulabilityConditions(), parametric_list_based::compute_exec_stage_time(), Schedule::ComputeCriticalPath(), is_operation_PI_registered(), and Schedule::UpdateTime().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_operation_PI_registered() [2/3]

bool AllocationInformation::is_operation_PI_registered ( const unsigned int  index,
unsigned int  fu_type 
) const

Checks if the given operation has its primary input registered or not.

Parameters
indexis the index of the statement
fu_typeis the identifier of the function unit
Returns
true if the operation op has its primary input registered or not

Definition at line 825 of file allocation_information.cpp.

References tree_manager::CGetTreeNode(), get_fu(), functional_unit::get_operation(), tree_helper::NormalizeTypename(), THROW_ASSERT, and TreeM.

Here is the call graph for this function:

◆ is_operation_PI_registered() [3/3]

bool AllocationInformation::is_operation_PI_registered ( const unsigned int  index) const

Checks if the given operation has its primary input registered or not.

Parameters
indexis the index of the statement
Returns
true if the operation op has its primary input registered or not

Definition at line 836 of file allocation_information.cpp.

References CanImplementSetNotEmpty(), GetFuType(), and is_operation_PI_registered().

Here is the call graph for this function:

◆ is_proxy_function_unit()

bool AllocationInformation::is_proxy_function_unit ( const unsigned int  fu_name) const

check if a functional unit is a proxy function unit

Parameters
fu_nameis the id of the functional unit
Returns
true when fu_name is a proxy unit

Definition at line 930 of file allocation_information.cpp.

References get_number_fu_types(), proxy_function_units, and THROW_ASSERT.

Referenced by is_proxy_unit().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_proxy_memory_unit()

bool AllocationInformation::is_proxy_memory_unit ( const unsigned int  fu_name) const

Returns true if the fu_name is a proxy memory unit.

Parameters
fu_nameis the id of the functional unit
Returns
true when the functional unit is a proxy memory unit

Definition at line 3023 of file allocation_information.cpp.

References THROW_ASSERT.

Referenced by fu_binding::add_to_SM(), and setMinimumSlack().

Here is the caller graph for this function:

◆ is_proxy_unit()

bool AllocationInformation::is_proxy_unit ( const unsigned int  fu_name) const

check if a functional unit is a proxy

Parameters
fu_nameis the id of the functional unit
Returns
true when fu_name is a proxy unit

Definition at line 924 of file allocation_information.cpp.

References get_number_fu_types(), is_proxy_function_unit(), is_proxy_wrapped_unit(), and THROW_ASSERT.

Referenced by cdfc_module_binding::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_proxy_wrapped_unit()

bool AllocationInformation::is_proxy_wrapped_unit ( const unsigned int  fu_name) const

check if a functional unit is a proxy wrapped unit

Parameters
fu_nameis the id of the functional unit
Returns
true when fu_name is a proxy unit

Definition at line 936 of file allocation_information.cpp.

References get_number_fu_types(), proxy_wrapped_units, and THROW_ASSERT.

Referenced by is_proxy_unit().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_read_cond()

bool AllocationInformation::is_read_cond ( const unsigned int  fu_name) const

Checks if the functional unit implements a READ_COND operation.

Parameters
fu_nameis the id of the functional unit.
Returns
true when the functional unit can implement a READ_COND operation, false otherwise.

Definition at line 1200 of file allocation_information.cpp.

References get_number_fu_types(), list_of_FU, READ_COND_STD, and THROW_ASSERT.

Here is the call graph for this function:

◆ is_readonly_memory_unit()

bool AllocationInformation::is_readonly_memory_unit ( const unsigned int  fu_name) const

return true in case the functional unit is a read-only memory unit

Parameters
fu_nameis the functional unit
Returns
true when fu_name is a read-only memory unit

Definition at line 3029 of file allocation_information.cpp.

References THROW_ASSERT.

Referenced by parametric_list_based::check_non_direct_operation_chaining(), parametric_list_based::CheckSchedulabilityConditions(), parametric_list_based::compute_starting_ending_time_asap(), cdfc_module_binding::InternalExec(), and setMinimumSlack().

Here is the caller graph for this function:

◆ is_return()

bool AllocationInformation::is_return ( const unsigned int  fu_name) const

Checks if the functional unit implements a RETURN operation.

Parameters
fu_nameis the id of the functional unit.
Returns
true when the functional unit can implement a RETURN operation, false otherwise.

Definition at line 1213 of file allocation_information.cpp.

References get_number_fu_types(), GIMPLE_RETURN_STD, list_of_FU, and THROW_ASSERT.

Referenced by fu_binding::add_to_SM().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_simple_pointer_plus_expr()

bool AllocationInformation::is_simple_pointer_plus_expr ( const unsigned int  fu_name) const

return true in case the functional unit implement a pointer_plus operation and the operands are constants

Parameters
fu_nameis the functional unit
Returns
true in case the functional unit does a sum of two constants

Definition at line 3042 of file allocation_information.cpp.

References THROW_ASSERT.

Referenced by setMinimumSlack().

Here is the caller graph for this function:

◆ is_single_bool_test_cond_expr_units()

bool AllocationInformation::is_single_bool_test_cond_expr_units ( const unsigned int  fu_name) const

return true in case the functional unit implement a cond_expr operation and the condition is a Boolean one

Parameters
fu_nameis the functional unit
Returns
true in case the functional unit is a mux

Definition at line 3036 of file allocation_information.cpp.

References THROW_ASSERT.

Referenced by setMinimumSlack().

Here is the caller graph for this function:

◆ is_vertex_bounded()

bool AllocationInformation::is_vertex_bounded ( const unsigned int  fu_name) const

Checks if the functional unit is uniquely bounded to a vertex.

Parameters
fu_nameis the id of the functional unit.
Returns
true when the functional unit is uniquely bounded to a vertex, false otherwise.

Definition at line 942 of file allocation_information.cpp.

References get_number_fu_types(), is_vertex_bounded_rel, and THROW_ASSERT.

Referenced by unique_binding::InternalExec(), and cdfc_module_binding::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_vertex_bounded_with() [1/2]

bool AllocationInformation::is_vertex_bounded_with ( const unsigned int  v,
unsigned int &  fu_name 
) const

In case the vertex is bounded to a particular functional unit, it returns true and the functional unit.

Parameters
vis the vertex.
fu_nameis the eventually bounded functional unit.

If this codition is true, the operation changed type from last time it was performed allocation; we do not invalidate binding since this function is const

Definition at line 953 of file allocation_information.cpp.

References binding, tree_manager::CGetTreeNode(), ENTRY_ID, EXIT_ID, and TreeM.

Referenced by parametric_list_based::add_to_priority_queues(), and is_vertex_bounded_with().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_vertex_bounded_with() [2/2]

bool AllocationInformation::is_vertex_bounded_with ( const vertex  v,
unsigned int &  fu_name 
) const

Definition at line 948 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo(), is_vertex_bounded_with(), and op_graph.

Here is the call graph for this function:

◆ IsVariableExecutionTime()

bool AllocationInformation::IsVariableExecutionTime ( const unsigned int  operation_index) const

Return true if the variable execution time depends on the scheduling.

Parameters
operation_indexis the index of the operation
Returns
true if the variable execution time depends on the scheduling

Definition at line 3757 of file allocation_information.cpp.

References ENTRY_ID, and EXIT_ID.

Referenced by Schedule::UpdateTime().

Here is the caller graph for this function:

◆ max_number_of_operations()

unsigned int AllocationInformation::max_number_of_operations ( unsigned int  fu) const

return the maximum number of operations that insists on the same type of functional unit

Parameters
fuis the functional unit id
Returns
the number of operations that can be implemented by functional unit fu

Definition at line 1302 of file allocation_information.cpp.

References fus_to_node_id, get_number_fu_types(), and THROW_ASSERT.

Here is the call graph for this function:

◆ max_number_of_resources()

unsigned int AllocationInformation::max_number_of_resources ( const vertex  v) const

Computes the maximum number of resources implementing the operation associated with the vertex v.

Parameters
vis the vertex for which the test is performed.
gis the graph of the vertex v.
Returns
the maximum number of resources implementing the operation associated with the vertex.

Definition at line 1267 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo(), tree_manager::CGetTreeNode(), ENTRY_ID, EXIT_ID, INFINITE_UINT, node_id_to_fus, op_graph, tech_constraints, THROW_ASSERT, and TreeM.

Here is the call graph for this function:

◆ min_number_of_resources()

unsigned int AllocationInformation::min_number_of_resources ( const vertex  v) const

Computes the minum number of resources implementing the operation associated with the vertex v.

Parameters
vis the vertex for which the test is performed.
gis the graph of the vertex v.
Returns
the minum number of resources implementing the operation associated with the vertex.

Definition at line 594 of file allocation_information.cpp.

References OpGraph::CGetOpNodeInfo(), tree_manager::CGetTreeNode(), ENTRY_ID, EXIT_ID, INFINITE_UINT, node_id_to_fus, op_graph, tech_constraints, THROW_ASSERT, and TreeM.

Here is the call graph for this function:

◆ mux_area_unit_raw()

double AllocationInformation::mux_area_unit_raw ( unsigned long long  fu_prec) const

Definition at line 2376 of file allocation_information.cpp.

References technology_manager::get_fu(), LIBRARY_STD_FU, MUX_GATE_STD, STR, and THROW_ASSERT.

Referenced by GetStatementArea(), InitializeMuxDB(), and setMinimumSlack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mux_time_unit()

double AllocationInformation::mux_time_unit ( unsigned long long  fu_prec) const

◆ mux_time_unit_raw()

double AllocationInformation::mux_time_unit_raw ( unsigned long long  fu_prec) const

Definition at line 1831 of file allocation_information.cpp.

References technology_manager::get_fu(), LIBRARY_STD_FU, MUX_GATE_STD, STR, and THROW_ASSERT.

Referenced by InitializeMuxDB().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ op_et_to_cycles()

ControlStep AllocationInformation::op_et_to_cycles ( double  et,
double  clock_period 
) const

Calculates the control steps required for a specific operation.

Parameters
etis the execution time of the operation.
clock_periodis the clock period of the system.
Returns
the number of control steps required.

Definition at line 3784 of file allocation_information.cpp.

◆ print()

void AllocationInformation::print ( std::ostream &  os) const

Definition at line 1852 of file allocation_information.cpp.

References index, and STR.

Referenced by node_kind_prec_info::node_kind_prec_info().

Here is the caller graph for this function:

◆ print_allocated_resources()

void AllocationInformation::print_allocated_resources ( ) const

Prints the actual allocation.

Definition at line 1876 of file allocation_information.cpp.

References DEBUG_LEVEL_PEDANTIC, DEBUG_LEVEL_VERBOSE, ENTRY_ID, EXIT_ID, tree_helper::NormalizeTypename(), PRINT_DBG_MEX, and STR.

Referenced by allocation::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_number_channels()

void AllocationInformation::set_number_channels ( unsigned int  fu_name,
unsigned int  n_ports 
)
private

set the number of ports associated with the functional unit

Parameters
fu_nameis the functional unit id
n_portsis the number of ports

Definition at line 1262 of file allocation_information.cpp.

References nports_map.

◆ setMinimumSlack()

void AllocationInformation::setMinimumSlack ( const double  slack)
inline

◆ time_m_execution_time()

double AllocationInformation::time_m_execution_time ( operation op) const
private

return the execution time of the operation corrected by time_multiplier factor

Definition at line 258 of file allocation_information.cpp.

References time_info::get_execution_time(), operation::time_m, and time_multiplier.

Referenced by allocation::check_templated_units(), allocation::get_compliant_pipelined_unit(), get_execution_time_dsp_modified(), allocation::IntegrateTechnologyLibraries(), and allocation::is_ram_not_timing_compliant().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ time_m_stage_period()

double AllocationInformation::time_m_stage_period ( operation op) const
private

return the stage time of the operation corrected by time_multiplier factor

Definition at line 263 of file allocation_information.cpp.

References time_info::get_stage_period(), operation::time_m, and time_multiplier.

Referenced by allocation::get_compliant_pipelined_unit(), get_execution_time(), get_stage_period(), get_stage_period_dsp_modified(), and allocation::InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

Friends And Related Function Documentation

◆ allocation

friend class allocation
friend

Definition at line 97 of file allocation_information.hpp.

◆ updatecopy_HLS_constraints_functor

friend struct updatecopy_HLS_constraints_functor
friend

Definition at line 98 of file allocation_information.hpp.

Field Documentation

◆ address_bitsize

const unsigned int& AllocationInformation::address_bitsize
private

Definition at line 155 of file allocation_information.hpp.

◆ behavioral_helper

BehavioralHelperConstRef AllocationInformation::behavioral_helper
private

The behavioral helper.

Definition at line 150 of file allocation_information.hpp.

◆ binding

CustomUnorderedMap<unsigned int, std::pair<std::string, unsigned int> > AllocationInformation::binding
private

Puts into relation operation with type and functional units.

A pair(node_id, operation_type-fu) means that the fu is used to implement the operation associated with the tree node node_id of type operation_type If the operation_type of the operation is different from the current one, the binding refers to an old version of the operation

Definition at line 206 of file allocation_information.hpp.

Referenced by get_attribute_of_fu_per_op(), allocation::InternalExec(), and is_vertex_bounded_with().

◆ cond_expr_bb_versions

CustomMap<unsigned int, unsigned int> AllocationInformation::cond_expr_bb_versions
mutableprivate

The bb_version on which the cond exprs driven by a ssan have been computed.

Definition at line 233 of file allocation_information.hpp.

◆ connection_offset

double AllocationInformation::connection_offset
private

Definition at line 117 of file allocation_information.hpp.

◆ connection_time_ratio

double AllocationInformation::connection_time_ratio
private

coefficient used to estimate connection delay

Definition at line 101 of file allocation_information.hpp.

◆ controller_delay_multiplier

double AllocationInformation::controller_delay_multiplier
private

coefficient used to estimate the controller delay

Definition at line 104 of file allocation_information.hpp.

◆ DSP_allocation_coefficient

double AllocationInformation::DSP_allocation_coefficient
private

coefficient used to modify pipelining DSPs allocation

Definition at line 138 of file allocation_information.hpp.

Referenced by allocation::get_compliant_pipelined_unit().

◆ DSP_x_db

std::vector<unsigned int> AllocationInformation::DSP_x_db
private

store DSP x sizes

Definition at line 248 of file allocation_information.hpp.

Referenced by GetNodeTypePrec(), and InitializeDSPDB().

◆ DSP_y_db

std::vector<unsigned int> AllocationInformation::DSP_y_db
private

store DSP y sizes

Definition at line 251 of file allocation_information.hpp.

Referenced by allocation::get_compliant_pipelined_unit(), GetNodeTypePrec(), and InitializeDSPDB().

◆ DSPs_margin

double AllocationInformation::DSPs_margin
private

coefficient used to modify DSPs execution time

Definition at line 132 of file allocation_information.hpp.

Referenced by allocation::get_compliant_pipelined_unit(), and get_execution_time_dsp_modified().

◆ DSPs_margin_stage

double AllocationInformation::DSPs_margin_stage
private

coefficient used to modify DSPs stage period

Definition at line 135 of file allocation_information.hpp.

Referenced by allocation::get_compliant_pipelined_unit(), and get_stage_period_dsp_modified().

◆ fanout_coefficient

double AllocationInformation::fanout_coefficient
private

The coefficient used for estimating fanout delay.

Definition at line 126 of file allocation_information.hpp.

◆ fus_to_node_id

CustomUnorderedMap<unsigned int, CustomOrderedSet<unsigned int> > AllocationInformation::fus_to_node_id
private

reverse map putting into relation functional units with the operations that can be mapped on

Definition at line 200 of file allocation_information.hpp.

Referenced by allocation::InternalExec(), and max_number_of_operations().

◆ HLS_C

HLS_constraintsConstRef AllocationInformation::HLS_C
private

HLS constraints.

Definition at line 144 of file allocation_information.hpp.

Referenced by estimate_muxNto1_delay(), and get_execution_time().

◆ HLS_D

HLS_deviceConstRef AllocationInformation::HLS_D
private

reference to the information representing the target for the synthesis

Definition at line 147 of file allocation_information.hpp.

Referenced by get_execution_time(), get_setup_hold_time(), get_stage_period(), and GetStatementArea().

◆ id_to_fu_names

CustomUnorderedMap<unsigned int, std::pair<std::string, std::string> > AllocationInformation::id_to_fu_names
private

map between the functional unit identifier and the pair (library, fu) of names for the unit

Definition at line 167 of file allocation_information.hpp.

Referenced by get_area(), get_attribute_of_fu_per_op(), get_cycles(), get_DSPs(), get_execution_time(), get_fu_name(), get_initiation_time(), get_stage_period(), allocation::IntegrateTechnologyLibraries(), and allocation::InternalExec().

◆ is_vertex_bounded_rel

CustomOrderedSet<unsigned int> AllocationInformation::is_vertex_bounded_rel
private

Store the set of functional units (identifiers) uniquely bounded.

Definition at line 170 of file allocation_information.hpp.

Referenced by allocation::InternalExec(), and is_vertex_bounded().

◆ list_of_FU

std::vector<technology_nodeRef> AllocationInformation::list_of_FU
private

◆ max_fanout_size

size_t AllocationInformation::max_fanout_size {0}
private

The maximum size of fanout.

Definition at line 129 of file allocation_information.hpp.

◆ memory_correction_coefficient

double AllocationInformation::memory_correction_coefficient
private

coefficient used to correct timing of memories

Definition at line 115 of file allocation_information.hpp.

◆ memory_units

std::map<unsigned int, unsigned int> AllocationInformation::memory_units
private

map between memory units and the associated variables

Definition at line 176 of file allocation_information.hpp.

Referenced by get_memory_units(), get_memory_var(), allocation::IntegrateTechnologyLibraries(), allocation::InternalExec(), and is_memory_unit().

◆ memory_units_sizes

std::map<unsigned int, unsigned long long> AllocationInformation::memory_units_sizes
private

size of each memory unit in bytes

Definition at line 209 of file allocation_information.hpp.

Referenced by allocation::IntegrateTechnologyLibraries().

◆ minimumSlack

double AllocationInformation::minimumSlack
private

minimum slack

Definition at line 161 of file allocation_information.hpp.

Referenced by getMinimumSlack().

◆ mux_area_db

CustomMap<unsigned long long, CustomUnorderedMapStable<unsigned int, double> > AllocationInformation::mux_area_db
private

store mux timing for the current technology

Definition at line 245 of file allocation_information.hpp.

Referenced by estimate_muxNto1_area(), and InitializeMuxDB().

◆ mux_time_multiplier

double AllocationInformation::mux_time_multiplier
private

Definition at line 112 of file allocation_information.hpp.

Referenced by InitializeMuxDB().

◆ mux_timing_db

CustomMap<unsigned long long, CustomUnorderedMapStable<unsigned int, double> > AllocationInformation::mux_timing_db
private

store mux timing for the current technology

Definition at line 242 of file allocation_information.hpp.

Referenced by estimate_muxNto1_delay(), and InitializeMuxDB().

◆ n_complex_operations

unsigned int AllocationInformation::n_complex_operations {0}
private

number of complex operations

Definition at line 164 of file allocation_information.hpp.

Referenced by allocation::InternalExec().

◆ node_id_to_fus

CustomUnorderedMap<std::pair<unsigned int, std::string>, CustomOrderedSet<unsigned int> > AllocationInformation::node_id_to_fus
private

for each operation (node-id, operation) return the set of functional unit that can be used

Definition at line 197 of file allocation_information.hpp.

Referenced by can_implement_set(), CanImplementSetNotEmpty(), get_attribute_of_fu_per_op(), allocation::InternalExec(), max_number_of_resources(), and min_number_of_resources().

◆ nports_map

std::map<unsigned int, unsigned int> AllocationInformation::nports_map
private

define the number of ports associated with the functional unit

Definition at line 179 of file allocation_information.hpp.

Referenced by get_number_channels(), allocation::set_number_channels(), and set_number_channels().

◆ op_graph

OpGraphConstRef AllocationInformation::op_graph
private

◆ output_carry_connection_time

double AllocationInformation::output_carry_connection_time
private

Connection delay at the exit of carry.

Definition at line 123 of file allocation_information.hpp.

◆ output_DSP_connection_time

double AllocationInformation::output_DSP_connection_time
private

Connection delay at the exit of DSP.

Definition at line 120 of file allocation_information.hpp.

◆ precision_map

std::map<unsigned int, unsigned long long> AllocationInformation::precision_map
private

map functional units with their precision

Definition at line 182 of file allocation_information.hpp.

Referenced by allocation::IntegrateTechnologyLibraries(), and allocation::InternalExec().

◆ precomputed_pipeline_unit

std::map<std::string, std::string> AllocationInformation::precomputed_pipeline_unit
private

store the pre-computed pipeline unit: given a functional unit it return the pipeline id compliant

Definition at line 215 of file allocation_information.hpp.

◆ proxy_function_units

std::map<unsigned int, std::string> AllocationInformation::proxy_function_units
private

put into relation proxy function units with shared functions

Definition at line 185 of file allocation_information.hpp.

Referenced by get_proxy_function_units(), allocation::InternalExec(), and is_proxy_function_unit().

◆ proxy_memory_units

std::map<unsigned int, unsigned int> AllocationInformation::proxy_memory_units
private

put into relation proxy memory units with variables

Definition at line 188 of file allocation_information.hpp.

Referenced by get_proxy_memory_units(), get_proxy_memory_var(), allocation::IntegrateTechnologyLibraries(), and allocation::InternalExec().

◆ proxy_wrapped_units

std::map<unsigned int, std::string> AllocationInformation::proxy_wrapped_units
private

put into relation proxy wrapped units with shared functions

Definition at line 191 of file allocation_information.hpp.

Referenced by get_proxy_wrapped_units(), allocation::IntegrateTechnologyLibraries(), allocation::InternalExec(), and is_proxy_wrapped_unit().

◆ Rmem

memoryConstRef AllocationInformation::Rmem
private

The memory.

Definition at line 153 of file allocation_information.hpp.

◆ setup_multiplier

double AllocationInformation::setup_multiplier
private

coefficient used to modify setup value

Definition at line 107 of file allocation_information.hpp.

Referenced by get_setup_hold_time().

◆ simple_pointer_plus_expr

CustomUnorderedSet<unsigned int> AllocationInformation::simple_pointer_plus_expr
private

in case of pointer plus expr between constants: no wire delay

Definition at line 221 of file allocation_information.hpp.

Referenced by allocation::InternalExec().

◆ single_bool_test_cond_expr_units

CustomUnorderedSet<unsigned int> AllocationInformation::single_bool_test_cond_expr_units
private

store all cond_expr units having a Boolean condition

Definition at line 218 of file allocation_information.hpp.

Referenced by allocation::InternalExec().

◆ ssa_bb_versions

CustomMap<unsigned int, std::pair<unsigned int, AbsControlStep> > AllocationInformation::ssa_bb_versions
mutableprivate

The bb_version-control root on which the roots of a ssa have been computed.

Definition at line 227 of file allocation_information.hpp.

◆ ssa_cond_exprs

CustomMap<unsigned int, CustomSet<unsigned int> > AllocationInformation::ssa_cond_exprs
mutableprivate

The cond exprs driven by a ssa.

Definition at line 230 of file allocation_information.hpp.

◆ ssa_roots

CustomMap<unsigned int, CustomSet<unsigned int> > AllocationInformation::ssa_roots
mutableprivate

The roots used to compute a ssa.

Definition at line 224 of file allocation_information.hpp.

◆ sync_ram_var_latency

std::map<unsigned int, std::string> AllocationInformation::sync_ram_var_latency
private

put into relation variable and their latency when they are mapped on a private synchronous ram

Definition at line 254 of file allocation_information.hpp.

Referenced by allocation::get_synch_ram_latency().

◆ tech_constraints

std::vector<unsigned int> AllocationInformation::tech_constraints
private

For each functional unit (position in the vector), tech_constraints stores the maximum number of resources.

Definition at line 194 of file allocation_information.hpp.

Referenced by allocation::add_tech_constraint(), get_number_fu(), allocation::IntegrateTechnologyLibraries(), allocation::InternalExec(), max_number_of_resources(), and min_number_of_resources().

◆ time_multiplier

double AllocationInformation::time_multiplier
private

coefficient used to modify execution time and stage time

Definition at line 110 of file allocation_information.hpp.

Referenced by get_setup_hold_time(), InitializeMuxDB(), time_m_execution_time(), and time_m_stage_period().

◆ TreeM

tree_managerConstRef AllocationInformation::TreeM
private

◆ vars_to_memory_units

std::map<unsigned int, unsigned int> AllocationInformation::vars_to_memory_units
private

map between variables and associated memory_units

Definition at line 212 of file allocation_information.hpp.

Referenced by allocation::IntegrateTechnologyLibraries(), and allocation::InternalExec().

◆ zero_distance_ops

CustomMap<unsigned int, CustomSet<unsigned int> > AllocationInformation::zero_distance_ops
mutableprivate

The operations reachable with delay zero.

Definition at line 236 of file allocation_information.hpp.

◆ zero_distance_ops_bb_version

CustomMap<unsigned int, unsigned int> AllocationInformation::zero_distance_ops_bb_version
mutableprivate

The bb_version on which the reachable delay zero operations.

Definition at line 239 of file allocation_information.hpp.


The documentation for this class was generated from the following files:

Generated on Mon Feb 12 2024 13:03:43 for PandA-2024.02 by doxygen 1.8.13