58 unsigned int function_id,
vertex ,
60 const std::vector<ModuleGenerator::parameter>& ,
61 const std::vector<ModuleGenerator::parameter>& ,
62 const std::vector<ModuleGenerator::parameter>& ,
63 const std::vector<ModuleGenerator::parameter>& )
71 const auto arg_name = boost::replace_first_copy(mod_cir->
get_id(),
"if_none_",
"");
73 const auto top_fname = HLSMgr->CGetFunctionBehavior(function_id)->CGetBehavioralHelper()->GetMangledFunctionName();
74 const auto& iface_attrs = HLSMgr->module_arch->GetArchitecture(top_fname)->ifaces.at(arg_name);
76 const std::string in_suffix = if_dir == port_o::IO ?
"_i" :
"";
77 const std::string out_suffix = if_dir == port_o::IO ?
"_o" :
"";
78 std::string np_library = mod_cir->
get_id() +
" index";
79 std::vector<std::string> ip_components;
80 const auto add_port_parametric = [&](
const std::string& suffix,
port_o::port_direction dir,
unsigned port_size) {
81 const auto port_name = arg_name + suffix;
84 np_library +=
" " + port_name;
86 out <<
"localparam BITSIZE_data=BITSIZE_" << arg_name << (in_suffix.size() ? in_suffix : out_suffix) <<
";\n";
88 if(if_dir == port_o::IN || if_dir == port_o::IO)
90 add_port_parametric(in_suffix, port_o::OUT, 1
U);
91 ip_components.push_back(
"TestbenchFifoRead");
92 out <<
"TestbenchFifoRead #(.index(index),\n" 93 <<
" .BITSIZE_dout(BITSIZE_data)) fifo_read(.clock(clock),\n" 94 <<
" .setup_port(setup_port),\n" 95 <<
" .done_port(done_port),\n" 96 <<
" .dout(" << arg_name << in_suffix <<
"));\n";
98 if(if_dir == port_o::OUT || if_dir == port_o::IO)
100 add_port_parametric(out_suffix, port_o::IN, 1
U);
101 ip_components.push_back(
"TestbenchFifoWrite");
102 out <<
"TestbenchFifoWrite #(.index(index),\n" 103 <<
" .BITSIZE_din(BITSIZE_data)) fifo_write(.clock(clock),\n" 104 <<
" .setup_port(setup_port),\n" 105 <<
" .done_port(done_port),\n" 106 <<
" .write(done_port),\n" 107 <<
" .din(" << arg_name << out_suffix <<
"));\n";
Data structure representing the entire HLS information.
refcount< structural_type_descriptor > structural_type_descriptorRef
RefCount type definition of the structural_type_descriptor class structure.
Structure representing the most relevant information about the type of a structural object...
const std::string & get_id() const
Return the identifier associated with the structural_object.
void InternalExec(std::ostream &out, structural_objectRef mod, unsigned int function_id, vertex op_v, const HDLWriter_Language language, const std::vector< ModuleGenerator::parameter > &_p, const std::vector< ModuleGenerator::parameter > &_ports_in, const std::vector< ModuleGenerator::parameter > &_ports_out, const std::vector< ModuleGenerator::parameter > &_ports_inout) final
port_direction
Enumerative type describing the direction of a port.
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
static void add_NP_functionality(structural_objectRef cir, NP_functionality::NP_functionaly_type dt, std::string functionality_description)
Add a not-parsed functionality.
This class writes different HDL based descriptions (VHDL, Verilog, SystemC) starting from a structura...
static port_direction to_port_direction(const std::string &val)
Convert a string into the corresponding port_direction enumerative type.
static structural_objectRef add_port(const std::string &id, port_o::port_direction pdir, structural_objectRef owner, structural_type_descriptorRef type_descr, unsigned int treenode=0)
Create a new port.
boost::graph_traits< graph >::vertex_descriptor vertex
vertex definition.
This file collects some utility functions and macros.
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
TestbenchNoneModuleGenerator(const HLS_managerRef &HLSMgr)
std::string container_to_string(_InputIt first, _InputIt last, const std::string &separator, bool trim_empty=true)
Class implementation of the structural_manager.
A brief description of the C++ Header File.