diff --git a/.gitmodules b/.gitmodules index 4b9b4da..103c013 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,5 +1,8 @@ [submodule "sc-components"] path = sc-components - url = https://git.minres.com/SystemC/SystemC-Components.git - branch = master - \ No newline at end of file + url = https://github.com/Minres/SystemC-Components.git + branch = main + +[submodule "scc"] + path = scc + url = https://github.com/Minres/SystemC-Components.git diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 103367c..57bac22 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -18,7 +18,7 @@ - + @@ -30,7 +30,7 @@ - + @@ -43,11 +43,11 @@ - + - + \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index b3d3a69..01d06c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.12) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_CURRENT_SOURCE_DIR}/sc-components/cmake) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_CURRENT_SOURCE_DIR}/scc/cmake) project(SCC_Test) @@ -11,10 +11,10 @@ set(NO_SUBMODULE_CHECK FALSE CACHE BOOL "Disable the submodule check") set(ENABLE_CLANG_TIDY FALSE CACHE BOOL "Enable clang-tidy checks") include(GitFunctions) -get_branch_from_git() +get_info_from_git() ### set the directory names of the submodules -set(GIT_SUBMODULES sc-components) +set(GIT_SUBMODULES scc) set(GIT_SUBMODULE_DIR_sc-components .) ### set each submodules's commit or tag that is to be checked out ### (leave empty if you want master) @@ -75,7 +75,7 @@ else() endif() endif() -setup_conan() +setup_conan(TARGETS) # This line finds the boost lib and headers. set(Boost_NO_BOOST_CMAKE ON) # Don't do a find_package in config mode before searching for a regular boost install. @@ -89,7 +89,7 @@ endif() enable_testing() -add_subdirectory(sc-components) +add_subdirectory(scc) add_subdirectory(examples) add_subdirectory(tests) diff --git a/Modulefile b/Modulefile new file mode 100644 index 0000000..aea43b5 --- /dev/null +++ b/Modulefile @@ -0,0 +1,16 @@ +#%Module###################################################################### +## +## Project Module +## +proc ModulesHelp { } { + puts stderr "\tThe SCC Tests Project Module\n" + puts stderr "\tThis module loads PATHs and variables for SCC tests." +} + +set distro [exec /bin/lsb_release -i -s] +if { $distro == "CentOS" && ![info exists ::env(PROJECT)] && ![info exists ::env(PCP_DIR)] } { + puts stderr "Don't forget to execute 'scl enable devtoolset-7 llvm-toolset-7 bash'" +} + +module load tools/cmake + diff --git a/cmake/Common.cmake b/cmake/Common.cmake deleted file mode 100644 index 673ec59..0000000 --- a/cmake/Common.cmake +++ /dev/null @@ -1,20 +0,0 @@ -# Function to link between sub-projects -function(add_dependent_subproject subproject_name) - #if (NOT TARGET ${subproject_name}) # target unknown - if(NOT PROJECT_${subproject_name}) # var unknown because we build only this subproject - find_package(${subproject_name} CONFIG REQUIRED) - else () # we know the target thus we are doing a build from the top directory - include_directories(../${subproject_name}/incl) - endif () -endfunction(add_dependent_subproject) - -# Make sure we tell the topdir CMakeLists that we exist (if build from topdir) -get_directory_property(hasParent PARENT_DIRECTORY) -if(hasParent) - set(PROJECT_${PROJECT_NAME} true PARENT_SCOPE) -endif() - -# Function to link between sub-projects -function(add_dependent_header subproject_name) - include_directories(../${subproject_name}/incl) -endfunction(add_dependent_header) diff --git a/cmake/DoxygenTarget.cmake b/cmake/DoxygenTarget.cmake deleted file mode 100644 index 49d5dd4..0000000 --- a/cmake/DoxygenTarget.cmake +++ /dev/null @@ -1,24 +0,0 @@ -function(PrepareDocTarget) - - # Configure the doxygen config file with current settings: - configure_file(documentation-config.doxygen.in ${CMAKE_CURRENT_BINARY_DIR}/documentation-config.doxygen @ONLY) - - # Set the name of the target : "doc" if it doesn't already exist and "doc" if it does. - # This way we make sure to have a single "doc" target. Either it is the one of the top directory or - # it is the one of the subproject that we are compiling alone. - set(DOC_TARGET_NAME "doc") - if(TARGET doc) - set(DOC_TARGET_NAME "doc${PROJECT_NAME}") - endif() - - add_custom_target(${DOC_TARGET_NAME} ${TARGET_ALL} - ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/documentation-config.doxygen - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Generating API documentation using doxygen for ${PROJECT_NAME}" VERBATIM) - - set(INSTALL_DOC_DIR ${CMAKE_BINARY_DIR}/doc/${PROJECT_NAME}/html) - file(MAKE_DIRECTORY ${INSTALL_DOC_DIR}) # needed for install - - install(DIRECTORY ${INSTALL_DOC_DIR} DESTINATION share/${PROJECT_NAME}-${VERSION_MAJOR} COMPONENT doc) - -endfunction() \ No newline at end of file diff --git a/cmake/GitFunctions.cmake b/cmake/GitFunctions.cmake deleted file mode 100644 index bbb4903..0000000 --- a/cmake/GitFunctions.cmake +++ /dev/null @@ -1,22 +0,0 @@ -if(__git_functions) - return() -endif() -set(__git_functions YES) - -function( get_branch_from_git ) - execute_process( - COMMAND git rev-parse --abbrev-ref HEAD - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - RESULT_VARIABLE git_result - OUTPUT_VARIABLE git_branch - ERROR_VARIABLE git_error - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - ) - if( NOT git_result EQUAL 0 ) - message( FATAL_ERROR "Failed to execute Git: ${git_error}" ) - endif() - - set( GIT_BRANCH ${git_branch} PARENT_SCOPE ) -endfunction( get_branch_from_git ) - diff --git a/conanfile.txt b/conanfile.txt index 31b07b3..9e85b22 100644 --- a/conanfile.txt +++ b/conanfile.txt @@ -1,14 +1,13 @@ [requires] - gsl_microsoft/20180102@bincrafters/stable fmt/6.1.2 - SystemCVerification/2.0.1@minres/stable - SystemC-CCI/1.0.0@minres/stable + boost/1.75.0 + gsl-lite/0.37.0 + systemc/2.3.3 + #systemc-scv/2.0.1 + systemc-cci/1.0.0 [generators] cmake - txt [options] fmt:header_only=True - SystemCVerification:stdcxx=11 - SystemC-CCI:stdcxx=11 \ No newline at end of file diff --git a/examples/ahb_bfm/CMakeLists.txt b/examples/ahb_bfm/CMakeLists.txt index 88306ee..26a00a3 100644 --- a/examples/ahb_bfm/CMakeLists.txt +++ b/examples/ahb_bfm/CMakeLists.txt @@ -7,4 +7,4 @@ add_executable (ahb_bfm # Link the executable to the sc_components library. Since the sc_components library has # public include directories we will use those link directories when building # transaction_recording -target_link_libraries (ahb_bfm LINK_PUBLIC scc ${CONAN_LIBS}) +target_link_libraries (ahb_bfm LINK_PUBLIC scc) diff --git a/examples/ahb_bfm/sc_main.cpp b/examples/ahb_bfm/sc_main.cpp index 3d04744..8bc1063 100644 --- a/examples/ahb_bfm/sc_main.cpp +++ b/examples/ahb_bfm/sc_main.cpp @@ -1,16 +1,14 @@ -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include -#include #include #include -#include #include -#include +#include using namespace sc_core; using namespace scc; @@ -18,8 +16,8 @@ using namespace scc; class testbench: public sc_module, public scc::traceable { public: enum { WIDTH=64}; - scc::initiator_mixin> isck{"isck"}; - tlm::ahb::bfm::initiator intor{"intor"}; + tlm::scc::initiator_mixin> isck{"isck"}; + ahb::bfm::initiator intor{"intor"}; sc_core::sc_clock HCLK{"HCLK", 10_ns}; sc_core::sc_signal HRESETn{"HRESETn"}; sc_core::sc_signal> HADDR{"HADDR"}; @@ -35,8 +33,8 @@ public: sc_core::sc_signal HRESP{"HRESP"}; sc_core::sc_signal HSEL{"HSEL"}; - tlm::ahb::bfm::target target{"target"}; - scc::target_mixin> tsck{"tsck"}; + ahb::bfm::target target{"target"}; + tlm::scc::target_mixin> tsck{"tsck"}; testbench(sc_module_name nm):sc_module(nm){ SC_HAS_PROCESS(testbench); diff --git a/examples/simple_system/gpio.cpp b/examples/simple_system/gpio.cpp index 3ce86ae..b662311 100644 --- a/examples/simple_system/gpio.cpp +++ b/examples/simple_system/gpio.cpp @@ -63,7 +63,7 @@ gpio::gpio(sc_module_name nm) SC_METHOD(reset_cb); sensitive << rst_i; dont_initialize(); - auto pins_i_cb =[this](unsigned int tag, tlm::tlm_signal_gp<>& gp, + auto pins_i_cb =[this](unsigned int tag, tlm::scc::tlm_signal_gp<>& gp, tlm::tlm_phase& phase, sc_time& delay)->tlm::tlm_sync_enum{ this->pin_input(tag, gp, delay); return tlm::TLM_COMPLETED; @@ -73,7 +73,7 @@ gpio::gpio(sc_module_name nm) s.register_nb_transport(pins_i_cb, i); ++i; } - auto iof0_i_cb =[this](unsigned int tag, tlm::tlm_signal_gp<>& gp, + auto iof0_i_cb =[this](unsigned int tag, tlm::scc::tlm_signal_gp<>& gp, tlm::tlm_phase& phase, sc_time& delay)->tlm::tlm_sync_enum{ last_iof0[tag]=gp.get_value(); this->iof_input(tag, 0, gp, delay); @@ -84,7 +84,7 @@ gpio::gpio(sc_module_name nm) s.register_nb_transport(iof0_i_cb, i); ++i; } - auto iof1_i_cb =[this](unsigned int tag, tlm::tlm_signal_gp<>& gp, + auto iof1_i_cb =[this](unsigned int tag, tlm::scc::tlm_signal_gp<>& gp, tlm::tlm_phase& phase, sc_time& delay)->tlm::tlm_sync_enum{ last_iof1[tag]=gp.get_value(); this->iof_input(tag, 1, gp, delay); @@ -125,7 +125,7 @@ void gpio::clock_cb() { this->clk = clk_i.read(); } -tlm::tlm_phase gpio::write_output(tlm::tlm_signal_gp& gp, size_t i, bool val) { +tlm::tlm_phase gpio::write_output(tlm::scc::tlm_signal_gp& gp, size_t i, bool val) { sc_time delay{SC_ZERO_TIME}; tlm::tlm_phase phase{ tlm::BEGIN_REQ }; gp.set_command(tlm::TLM_WRITE_COMMAND); @@ -137,7 +137,7 @@ tlm::tlm_phase gpio::write_output(tlm::tlm_signal_gp& gp, size_t i, bool v void gpio::update_pins(uint32_t changed_bits) { sc_inout_rv<32>::data_type out_val; - tlm::tlm_signal_gp gp; + tlm::scc::tlm_signal_gp gp; bool val{false}; for(size_t i=0, mask = 1; i<32; ++i, mask<<=1){ if(changed_bits&mask){ @@ -159,7 +159,7 @@ void gpio::update_pins(uint32_t changed_bits) { } } -void gpio::pin_input(unsigned int tag, tlm::tlm_signal_gp& gp, sc_time& delay) { +void gpio::pin_input(unsigned int tag, tlm::scc::tlm_signal_gp& gp, sc_time& delay) { if(delay>SC_ZERO_TIME){ wait(delay); delay=SC_ZERO_TIME; @@ -174,11 +174,11 @@ void gpio::pin_input(unsigned int tag, tlm::tlm_signal_gp& gp, sc_time& de } } -void gpio::forward_pin_input(unsigned int tag, tlm::tlm_signal_gp& gp) { +void gpio::forward_pin_input(unsigned int tag, tlm::scc::tlm_signal_gp& gp) { const auto mask = 1U<iof_en&mask){ auto& socket = regs->iof_sel&mask?iof1_o[tag]:iof0_o[tag]; - tlm::tlm_signal_gp<> new_gp; + tlm::scc::tlm_signal_gp<> new_gp; for(size_t i=0; i& gp) { } } -void gpio::iof_input(unsigned int tag, unsigned iof_idx, tlm::tlm_signal_gp<>& gp, sc_time& delay) { +void gpio::iof_input(unsigned int tag, unsigned iof_idx, tlm::scc::tlm_signal_gp<>& gp, sc_time& delay) { if(delay>SC_ZERO_TIME){ wait(delay); delay=SC_ZERO_TIME; @@ -204,7 +204,7 @@ void gpio::iof_input(unsigned int tag, unsigned iof_idx, tlm::tlm_signal_gp<>& g for(size_t i=0; i new_gp; + tlm::scc::tlm_signal_gp<> new_gp; new_gp.set_command(tlm::TLM_WRITE_COMMAND); auto val = gp.get_value(); new_gp.set_value(val); diff --git a/examples/simple_system/gpio.h b/examples/simple_system/gpio.h index d61b9a6..3c1c97e 100644 --- a/examples/simple_system/gpio.h +++ b/examples/simple_system/gpio.h @@ -38,9 +38,9 @@ #define _GPIO_H_ #include "scc/tlm_target.h" -#include "scc/signal_target_mixin.h" -#include "scc/signal_initiator_mixin.h" -#include +#include "tlm/scc/signal_target_mixin.h" +#include "tlm/scc/signal_initiator_mixin.h" +#include namespace sysc { @@ -54,13 +54,13 @@ public: sc_core::sc_in rst_i; // sc_core::sc_inout_rv<32> pins_io; - sc_core::sc_vector pins_o; - sc_core::sc_vector pins_i; + sc_core::sc_vector pins_o; + sc_core::sc_vector pins_i; - sc_core::sc_vector iof0_o; - sc_core::sc_vector iof1_o; - sc_core::sc_vector iof0_i; - sc_core::sc_vector iof1_i; + sc_core::sc_vector iof0_o; + sc_core::sc_vector iof1_o; + sc_core::sc_vector iof0_i; + sc_core::sc_vector iof1_i; gpio(sc_core::sc_module_name nm); virtual ~gpio() override; // need to keep it in source file because of fwd declaration of gpio_regs @@ -69,16 +69,16 @@ protected: void clock_cb(); void reset_cb(); void update_pins(uint32_t changed_bits); - void pin_input(unsigned int tag, tlm::tlm_signal_gp<>& gp, sc_core::sc_time& delay); - void forward_pin_input(unsigned int tag, tlm::tlm_signal_gp<>& gp); - void iof_input(unsigned int tag, unsigned iof_idx, tlm::tlm_signal_gp<>& gp, sc_core::sc_time& delay); + void pin_input(unsigned int tag, tlm::scc::tlm_signal_gp<>& gp, sc_core::sc_time& delay); + void forward_pin_input(unsigned int tag, tlm::scc::tlm_signal_gp<>& gp); + void iof_input(unsigned int tag, unsigned iof_idx, tlm::scc::tlm_signal_gp<>& gp, sc_core::sc_time& delay); sc_core::sc_time clk; std::array last_iof0, last_iof1; std::unique_ptr regs; std::shared_ptr handler; private: - tlm::tlm_phase write_output(tlm::tlm_signal_gp<>& gp, size_t i, bool val); + tlm::tlm_phase write_output(tlm::scc::tlm_signal_gp<>& gp, size_t i, bool val); }; } /* namespace sysc */ diff --git a/examples/simple_system/sc_main.cpp b/examples/simple_system/sc_main.cpp index 83059d0..131b19f 100644 --- a/examples/simple_system/sc_main.cpp +++ b/examples/simple_system/sc_main.cpp @@ -22,7 +22,6 @@ #include "simple_system.h" #include -#include #include #include diff --git a/examples/simple_system/simple_system.h b/examples/simple_system/simple_system.h index 3c3a17a..45ac6f7 100644 --- a/examples/simple_system/simple_system.h +++ b/examples/simple_system/simple_system.h @@ -49,7 +49,7 @@ public: sc_core::sc_signal s_rst; sc_core::sc_vector> s_global_interrupts; sc_core::sc_signal s_core_interrupt; - sc_core::sc_vector> s_gpio; + sc_core::sc_vector> s_gpio; simple_system(sc_core::sc_module_name nm); diff --git a/sc-components b/sc-components deleted file mode 160000 index 3192c9c..0000000 --- a/sc-components +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3192c9cc2169b18ee7e1cd2c9fbb92d04887e7ac diff --git a/scc b/scc new file mode 160000 index 0000000..2a11251 --- /dev/null +++ b/scc @@ -0,0 +1 @@ +Subproject commit 2a11251ae63f3470245e13f4f576e4c93d2f243c diff --git a/tests/ordered_semaphore/sc_main.cpp b/tests/ordered_semaphore/sc_main.cpp index a0d522b..b407e9d 100644 --- a/tests/ordered_semaphore/sc_main.cpp +++ b/tests/ordered_semaphore/sc_main.cpp @@ -21,7 +21,6 @@ */ #include -#include #include #include #include @@ -50,7 +49,7 @@ private: sem_t.set_capacity(4); sem_t.post(); sem.post(); - sc_stop(); + sc_core::sc_stop(); } scc::ordered_semaphore sem{"sem", 2}; scc::ordered_semaphore_t<2> sem_t{"sem_t"}; @@ -103,8 +102,8 @@ int sc_main(int argc, char *argv[]) { SCCERR() << "simulation timed out"; sc_core::sc_stop(); } - auto errcnt = sc_report_handler::get_count(SC_ERROR); - auto warncnt = sc_report_handler::get_count(SC_WARNING); + auto errcnt = sc_core::sc_report_handler::get_count(sc_core::SC_ERROR); + auto warncnt = sc_core::sc_report_handler::get_count(sc_core::SC_WARNING); SCCINFO() << "Finished, there were " << errcnt << " error" << (errcnt == 1 ? "" : "s") << " and " << warncnt << " warning" << (warncnt == 1 ? "" : "s, 1 warning expected"); return errcnt + (warncnt-1); diff --git a/tests/sim_performance/pkt_sender.cpp b/tests/sim_performance/pkt_sender.cpp index 12415fe..cfa1e5c 100644 --- a/tests/sim_performance/pkt_sender.cpp +++ b/tests/sim_performance/pkt_sender.cpp @@ -8,7 +8,7 @@ #include "pkt_sender.h" #include "types.h" #include -#include +#include using namespace sc_core; @@ -54,7 +54,7 @@ void pkt_sender::gen_routing(std::vector &route_vec) { void pkt_sender::run() { wait(clk_i.posedge_event()); for(auto i=0U; i::get().allocate(); + tlm::tlm_generic_payload* gp = tlm::scc::tlm_mm<>::get().allocate(); gen_routing(gp->get_extension()->routing); tlm::tlm_phase phase{tlm::BEGIN_REQ}; sc_time delay; diff --git a/tests/sim_performance/pkt_sender.h b/tests/sim_performance/pkt_sender.h index e6fcc27..27cbc43 100644 --- a/tests/sim_performance/pkt_sender.h +++ b/tests/sim_performance/pkt_sender.h @@ -10,15 +10,15 @@ #include #include "packet.h" -#include -#include +#include +#include class pkt_sender : sc_core::sc_module { public: sc_core::sc_in clk_i{"clk_i"}; - scc::initiator_mixin> isck; - scc::target_mixin> tsck; + tlm::scc::initiator_mixin> isck; + tlm::scc::target_mixin> tsck; pkt_sender(sc_core::sc_module_name const&, unsigned dim, unsigned pos_x, unsigned pos_y, unsigned count); virtual ~pkt_sender() = default; sc_core::sc_event const& get_finish_event(){return finish_evt;} diff --git a/tests/sim_performance/pkt_switch.cpp b/tests/sim_performance/pkt_switch.cpp index 57943f6..33af265 100644 --- a/tests/sim_performance/pkt_switch.cpp +++ b/tests/sim_performance/pkt_switch.cpp @@ -10,7 +10,6 @@ #endif #include "pkt_switch.h" #include "types.h" -#include #include using namespace sc_core; diff --git a/tests/sim_performance/pkt_switch.h b/tests/sim_performance/pkt_switch.h index 732acc5..4e5c80c 100644 --- a/tests/sim_performance/pkt_switch.h +++ b/tests/sim_performance/pkt_switch.h @@ -10,8 +10,8 @@ #include #include "packet.h" -#include -#include +#include +#include #include #include @@ -20,8 +20,8 @@ class pkt_switch : sc_core::sc_module { public: enum {NONE=std::numeric_limits::max()}; sc_core::sc_in clk_i{"clk_i"}; - sc_core::sc_vector>> tsck{"tsck",4}; - sc_core::sc_vector>> isck{"isck",4}; + sc_core::sc_vector>> tsck{"tsck",4}; + sc_core::sc_vector>> isck{"isck",4}; pkt_switch(sc_core::sc_module_name const&); virtual ~pkt_switch() = default; private: diff --git a/tests/sim_performance/sc_main.cpp b/tests/sim_performance/sc_main.cpp index e5cbe4d..4b8c287 100644 --- a/tests/sim_performance/sc_main.cpp +++ b/tests/sim_performance/sc_main.cpp @@ -23,7 +23,6 @@ #include "top.h" #include #include -#include #include #include @@ -88,19 +87,19 @@ int sc_main(int argc, char *argv[]) { // run simulation /////////////////////////////////////////////////////////////////////////// sc_start(sc_core::sc_time(1, sc_core::SC_MS)); - if(sc_is_running()) { + if(sc_core::sc_is_running()) { SCCERR() << "simulation timed out"; // calls sc_stop sc_core::sc_stop(); } - } catch(sc_report& e) { + } catch(sc_core::sc_report& e) { SCCERR() << "Caught sc_report exception during simulation: " << e.what() << ":" << e.get_msg(); } catch(std::exception& e) { SCCERR() << "Caught exception during simulation: " << e.what(); } catch(...) { SCCERR() << "Caught unspecified exception during simulation"; } - auto errcnt = sc_report_handler::get_count(SC_ERROR); - auto warncnt = sc_report_handler::get_count(SC_WARNING); + auto errcnt = sc_core::sc_report_handler::get_count(sc_core::SC_ERROR); + auto warncnt = sc_core::sc_report_handler::get_count(sc_core::SC_WARNING); SCCINFO() << "simulation finished, " << errcnt << " error" << (errcnt == 1 ? "" : "s") << " and " << warncnt << " warning" << (warncnt == 1 ? "" : "s"); return errcnt + warncnt;