Search the Community
Showing results for tags 'exception'.
-
In my project there are several functions which perform SystemC simulations (each has its own declaration prelude and sc_start()). So they are constructed as follows: // first Simulation: sc_signal<double> s1_sim1; .. ControlFoo<double> *cf = new ControlFoo<double>(); cf->Foo_port(s1_sim1); .. sc_start(); // works fine delete(cf); .. // second Simulation: sc_signal<double> s1_sim2; // this leads to an exception The first simulation runs as desired until the sc_stop(). But when I try to declare new sc_signals after the first simulation is completed then it comes to an exception. How do I solve my problem? Best regards Anne (I also asked this on stackoverflow but no response yet. http://stackoverflow.com/questions/42997196/project-with-multiple-systemc-simulations-leads-to-an-exception)
-
Hi, I encounter a problem when using the sc_spawn primitive. THE SCENARIO is the following: I call sc_spawn each time a new request arrives on my component. Then, the request is handled by its own thread process, which leads to activate an edge in the FSM. The spawned process does not contain an infinite loop and terminate as soon as it finishes processing the request. THE PROBLEM: An unknown exception is thrown when the spawned thread process terminates. The exception comes from sc_core::sc_cor_pkg_qt::abort( ... ) apparently. Could any one help me or give me advice for solving this problem ? Best, Julien.
-
Hello everyone, I have successfuly compiled SystemC-2.3.0 under VS2012. Compilation: For a system description and compilation, I had to enable static linking the following way, aside from configuring the include and library directories and the library name. Properties->configuration properties->C/C++->Code Generation Runtime Library set to Multi-threaded Debug (\MTd) After that, I was able to compile the simulation project. Execution: During execution, Windows throws an exception for the DCAST of line 359 on sc_thread_process.cpp. This is executed by the call to SC_THREAD(run) in the "CPU" constructor. The related code can be found enclosed. Console output: Error: (E549) uncaught exception: Access violation - no RTTI data! In file: c:\users\raul\documents\visual studio 2012\projects\systemc-2.3.0\src\sysc\kernel\sc_except.cpp:98 Visual Studio output: First-chance exception at 0x0135EF3F in coprocessor_func.exe: 0xC0000005: Access violation reading location 0x00000005. First-chance exception at 0x74D54B32 in coprocessor_func.exe: Microsoft C++ exception: std::__non_rtti_object at memory location 0x007EF570. First-chance exception at 0x74D54B32 in coprocessor_func.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000. First-chance exception at 0x74D54B32 in coprocessor_func.exe: Microsoft C++ exception: sc_core::sc_report at memory location 0x007EE304. The program '[4260] coprocessor_func.exe' has exited with code 1 (0x1). Could this be related to the issue that dynamic cast should not be called from within a constructor because the object is not yet fully built? References: Under item 6: http://en.cppreferen...ge/dynamic_cast This is an example that I am using without issues under Linux. Any ideas of what can be going wrong? Thanks in advance, Raul Fajardo Code: #include <systemc.h> #include <iostream> using namespace std; class CoProcessor { sc_time m_process_time; public: CoProcessor() { m_process_time = sc_time(20, SC_US); } unsigned int sum(unsigned int a, unsigned int { unsigned int tmp = a + b; wait(m_process_time); return tmp; } }; class CPU : public sc_module { CoProcessor co_cpu; public: SC_HAS_PROCESS(CPU); //enables the definition of SC_THREAD or SC_METHOD (SC_METHOD has sensitivity and never ends) CPU(sc_module_name nm) : sc_module(nm) { SC_THREAD(run); //registers the function to the simulation kernel, enables wait() } void run() { unsigned int a, b, c; b = 10; c = 5; a = co_cpu.sum(b, c); cout << "Computation result of " << b << " + " << c << ": " << a << endl; cout << "Algorithm was run in " << sc_time_stamp() << endl; } }; int sc_main(int argc, char * argv[]) { CPU processor("main_processor"); sc_start(500, SC_US); //simulate for 500 microseconds return 0; }