91 const DesignFlowManagerConstRef _design_flow_manager,
const HLSFlowStep_Type _hls_flow_step_type,
95 hls_flow_step_type(_hls_flow_step_type),
96 hls_flow_step_specialization(_hls_flow_step_specialization)
104 std::tuple<HLSFlowStep_Type, HLSFlowStepSpecializationConstRef, HLSFlowStep_Relationship>>();
119 return "HLS::" +
EnumToName(hls_flow_step_type) +
120 (hls_flow_step_specialization ?
"::" + hls_flow_step_specialization->GetSignature() :
"");
136 switch(hls_flow_step_type)
145 return "BBStgCreator";
147 return "CdfcModuleBinding";
149 return "CallGraphUnfolding";
151 return "ChordalColoringRegisterBinding";
153 return "ClassicDatapathCreator";
155 return "DatapathCreatorCS";
157 return "DatapathCreatorCSParallel";
159 return "ClassicalHLSSynthesisFlow";
161 return "ColoringRegisterBinding";
163 return "ControlFlowChecker";
165 return "CTestbenchExecution";
167 return "DominatorAllocation";
169 return "DominatorMemoryAllocation";
171 return "DominatorMemoryAllocationCS";
173 return "DominatorFunctionAllocation";
175 return "DryRunEvaluation";
177 return "EasyModuleBinding";
181 return "FsmControllerCreator";
183 return "FsmCSControllerCreator";
185 return "FsmNiSsaLiveness";
187 return "GenerateHdl";
188 #if HAVE_SIMULATION_WRAPPER_BUILT 190 return "GenerateSimulationScript";
193 return "GenerateSynthesisScripts";
195 case HLSFlowStep_Type::GENERATE_TASTE_HDL_ARCHITECTURE:
196 return "GenerateTasteHDLArchitecture";
197 case HLSFlowStep_Type::GENERATE_TASTE_SYNTHESIS_SCRIPT:
198 return "GenerateTasteSynthesisScript";
201 return "HLSFunctionBitValue";
205 return "InitializeHLS";
207 return "InterfaceCSGeneration";
209 return "ParametricListBased";
211 return "MinimalInterfaceGeneration";
213 return "InferInterfaceGeneration";
215 return "MuxInterconnectionBinding";
216 #if HAVE_FROM_PRAGMA_BUILT 217 case HLSFlowStep_Type::OMP_ALLOCATION:
218 return "OmpAllocation";
220 #if HAVE_FROM_PRAGMA_BUILT 222 return "OmpBodyLoopSynthesisFlow";
224 #if HAVE_FROM_PRAGMA_BUILT 225 case HLSFlowStep_Type::OMP_FOR_WRAPPER_CS_SYNTHESIS_FLOW:
226 return "OmpForWrapperCSSynthesisFlow";
228 #if HAVE_FROM_PRAGMA_BUILT 229 case HLSFlowStep_Type::OMP_FUNCTION_ALLOCATION:
230 return "OmpFunctionAllocation";
232 #if HAVE_FROM_PRAGMA_BUILT 233 case HLSFlowStep_Type::OMP_FUNCTION_ALLOCATION_CS:
234 return "OmpFunctionAllocationCS";
237 return "PipelineControllerCreator";
239 return "PortSwapping";
241 return "SchedChaining";
243 case HLSFlowStep_Type::SDC_SCHEDULING:
244 return "SDCScheduling";
246 case HLSFlowStep_Type::SIMULATION_EVALUATION:
247 return "SimulationEvaluation";
249 return "StandardHLSFlow";
250 #if HAVE_LIBRARY_CHARACTERIZATION_BUILT 251 case HLSFlowStep_Type::SYNTHESIS_EVALUATION:
252 return "SynthesisEvaluation";
255 case HLSFlowStep_Type::TASTE_INTERFACE_GENERATION:
256 return "TasteInterfaceGeneration";
259 return "TestbenchGeneration";
261 return "TestVectorParser";
263 return "TopEntityCreation";
265 return "TopEntityCSCreation";
267 return "TopEntityCSParallelCreation";
269 return "TopEntityMemoryMappedCreation";
271 return "UniqueModuleBinding";
273 return "UniqueRegisterBinding";
275 return "ValuesSchemeStorageValueInsertion";
278 return "HWPathComputation";
280 return "HWDiscrepancyAnalysis";
281 case HLSFlowStep_Type::VCD_SIGNAL_SELECTION:
282 return "VcdSignalSelection";
283 case HLSFlowStep_Type::VCD_UTILITY:
287 return "VirtualDesignFlow";
289 return "WB4InterconInterfaceGeneration";
291 return "WB4InterfaceGeneration";
293 return "WeightedCliqueRegisterBinding";
295 return "WriteHLSSummary";
318 functions.insert(memcpy_function->index);
322 for(
auto const& step_to_be_created : steps_to_be_created)
324 switch(std::get<2>(step_to_be_created))
328 const auto frontend_flow_step_factory = GetPointer<const FrontendFlowStepFactory>(
332 const auto cg_design_flow_step =
333 call_graph_computation_step ?
334 design_flow_graph->CGetDesignFlowStepInfo(call_graph_computation_step)->design_flow_step :
335 frontend_flow_step_factory->CreateApplicationFrontendFlowStep(COMPLETE_CALL_GRAPH);
336 design_flow_step_set.insert(cg_design_flow_step);
337 for(
auto const function : functions)
346 std::get<0>(step_to_be_created), std::get<1>(step_to_be_created),
function));
348 hls_step ? design_flow_graph->CGetDesignFlowStepInfo(hls_step)->design_flow_step :
349 hls_flow_step_factory->CreateHLSFlowStep(std::get<0>(step_to_be_created),
function,
350 std::get<1>(step_to_be_created));
351 design_flow_step_set.insert(design_flow_step);
363 const auto* frontend_flow_step_factory = GetPointer<const FrontendFlowStepFactory>(
368 call_graph_computation_step ?
369 design_flow_graph->CGetDesignFlowStepInfo(call_graph_computation_step)->design_flow_step :
370 frontend_flow_step_factory->CreateApplicationFrontendFlowStep(COMPLETE_CALL_GRAPH);
371 design_flow_step_set.insert(cg_design_flow_step);
373 if(boost::num_vertices(*(call_graph_manager->CGetCallGraph())) == 0)
377 for(
const auto top_function : call_graph_manager->GetRootFunctions())
380 std::get<0>(step_to_be_created), std::get<1>(step_to_be_created), top_function));
382 hls_step ? design_flow_graph->CGetDesignFlowStepInfo(hls_step)->design_flow_step :
383 hls_flow_step_factory->CreateHLSFlowStep(std::get<0>(step_to_be_created), top_function,
384 std::get<1>(step_to_be_created));
385 design_flow_step_set.insert(design_flow_step);
394 hls_step ? design_flow_graph->CGetDesignFlowStepInfo(hls_step)->design_flow_step :
395 hls_flow_step_factory->CreateHLSFlowStep(std::get<0>(step_to_be_created), 0,
396 std::get<1>(step_to_be_created));
397 design_flow_step_set.insert(design_flow_step);
static const std::string ComputeSignature(const HLSFlowStep_Type hls_flow_step_type, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization)
Compute the signature of a hls flow step.
#define DEBUG_LEVEL_VERY_PEDANTIC
extremely verbose debugging print is performed.
const HLS_managerRef HLSMgr
information about all the HLS synthesis
Data structure representing the entire HLS information.
#define INDENT_DBG_MEX(dbgLevel, curDbgLevel, mex)
We are producing a debug version of the program, so the message is printed;.
static std::string name_function(const tree_managerConstRef &tm, const unsigned int index)
Return the name of the function.
#define MEMCPY
constant string identifying the operation performed when two objects are memcopied.
File containing functions and utilities to support the printing of debug messagges.
RelationshipType
The relationship type.
The base class for design step.
std::string GetName() const override
Return the name of this design step.
Class specification of the manager of the technology library data structures.
const HLSFlowStep_Type hls_flow_step_type
The type of this step.
static std::string ComputeSignature(const HLSFlowStep_Type hls_flow_step_type, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization, const unsigned int function_id)
Compute the signature of a hls flow step.
redefinition of map to manage ordered/unordered structures
HLS_step(const ParameterConstRef _parameters, const HLS_managerRef HLSMgr, const DesignFlowManagerConstRef design_flow_manager, const HLSFlowStep_Type hls_flow_step_type, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization=HLSFlowStepSpecializationConstRef())
Constructor.
virtual const CustomUnorderedSet< std::tuple< HLSFlowStep_Type, HLSFlowStepSpecializationConstRef, HLSFlowStep_Relationship > > ComputeHLSRelationships(const DesignFlowStep::RelationshipType relationship_type) const
Return the set of analyses in relationship with this design step.
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Factory for hls flow step.
static std::string EnumToName(const HLSFlowStep_Type hls_flow_step_type)
Given a HLS flow step type, return the name of the type.
absl::flat_hash_map< T, U, Hash, Eq, Alloc > CustomUnorderedMap
Classes to describe design flow graph.
redefinition of set to manage ordered/unordered structures
static const std::string ComputeSignature(const FrontendFlowStepType frontend_flow_step_type)
Compute the signature of a function frontend flow step.
boost::graph_traits< graph >::vertex_descriptor vertex
vertex definition.
const Wrefcount< const DesignFlowManager > design_flow_manager
The design flow manager.
static std::string NormalizeTypename(const std::string &id)
Return normalized name of types and variables.
HLSFlowStepSpecialization()
header include
This file collects some utility functions.
DesignFlowStepFactoryConstRef CGetDesignFlowStepFactory() const final
Return the factory to create this type of steps.
void ComputeRelationships(DesignFlowStepSet &design_flow_step_set, const DesignFlowStep::RelationshipType relationship_type) override
Compute the relationships of a step with other steps.
std::string GetSignature() const override
Return a unified identifier of this design step.
~HLS_step() override
Destructor.
refcount< T > lock() const
technology_managerRef get_technology_manager() const
Returns the technology manager.
This class contains the methods to create a frontend flow step.
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
this class is used to manage the command-line or XML options.
int debug_level
The debug level.
virtual ~HLSFlowStepSpecialization()
Data structure definition for high-level synthesis flow.
static CustomUnorderedMap< std::string, HLSFlowStep_Type > command_line_name_to_enum
Map hls step name to enum.
tree_nodeRef GetFunction(const std::string &function_name) const
Return the index of a function given its name.
This class contains the base representation for a generic frontend flow step which works on the whole...
Datastructure to represent memory information in high-level synthesis.
virtual std::string GetKindText() const
Return the name of the type of this frontend flow step.
Class specification of the manager of the tree structures extracted from the raw file.
const HLSFlowStepSpecializationConstRef hls_flow_step_specialization
The information about specialization.
HLS specialization of generic_device.
A brief description of the C++ Header File.