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 = mod_cir->
get_id().substr(
sizeof(
"if_valid_") - 1
U, std::string::npos);
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";
87 if(if_dir == port_o::IN)
89 out <<
"assign tb_done_port = 1'b1;\n\n";
91 if(if_dir == port_o::IN || if_dir == port_o::IO)
93 add_port_parametric(in_suffix, port_o::OUT, 1
U);
94 add_port_parametric(in_suffix +
"_vld", port_o::OUT, 0
U);
95 ip_components.push_back(
"TestbenchFifoRead");
96 out <<
"TestbenchFifoRead #(.index(index),\n" 97 <<
" .BITSIZE_dout(BITSIZE_data)) fifo_read(.clock(clock),\n" 98 <<
" .setup_port(setup_port),\n" 99 <<
" .done_port(done_port),\n" 100 <<
" .empty_n(" << arg_name << in_suffix <<
"_vld),\n" 102 <<
" .dout(" << arg_name << in_suffix <<
"));\n";
104 if(if_dir == port_o::OUT || if_dir == port_o::IO)
106 add_port_parametric(out_suffix, port_o::IN, 1
U);
107 add_port_parametric(out_suffix +
"_vld", port_o::IN, 0
U);
108 ip_components.push_back(
"TestbenchFifoWrite");
109 out <<
"wire _full_n;\n\n" 110 <<
"assign tb_done_port = ~_full_n;\n\n" 111 <<
"TestbenchFifoWrite #(.index(index),\n" 112 <<
" .BITSIZE_din(BITSIZE_data)) fifo_write(.clock(clock),\n" 113 <<
" .setup_port(setup_port),\n" 114 <<
" .done_port(done_port),\n" 115 <<
" .full_n(_full_n),\n" 116 <<
" .write(" << arg_name << out_suffix <<
"_vld),\n" 117 <<
" .din(" << arg_name << out_suffix <<
"));\n";
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
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.
port_direction
Enumerative type describing the direction of a port.
TestbenchValidModuleGenerator(const HLS_managerRef &HLSMgr)
#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...
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.