PandA-2024.02
virtual_hls.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  */
45 #include "virtual_hls.hpp"
46 
48 #include "Parameter.hpp"
49 
51 #include "design_flow_manager.hpp"
52 
54 #include "hls.hpp"
56 #include "hls_manager.hpp"
57 
59 #include "cdfc_module_binding.hpp"
60 
62 #include "string_manipulation.hpp" // for GET_CLASS
64 
65 virtual_hls::virtual_hls(const ParameterConstRef _parameters, const HLS_managerRef _HLSMgr, unsigned int _funId,
66  const DesignFlowManagerConstRef _design_flow_manager)
67  : HLSFunctionStep(_parameters, _HLSMgr, _funId, _design_flow_manager, HLSFlowStep_Type::VIRTUAL_DESIGN_FLOW)
68 {
69  debug_level = parameters->get_class_debug_level(GET_CLASS(*this));
70  composed = true;
71 }
72 
73 virtual_hls::~virtual_hls() = default;
74 
77 {
79  switch(relationship_type)
80  {
82  {
83 #if HAVE_FROM_PRAGMA_BUILT
84  if(parameters->getOption<bool>(OPT_parse_pragma))
85  {
86  ret.insert(std::make_tuple(HLSFlowStep_Type::OMP_ALLOCATION, HLSFlowStepSpecializationConstRef(),
88  }
89  else
90 #endif
91  {
94  }
95  if(HLSMgr->GetFunctionBehavior(funId)->is_simple_pipeline())
96  {
99  }
100  else
101  {
104  }
105 #if HAVE_ILP_BUILT
106  if(parameters->getOption<HLSFlowStep_Type>(OPT_scheduling_algorithm) == HLSFlowStep_Type::SDC_SCHEDULING)
107  {
110  }
111  else
112 #endif
113  {
114  ret.insert(std::make_tuple(parameters->getOption<HLSFlowStep_Type>(OPT_scheduling_algorithm),
116  }
117  ret.insert(std::make_tuple(parameters->getOption<HLSFlowStep_Type>(OPT_stg_algorithm),
121  if(HLSMgr->get_HLS(funId))
122  {
123  ret.insert(std::make_tuple(HLSMgr->get_HLS(funId)->chaining_algorithm, HLSFlowStepSpecializationConstRef(),
125  ret.insert(std::make_tuple(HLSMgr->get_HLS(funId)->liveness_algorithm, HLSFlowStepSpecializationConstRef(),
127  }
128  ret.insert(std::make_tuple(parameters->getOption<HLSFlowStep_Type>(OPT_storage_value_insertion_algorithm),
130  if(HLSMgr->get_HLS(funId))
131  {
132  if(HLSMgr->GetFunctionBehavior(funId)->is_simple_pipeline())
133  {
136  }
137  else
138  {
139  ret.insert(std::make_tuple(HLSMgr->get_HLS(funId)->module_binding_algorithm,
142  }
143  }
144  if(HLSMgr->GetFunctionBehavior(funId)->is_simple_pipeline())
145  {
148  }
149  else
150  {
151  ret.insert(std::make_tuple(parameters->getOption<HLSFlowStep_Type>(OPT_register_allocation_algorithm),
153  }
154  ret.insert(std::make_tuple(parameters->getOption<HLSFlowStep_Type>(OPT_datapath_interconnection_algorithm),
156  break;
157  }
159  {
160  break;
161  }
163  {
164  break;
165  }
166  default:
167  THROW_UNREACHABLE("");
168  }
169  return ret;
170 }
171 
173 {
175 }
const HLS_managerRef HLSMgr
information about all the HLS synthesis
Definition: hls_step.hpp:205
~virtual_hls() override
Destructor.
Data structure representing the entire HLS information.
Module binding based on the analysis of the control data flow chained graph.
DesignFlowStep_Status InternalExec() override
Execute the step.
#define GET_CLASS(obj)
Macro returning the actual type of an object.
Weighted clique covering register allocation procedure.
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)
Auxiliary methods for manipulating string.
const CustomUnorderedSet< std::tuple< HLSFlowStep_Type, HLSFlowStepSpecializationConstRef, HLSFlowStep_Relationship > > ComputeHLSRelationships(const DesignFlowStep::RelationshipType relationship_type) const override
Compute the relationship of this step.
Definition: virtual_hls.cpp:76
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Definition: exceptions.hpp:292
Factory for hls flow step.
bool composed
True if this step represents a composition of design flow steps (e.g., a flow); must be set by specia...
HLSFlowStep_Type
Definition: hls_step.hpp:95
const ParameterConstRef parameters
Set of input parameters.
DesignFlowStep_Status
The status of a step.
Wrapper of design_flow.
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
Definition: refcount.hpp:94
Basic HLS flow.
this class is used to manage the command-line or XML options.
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.
virtual_hls(const ParameterConstRef _parameters, const HLS_managerRef HLSMgr, unsigned int funId, const DesignFlowManagerConstRef design_flow_manager)
Constructor.
Definition: virtual_hls.cpp:65

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