adds initial files for mt test
Some checks failed
SCC Test/pipeline/head There was a failure building this commit

This commit is contained in:
2025-10-21 16:52:01 +02:00
parent b2fba1af37
commit cde2d0463c
8 changed files with 121 additions and 5 deletions

View File

@@ -11,6 +11,7 @@ add_subdirectory(sc_fixed_tracing)
add_subdirectory(cxs_tlm)
add_subdirectory(tlm_memory)
add_subdirectory(memory_subsys)
add_subdirectory(quantum_keeper_mt)
add_subdirectory(sim_speed)
if(FULL_TEST_SUITE)
add_subdirectory(sim_performance)

View File

@@ -0,0 +1,5 @@
add_executable (quantum_keeper_mt
sc_main.cpp
)
target_link_libraries (quantum_keeper_mt LINK_PUBLIC scc-sysc)
add_test(NAME quantum_keeper_mt COMMAND quantum_keeper_mt)

View File

@@ -0,0 +1,38 @@
#include "top_module.h"
#include <csetjmp>
#include <csignal>
#include <cstdlib>
#include <scc/configurer.h>
#include <scc/report.h>
#include <scc/trace.h>
#include <scc/tracer.h>
#include <util/ities.h>
using namespace scc;
using namespace sc_core;
jmp_buf abrt;
void ABRThandler(int sig) { longjmp(abrt, 1); }
int sc_main(int argc, char* argv[]) {
signal(SIGABRT, ABRThandler);
auto my_name = util::split(argv[0], '/').back();
auto level = "7"; // getenv("SCC_TEST_VERBOSE");
auto log_lvl = level ? static_cast<scc::log>(std::min(strtoul(level, nullptr, 10) + 4, 7UL)) : log::FATAL;
scc::init_logging(LogConfig().logLevel(log_lvl).logAsync(false).msgTypeFieldWidth(35));
scc::configurer cfg("");
// create tracer if environment variable SCC_TEST_TRACE is defined
std::unique_ptr<scc::tracer> tracer;
if(auto* test_trace = getenv("SCC_TEST_TRACE")) {
tracer = std::make_unique<scc::tracer>(my_name, scc::tracer::ENABLE, scc::tracer::ENABLE);
cfg.set_value("scc_tracer.default_trace_enable", true);
}
int result = -1;
if(setjmp(abrt) == 0) {
// instantiate design(s)
top_module top_mod("top_module_inst");
// Start the simulation
sc_core::sc_start(1140, sc_core::SC_NS);
}
return result;
}

View File

@@ -0,0 +1,44 @@
#ifndef _TOP_MODULE_H_
#define _TOP_MODULE_H_
#include <atomic>
#include <scc/async_queue.h>
#include <scc/async_thread.h>
#include <scc/report.h>
#include <sysc/kernel/sc_initializer_function.h>
#include <tlm/scc/quantum_keeper.h>
#include <tlm>
struct top_module : ::sc_core ::sc_module {
top_module(sc_core::sc_module_name nm)
: sc_core::sc_module(nm) {
SC_THREAD(run);
}
~top_module() {}
private:
void run() {
wait(sc_core::SC_ZERO_TIME); // separate from elaboration phase
do {
quantum_keeper.reset();
core_executor.start([this]() { thread_exec(); });
wait(core_executor.thread_finish_event());
} while(!finish.load(std::memory_order_relaxed));
sc_core::sc_stop();
}
void thread_exec() {
for(auto i = 0u; i < 16; ++i) {
SCCINFO(SCMOD) << "[" << __PRETTY_FUNCTION__ << "]" << " local time " << quantum_keeper.get_local_absolute_time();
quantum_keeper.check_and_sync(1_us);
}
finish.store(true, std::memory_order_release);
}
tlm::scc::quantumkeeper_mt quantum_keeper;
std::atomic_bool finish{false};
scc::async_thread core_executor;
};
// top_module
#endif // _TOP_MODULE_H_