test206.cpp revision 12855:588919e0e4aa
12292SN/A#define SC_INCLUDE_DYNAMIC_PROCESSES 28707Sandreas.hansson@arm.com 38707Sandreas.hansson@arm.com#include <systemc> 48707Sandreas.hansson@arm.com#include <cstring> 58707Sandreas.hansson@arm.comusing namespace sc_core; 68707Sandreas.hansson@arm.comusing namespace sc_dt; 78707Sandreas.hansson@arm.comusing std::cout; 88707Sandreas.hansson@arm.comusing std::endl; 98707Sandreas.hansson@arm.com 108707Sandreas.hansson@arm.com// 6) sc_get_current_process_handle 118707Sandreas.hansson@arm.com 128707Sandreas.hansson@arm.comSC_MODULE(M) 138707Sandreas.hansson@arm.com{ 142727Sktlim@umich.edu SC_CTOR(M) 152292SN/A { 162292SN/A sc_process_handle h; 172292SN/A sc_assert (!h.valid()); 182292SN/A h = sc_get_current_process_handle(); 192292SN/A sc_assert (!h.valid()); 202292SN/A SC_THREAD(T); 212292SN/A h = sc_get_current_process_handle(); 222292SN/A sc_assert (h.valid()); 232292SN/A sc_assert (strcmp(h.name(),"top.m.T") == 0); 242292SN/A sc_assert (h.proc_kind()==SC_THREAD_PROC_); 252292SN/A sc_assert (h.dynamic()==false); 262292SN/A sc_assert (h.terminated()==false); 272292SN/A sc_assert (h.get_process_object() != 0); 282292SN/A sc_assert (h.get_parent_object() == this); 292292SN/A 302292SN/A sc_spawn(sc_bind(&M::proc, this), "static_proc"); 312292SN/A h = sc_get_current_process_handle(); 322292SN/A sc_assert (h.valid()); 332292SN/A sc_assert (strcmp(h.name(),"top.m.static_proc") == 0); 342292SN/A sc_assert (h.proc_kind()==SC_THREAD_PROC_); 352292SN/A sc_assert (h.dynamic()==false); 362292SN/A sc_assert (h.terminated()==false); 372292SN/A sc_assert (h.get_process_object() != 0); 382292SN/A sc_assert (h.get_parent_object() == this); 392689Sktlim@umich.edu } 402689Sktlim@umich.edu sc_object* obj; 412292SN/A void T() 422292SN/A { 432329SN/A sc_process_handle h; 442980Sgblack@eecs.umich.edu sc_assert (!h.valid()); 452329SN/A h = sc_get_current_process_handle(); 462329SN/A sc_assert (h.valid()); 472292SN/A sc_assert (strcmp(h.name(),"top.m.T") == 0); 488232Snate@binkert.org sc_assert (h.proc_kind()==SC_THREAD_PROC_); 498232Snate@binkert.org sc_assert (h.dynamic()==false); 508232Snate@binkert.org sc_assert (h.terminated()==false); 516221Snate@binkert.org sc_assert (h.get_process_object() != 0); 522292SN/A sc_assert (h.get_parent_object() == this); 536221Snate@binkert.org 545529Snate@binkert.org obj = h.get_process_object(); 552292SN/A sc_spawn_options opt; 565529Snate@binkert.org opt.spawn_method(); 578707Sandreas.hansson@arm.com sc_spawn(sc_bind(&M::proc, this), "dynamic_proc", &opt); 584329Sktlim@umich.edu wait(1, SC_NS); 594329Sktlim@umich.edu } 605529Snate@binkert.org void proc() 612907Sktlim@umich.edu { 622292SN/A sc_process_handle h = sc_get_current_process_handle(); 632292SN/A sc_assert (h.valid()); 642292SN/A if (h.dynamic()) 652292SN/A { 662980Sgblack@eecs.umich.edu sc_assert (strcmp(h.name(),"top.m.T.dynamic_proc") == 0); 672292SN/A sc_assert (h.proc_kind()==SC_METHOD_PROC_); 682292SN/A sc_assert (h.get_parent_object() == obj); 692292SN/A } 702292SN/A else 712292SN/A { 722292SN/A sc_assert (strcmp(h.name(),"top.m.static_proc") == 0); 732292SN/A sc_assert (h.proc_kind()==SC_THREAD_PROC_); 742292SN/A sc_assert (h.get_parent_object() == this); 752292SN/A } 762292SN/A sc_assert (h.terminated()==false); 772292SN/A sc_assert (h.get_process_object() != 0); 784329Sktlim@umich.edu } 792292SN/A}; 802292SN/A 812292SN/Astruct Top: sc_module 822292SN/A{ 832292SN/A M *m; 842292SN/A Top(sc_module_name) 852292SN/A { 864329Sktlim@umich.edu m = new M("m"); 872292SN/A } 888346Sksewell@umich.edu}; 892292SN/A 902292SN/Aint sc_main(int argc, char* argv[]) 912292SN/A{ 922292SN/A cout << "Should be silent..." << endl; 932292SN/A sc_process_handle h; 942292SN/A sc_assert (!h.valid()); 952292SN/A h = sc_get_current_process_handle(); 962292SN/A sc_assert (!h.valid()); 972292SN/A 982292SN/A Top top("top"); 992292SN/A sc_start(); 1002292SN/A 1014329Sktlim@umich.edu cout << endl << "Success" << endl; 1022292SN/A return 0; 1038346Sksewell@umich.edu} 1042292SN/A