Jump to content

rfajardo

Members
  • Posts

    4
  • Joined

  • Last visited

Posts posted by rfajardo

  1. I'd say it does not.

    Below you can see an example. I tried to attach it. But I am not allowed to.

    Raul

    #include <systemc.h>
    
    SC_MODULE(Testbench)
    {
     sc_trace_file * traceFile;
     sc_signal<bool> toggle_o;
     void toggle();
     SC_CTOR(Testbench)
     {
       toggle_o = 0;
       traceFile = sc_create_vcd_trace_file("testbench");
       traceFile->set_time_unit(10, SC_US);
       sc_trace(traceFile, toggle_o, "toggle_o");
       SC_THREAD(toggle);
     }
     ~Testbench()
     {
       sc_close_vcd_trace_file(traceFile);
     }
    };
    
    void Testbench::toggle()
    {
     while(true)
     {
       toggle_o = !toggle_o;
       wait(100, SC_US);
     }
    }
    
    int sc_main(int argc, char * argv[])
    {
     Testbench testbench("Testbench");
     sc_start(500, SC_US);            //simulate for 500 microseconds
     return 0;
    }
    

  2. Hello everyone,

    I have noticed that when using the sc_time_unit (X, SC_US), the timescale in the resulting file is missing. SC_NS, SC_MS work well for example.

    The time marks are set correctly, only the timescale is missing. Output below.

    Best regards,

    Raul

    System: SystemC-2.3.0 on MSVS2010

    SC_NS:

    $date

    Feb 28, 2013 13:37:30

    $end

    $version

    SystemC 2.3.0-ASI --- Feb 22 2013 08:38:45

    $end

    $timescale

    1 ns

    $end

    $scope module SystemC $end

    $var wire 1 aaa HSS-PWM $end

    ...

    SC_US:

    $date

    Feb 28, 2013 13:42:21

    $end

    $version

    SystemC 2.3.0-ASI --- Feb 22 2013 08:38:45

    $end

    $scope module SystemC $end

    $var wire 1 aaa HSS-PWM $end

    ...

  3. 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 B)

    {

    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;

    }

×
×
  • Create New...