diff --git a/MPSoC/soclib/soclib/module/network_component/vci_vgsb/caba/source/include/vci_vgsb.h b/MPSoC/soclib/soclib/module/network_component/vci_vgsb/caba/source/include/vci_vgsb.h index 242e4c34daccaf25ef05388ededc9f924260a23b..1721e7146df003afba9c9317d81547d8ff42d9d8 100644 --- a/MPSoC/soclib/soclib/module/network_component/vci_vgsb/caba/source/include/vci_vgsb.h +++ b/MPSoC/soclib/soclib/module/network_component/vci_vgsb/caba/source/include/vci_vgsb.h @@ -102,9 +102,9 @@ class VciVgsb sc_signal<uint32_t> r_cycle; // constants - const soclib::common::AddressDecodingTable<uint32_t, int> m_routing_table; - const size_t m_nb_initiator; - const size_t m_nb_target; + const soclib::common::AddressDecodingTable<uint64_t, size_t> m_routing_table; + const size_t m_nb_initiator; + const size_t m_nb_target; protected: @@ -122,7 +122,8 @@ public: VciVgsb( sc_module_name name, soclib::common::MappingTable &maptab, size_t nb_master, - size_t nb_slave ); + size_t nb_slave, + size_t default_target = 0 ); ~VciVgsb(); @@ -132,7 +133,7 @@ public: void genMealy_rspack(); void genMealy_cmdval(); void genMealy_cmdack(); - void print_trace(); + void print_trace(); }; // end class VciVgsb diff --git a/MPSoC/soclib/soclib/module/network_component/vci_vgsb/caba/source/src/vci_vgsb.cpp b/MPSoC/soclib/soclib/module/network_component/vci_vgsb/caba/source/src/vci_vgsb.cpp index f6556802090b7ffa6d8b6ec47e50de02122d75b2..76c8dec316765746e88f15aed5a52d2ab8cb01f5 100644 --- a/MPSoC/soclib/soclib/module/network_component/vci_vgsb/caba/source/src/vci_vgsb.cpp +++ b/MPSoC/soclib/soclib/module/network_component/vci_vgsb/caba/source/src/vci_vgsb.cpp @@ -37,24 +37,30 @@ namespace soclib { namespace caba { //////////////////////////// template<typename vci_param> -VciVgsb<vci_param>::VciVgsb ( sc_module_name name, - MappingTable &maptab, - size_t nb_master, - size_t nb_slave) +VciVgsb<vci_param>::VciVgsb ( sc_module_name name, + MappingTable &maptab, + size_t nb_master, + size_t nb_target, + size_t default_target_id ) : sc_core::sc_module(name), - r_fsm("r_fsm"), - r_initiator_index("r_initiator_index"), - r_target_index("r_target_index"), - r_vci_counter(soclib::common::alloc_elems<sc_signal<uint32_t> >("r_vci_counter", nb_master, nb_slave)), - r_cycle("r_cycle"), - m_routing_table(maptab.getRoutingTable( IntTab() ) ), - m_nb_initiator(nb_master), - m_nb_target(nb_slave), - p_clk("clk"), - p_resetn("resetn"), - p_to_target(soclib::common::alloc_elems<soclib::caba::VciInitiator<vci_param> >("p_to_target", nb_slave)), - p_to_initiator(soclib::common::alloc_elems<soclib::caba::VciTarget<vci_param> >("p_to_initiator", nb_master)) + r_fsm( "r_fsm" ), + r_initiator_index( "r_initiator_index" ), + r_target_index( "r_target_index" ), + r_vci_counter(alloc_elems<sc_signal<uint32_t> >("r_vci_counter", nb_master, nb_target)), + r_cycle( "r_cycle" ), + m_routing_table( maptab.getGlobalIndexFromAddress( default_target_id) ), + m_nb_initiator( nb_master ), + m_nb_target( nb_target ), + p_clk( "clk" ), + p_resetn( "resetn" ), + p_to_target( alloc_elems<VciInitiator<vci_param> >("p_to_target", nb_target) ), + p_to_initiator( alloc_elems<VciTarget<vci_param> >("p_to_initiator", nb_master) ) { + std::cout << " - Building VciVgsb : " << name << std::dec << std::endl + << " => targets = " << nb_target << std::endl + << " => initiators = " << nb_master << std::endl + << " => default target = " << default_target_id << std::endl; + SC_METHOD(transition); dont_initialize(); sensitive << p_clk.pos(); @@ -62,7 +68,7 @@ VciVgsb<vci_param>::VciVgsb ( sc_module_name name, SC_METHOD(genMealy_rspval); dont_initialize(); sensitive << p_clk.neg(); - for ( size_t i=0 ; i<nb_slave ; i++ ) sensitive << p_to_target[i]; + for ( size_t i=0 ; i<nb_target ; i++ ) sensitive << p_to_target[i]; SC_METHOD(genMealy_rspack); dont_initialize(); @@ -77,9 +83,9 @@ VciVgsb<vci_param>::VciVgsb ( sc_module_name name, SC_METHOD(genMealy_cmdack); dont_initialize(); sensitive << p_clk.neg(); - for ( size_t i=0 ; i<nb_slave ; i++ ) sensitive << p_to_target[i]; + for ( size_t i=0 ; i<nb_target ; i++ ) sensitive << p_to_target[i]; - if ( !m_routing_table.isAllBelow( nb_slave ) ) { + if ( !m_routing_table.isAllBelow( nb_target ) ) { std::cout << "error in vci_gsb component" << std::endl; std::cout << "one target index is larger than the number of targets" << std::endl; exit(0);