is_unwinding_bug.cpp revision 12855:588919e0e4aa
111308Santhony.gutierrez@amd.com// sync_reset_on/off 211308Santhony.gutierrez@amd.com 311308Santhony.gutierrez@amd.com#define SC_INCLUDE_DYNAMIC_PROCESSES 411308Santhony.gutierrez@amd.com 511308Santhony.gutierrez@amd.com#include <systemc> 611308Santhony.gutierrez@amd.com 711308Santhony.gutierrez@amd.comusing namespace sc_core; 811308Santhony.gutierrez@amd.comusing std::cout; 911308Santhony.gutierrez@amd.comusing std::endl; 1011308Santhony.gutierrez@amd.com 1111308Santhony.gutierrez@amd.comstruct M2: sc_module 1211308Santhony.gutierrez@amd.com{ 1311308Santhony.gutierrez@amd.com M2(sc_module_name _name) 1411308Santhony.gutierrez@amd.com { 1511308Santhony.gutierrez@amd.com SC_THREAD(ticker); 1611308Santhony.gutierrez@amd.com SC_THREAD(calling); 1711308Santhony.gutierrez@amd.com SC_THREAD(target); 1811308Santhony.gutierrez@amd.com t = sc_get_current_process_handle(); 1911308Santhony.gutierrez@amd.com } 2011308Santhony.gutierrez@amd.com 2111308Santhony.gutierrez@amd.com sc_process_handle t; 2211308Santhony.gutierrez@amd.com sc_event ev; 2311308Santhony.gutierrez@amd.com 2411308Santhony.gutierrez@amd.com void ticker() 2511308Santhony.gutierrez@amd.com { 2611308Santhony.gutierrez@amd.com for (;;) 2711308Santhony.gutierrez@amd.com { 2811308Santhony.gutierrez@amd.com wait(10, SC_NS); 2911308Santhony.gutierrez@amd.com ev.notify(); 3011308Santhony.gutierrez@amd.com } 3111308Santhony.gutierrez@amd.com } 3211308Santhony.gutierrez@amd.com 3311308Santhony.gutierrez@amd.com void calling() 3411308Santhony.gutierrez@amd.com { 3511308Santhony.gutierrez@amd.com wait(15, SC_NS); 3611308Santhony.gutierrez@amd.com 3711308Santhony.gutierrez@amd.com t.sync_reset_on(); 3811856Sbrandon.potter@amd.com wait(10, SC_NS); 3911856Sbrandon.potter@amd.com 4011308Santhony.gutierrez@amd.com t.sync_reset_off(); 4111308Santhony.gutierrez@amd.com wait(10, SC_NS); 4211308Santhony.gutierrez@amd.com 4311308Santhony.gutierrez@amd.com t.reset(); 4411308Santhony.gutierrez@amd.com wait(SC_ZERO_TIME); 4511308Santhony.gutierrez@amd.com 4611308Santhony.gutierrez@amd.com sc_stop(); 4711308Santhony.gutierrez@amd.com } 4811308Santhony.gutierrez@amd.com 4911308Santhony.gutierrez@amd.com void target() 5011308Santhony.gutierrez@amd.com { 5111308Santhony.gutierrez@amd.com cout << "Target called/reset at " << sc_time_stamp() << endl; 5211308Santhony.gutierrez@amd.com 5311308Santhony.gutierrez@amd.com for (;;) 5411308Santhony.gutierrez@amd.com { 5511308Santhony.gutierrez@amd.com try { 5611308Santhony.gutierrez@amd.com wait(ev); 5711308Santhony.gutierrez@amd.com cout << "Target awoke at " << sc_time_stamp() << endl; 5811308Santhony.gutierrez@amd.com } 5911308Santhony.gutierrez@amd.com catch (const sc_unwind_exception& ex) { 6011308Santhony.gutierrez@amd.com cout << "Unwinding at " << sc_time_stamp() << endl; 6111308Santhony.gutierrez@amd.com sc_assert( t.is_unwinding() ); 6211308Santhony.gutierrez@amd.com sc_assert( sc_is_unwinding() ); 6311308Santhony.gutierrez@amd.com throw ex; 6411308Santhony.gutierrez@amd.com } 6511308Santhony.gutierrez@amd.com } 6611308Santhony.gutierrez@amd.com } 6711308Santhony.gutierrez@amd.com 6811308Santhony.gutierrez@amd.com SC_HAS_PROCESS(M2); 6911308Santhony.gutierrez@amd.com}; 7011308Santhony.gutierrez@amd.com 7111308Santhony.gutierrez@amd.comint sc_main(int argc, char* argv[]) 7211308Santhony.gutierrez@amd.com{ 7311308Santhony.gutierrez@amd.com M2 m("m"); 7411308Santhony.gutierrez@amd.com 7511308Santhony.gutierrez@amd.com sc_start(); 7611308Santhony.gutierrez@amd.com 7711308Santhony.gutierrez@amd.com cout << endl << "Success" << endl; 7811308Santhony.gutierrez@amd.com return 0; 7911308Santhony.gutierrez@amd.com} 8011308Santhony.gutierrez@amd.com 8111308Santhony.gutierrez@amd.com