Jump to content

TRANG

Members
  • Content Count

    52
  • Joined

  • Last visited

  • Days Won

    1

TRANG last won the day on December 14 2018

TRANG had the most liked content!

About TRANG

  • Rank
    Advanced Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Hi all, I have 2 models, model A and model B Model A has an output port out_A (bool) Model B has an input port in_B (bool) when integrate, I will instance 3 objects of Model A, 1 object of Model B //file @connection.cpp ... void initializeENV(){ ... objA_1 = new ModelA("objA_1"); objA_2 = new ModelA("objA_2"); objA_3 = new ModelA("objA_3"); objB = new ModelB("objB"); ... } the value of in_B = objA_1->out_A or objA_2->out_A or objA_3->out_A I think that, if I bind as below . It is wrong. Because of when objA_1->out_A is change then affect to obj_2->out_A and objA_3->out_A. Is my understand correct? //file @connection.cpp ... sc_signal<bool> sig_1; sc_signal<bool> sig_2; sc_signal<bool> sig_3; void initializeENV(){ ... objA_1 = new ModelA("objA_1"); objA_2 = new ModelA("objA_2"); objA_3 = new ModelA("objA_3"); objB = new ModelB("objB"); objA_1->out_A(sig_1); objA_2->out_A(sig_2); objA_3->out_A(sig_3); objB->in_B(sig_1); objB->in_B(sig_2); objB->in_B(sig_3); ... } How to resolve it? How to bind 3 out_A ports to in_B port? .I can't use SC_METHOD in this case. Thank all.
  2. Master and Slave use same clock, so I think Slave need only care data_in. class slave : public sc_module { public: sc_in<bool> clk; sc_in<uint32_t> data_in; slave(sc_module_name name):clk("clk"),data_in("data_in"){ SC_HAS_PROCESS(slave); SC_METHOD(run); dont_initialize(); sensitive << data_in; } void run(){ cout<<hex<<data_in.read()<<endl; } ~slave(){ } }; or class slave : public sc_module { public: sc_in<bool> clk; sc_in<uint32_t> data_in; slave(sc_module_name name):clk("clk"),data_in("data_in"){ SC_HAS_PROCESS(slave); SC_THREAD(run); dont_initialize(); sensitive << data_in; } void run(){ cout<<hex<<data_in.read()<<endl; } ~slave(){ } };
  3. TRANG

    timer with systemC

    Thank for your support,
  4. TRANG

    timer with systemC

    I'm sorry make you confused. Summary: if my test case is: sc_start(2*period,time_unit); while (sc_pending_activity_at_current_time()) { sc_start(SC_ZERO_TIME); } or sc_start(3*period,time_unit); then compare match occur.( is correct) If my test case is: sc_start(2*period,time_unit); then compare match don't occur . I want to my source code detect when time simulate near the over to pending to execute event m_update before over.
  5. TRANG

    timer with systemC

    i try : void GTimer::end_of_simulation() { while (sc_pending_activity_at_current_time()) { sc_start(SC_ZERO_TIME); } } But It is not true? My problem is the time simulates is over before trigger event. I want to force trigger event before end simulate.
  6. TRANG

    timer with systemC

    Thanks @Philipp A Hartmann it is OK if I use : sc_start(2*period,time_unit); while( sc_pending_activity_at_current_time() ) sc_start( SC_ZERO_TIME ); But I want to pending in my code. Is it possible?
  7. TRANG

    timer with systemC

    Thank @Eyck I understand that. Do you have any idea for this problem? How to resolve? Thanks very much.
  8. TRANG

    timer with systemC

    Hi all, I'm using systemC to build timer model. ( Timer support compares match, overflow, underflow) //constructor SC_METHOD(evaluate_method); dont_initialize(); sensitive << m_evaluate; SC_METHOD(update_method); dont_initialize(); sensitive << m_update; void GTimer::evaluate_method() { //check if compare match if(CNT_value == compare_match_value){ compare_match_handling(); } ... m_update.notify((double)period * compare_match_value, time_unit); } void GTimer::update_method() { CNT_value = get_counter_value(); m_evaluate.notify(); } GT_API unsigned int GTimer::get_counter_value() { unsigned int value; sc_time current_time = sc_time_stamp(); value = (current_time.to_double() - start_time.to_double()) / period; return value; } Ex: I set compare_match_value = 2; period = 1000.0 time_unit = SC_PS when I start timer and simulate on 2* period sc_start(2*period ,time_unit) compare match don't occur. because the time simulate is over but m_update event not trigger. If I start timer and simulate on 3* period compare match occur. Do you have any idea? ( I want to compare match occur when I start timer and simulate on 2*period) Thank all.
  9. TRANG

    Scope of SC_HAS_PROCESS

    Hi @CapUnderPantsRLZ in 1666-2011.pdf So, I think @David Black is exactly. https://stackoverflow.com/questions/45308468/systemc-multiple-module-implementations-in-single-cpp-file
  10. TRANG

    How to Method work with event?

    Thank you so much, @David Black
  11. Hi all, I try code bellow SC_METHOD(APMMethod); sensitive << mAPMEvent; ... void APMMethod(){ printf("Reset port\n"); ... } ... void Initialize() { for(unsigned int i=0; i< 50; i++){ mAPM_reg[i].value = 0; printf("Initialize %s\n",mAPM_reg[i].name); } } ... void EnableReset(){ //reset port mAPMEvent.notify(SC_ZERO_TIME); //initialize reg Initialize(); } When EnableReset occur. My output is: Intialize APM_REG1 Intialize APM_REG2 ... Reset port I try with mAPMEvent.notify(); But the same output. 1. why Initialize() call before APMMethod(). 2. when to use notiffy() or notify(SC_ZERO_TIME)? Thanks all.
  12. TRANG

    sensitivity list

    I can't see that because my lib is 2.3.1. So, with 2.3.1, we don't have a solution. Thank Philipp.
  13. TRANG

    sensitivity list

    Hi @David Black, If I have sc_event event1; sc_event event2; ... SC_METHOD( My_method ); sensitive << event1 << event2; dont_initialize(); How to detect My_method sensitive by event1 or event2?
  14. Hi all, Can you explain about ideas of "Timing annotation", "Temporal decoupling", "Quantum keeper"? How do you use it?.
  15. TRANG

    sensitivity list

    sensitive<< rd_addr I think above code is illegal. You can declare event. If new value rd_addr != old value rd_addr then notify event .
×