Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


TRANG last won the day on December 14 2018

TRANG had the most liked content!


  • Rank
    Advanced Member

Recent Profile Visitors

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

  1. TRANG

    timer with systemC

    Thank for your support,
  2. 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.
  3. 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.
  4. 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?
  5. TRANG

    timer with systemC

    Thank @Eyck I understand that. Do you have any idea for this problem? How to resolve? Thanks very much.
  6. 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.
  7. 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
  8. TRANG

    How to Method work with event?

    Thank you so much, @David Black
  9. 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.
  10. 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.
  11. 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?
  12. Hi all, Can you explain about ideas of "Timing annotation", "Temporal decoupling", "Quantum keeper"? How do you use it?.
  13. 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 .
  14. TRANG

    TLM extension

    Thank @Eyck As your comment, my understand that 1. It is done in the destructor of the the tlm_generic_payload ( both AT and LT style ) 2. The other option is to call free_all_extensions() after transaction completed ( only AT style ) Is it correct? Thanks.
  15. I read some source code. class TlmExtension : public tlm_extension<TlmExtension> { ... }; void setExtension(tlm::tlm_generic_payload &in, tlm::tlm_generic_payload &out) { TlmExtension *input = (TlmExtension *)0; TlmExtension *output = new TlmExtension; in.get_extension(input); if (input != NULL) { output->setNum(input->getNum()); output->setChannel(input->getChannel()); out.set_extension(output); } } I think above code is wrong. Because of when exit setExtension function. We cant delete object create by new operator (output ) How to resolve this problem? Thanks. BR.