PandA-2024.02
conn_binding_creator.cpp
Go to the documentation of this file.
1 /*
2  *
3  * _/_/_/ _/_/ _/ _/ _/_/_/ _/_/
4  * _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
5  * _/_/_/ _/_/_/_/ _/ _/_/ _/ _/ _/_/_/_/
6  * _/ _/ _/ _/ _/ _/ _/ _/ _/
7  * _/ _/ _/ _/ _/ _/_/_/ _/ _/
8  *
9  * ***********************************************
10  * PandA Project
11  * URL: http://panda.dei.polimi.it
12  * Politecnico di Milano - DEIB
13  * System Architectures Group
14  * ***********************************************
15  * Copyright (C) 2004-2024 Politecnico di Milano
16  *
17  * This file is part of the PandA framework.
18  *
19  * The PandA framework is free software; you can redistribute it and/or modify
20  * it under the terms of the GNU General Public License as published by
21  * the Free Software Foundation; either version 3 of the License, or
22  * (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program. If not, see <http://www.gnu.org/licenses/>.
31  *
32  */
44 #include "behavioral_helper.hpp"
45 
46 #include "Parameter.hpp"
47 #include "call_graph_manager.hpp"
48 #include "cdfc_module_binding.hpp"
49 #include "conn_binding.hpp"
50 #include "conn_binding_creator.hpp"
51 #include "dbgPrintHelper.hpp"
52 #include "function_behavior.hpp"
53 #include "hls.hpp"
54 #include "hls_manager.hpp"
55 #include "utility.hpp"
56 
58  unsigned int _funId, const DesignFlowManagerConstRef _design_flow_manager,
59  const HLSFlowStep_Type _hls_flow_step_type)
60  : HLSFunctionStep(_Param, _HLSMgr, _funId, _design_flow_manager, _hls_flow_step_type)
61 {
62 }
63 
65 
68 {
70  switch(relationship_type)
71  {
73  {
74  if(parameters->IsParameter("PortSwapping") and parameters->GetParameter<bool>("PortSwapping"))
75  {
78  }
79  if(HLSMgr->get_HLS(funId))
80  {
81  if(HLSMgr->GetFunctionBehavior(funId)->is_simple_pipeline())
82  {
85  }
86  else
87  {
88  ret.insert(std::make_tuple(HLSMgr->get_HLS(funId)->module_binding_algorithm,
91  }
92  }
93  if(HLSMgr->GetFunctionBehavior(funId)->is_simple_pipeline())
94  {
97  }
98  else
99  {
100  ret.insert(std::make_tuple(parameters->getOption<HLSFlowStep_Type>(OPT_register_allocation_algorithm),
102  }
103  break;
104  }
106  {
107  break;
108  }
110  {
111  break;
112  }
113  default:
114  THROW_UNREACHABLE("");
115  }
116  return ret;
117 }
118 
120 {
121  const auto FB = HLSMgr->CGetFunctionBehavior(funId);
122  const auto BH = FB->CGetBehavioralHelper();
123  input_ports.clear();
124  output_ports.clear();
126  const auto function_parameters = BH->get_parameters();
127  PRINT_DBG_STRING(DEBUG_LEVEL_PEDANTIC, debug_level, "Parameters values: ");
128  for(auto function_parameter : function_parameters)
129  {
130  PRINT_DBG_STRING(DEBUG_LEVEL_PEDANTIC, debug_level, BH->PrintVariable(function_parameter) + "(");
131  PRINT_DBG_STRING(DEBUG_LEVEL_PEDANTIC, debug_level, "IN)-@" + STR(function_parameter) + " ");
132  input_ports[function_parameter] = HLS->Rconn->bind_port(function_parameter, conn_binding::IN);
133  }
134  const unsigned int return_type_index = BH->GetFunctionReturnType(BH->get_function_index());
135  if(return_type_index)
136  {
138  "Return format " + BH->print_type(return_type_index) + " (OUT) ");
139  output_ports[return_type_index] = HLS->Rconn->bind_port(return_type_index, conn_binding::OUT);
140  }
142 }
const HLS_managerRef HLSMgr
information about all the HLS synthesis
Definition: hls_step.hpp:205
Data structure representing the entire HLS information.
Module binding based on the analysis of the control data flow chained graph.
conn_binding_creator(const ParameterConstRef Param, const HLS_managerRef HLSMgr, unsigned int funId, const DesignFlowManagerConstRef design_flow_manager, const HLSFlowStep_Type hls_flow_step_type)
Constructor.
File containing functions and utilities to support the printing of debug messagges.
const CustomUnorderedSet< std::tuple< HLSFlowStep_Type, HLSFlowStepSpecializationConstRef, HLSFlowStep_Relationship > > ComputeHLSRelationships(const DesignFlowStep::RelationshipType relationship_type) const override
Compute the relationship of this step.
#define PRINT_DBG_MEX(dbgLevel, curDbgLevel, mex)
We are producing a debug version of the program, so the message is printed;.
#define DEBUG_LEVEL_PEDANTIC
very verbose debugging print is performed.
RelationshipType
The relationship type.
Source must be executed to satisfy target.
const unsigned int funId
identifier of the function to be processed (0 means that it is a global step)
generic_objRef bind_port(unsigned int var, direction_type dir)
Bind variable to a port object.
#define PRINT_DBG_STRING(dbgLevel, curDbgLevel, mex)
We are producing a debug version of the program, so the message is printed; no newline is added;...
#define STR(s)
Macro which performs a lexical_cast to a string.
Base class for all interconnection binding algorithms.
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Definition: exceptions.hpp:292
Data structure used to store the interconnection binding of datapath elements.
HLSFlowStep_Type
Definition: hls_step.hpp:95
std::map< unsigned int, generic_objRef > input_ports
map between input port variable and generic object
const ParameterConstRef parameters
Set of input parameters.
This file collects some utility functions and macros.
hlsRef HLS
HLS data structure of the function to be analyzed.
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
Definition: refcount.hpp:94
this class is used to manage the command-line or XML options.
std::map< unsigned int, generic_objRef > output_ports
map between output port variable and generic object
Wrapper to call graph.
int debug_level
The debug level.
refcount< const HLSFlowStepSpecialization > HLSFlowStepSpecializationConstRef
const refcount definition of the class
Definition: hls_step.hpp:93
Data structure definition for high-level synthesis flow.
Superclass include.
conn_bindingRef Rconn
Store the refcounted interconnection of datapath elements.
Definition: hls.hpp:139
~conn_binding_creator() override
Destructor.
A brief description of the C++ Header File.
void add_parameter_ports()
Add ports representing parameter values.

Generated on Mon Feb 12 2024 13:02:53 for PandA-2024.02 by doxygen 1.8.13