Time In SystemC Part VI

Print

next_trigger()
next_trigger() is used with process methods, one's which are not threads. The function next_trigger does not suspend the method process instance; a method process cannot be suspended,

 but always executes to completion before returning control to the kernel. This is different from wait() method used with threads.

Example : next_trigger()

  1 #include

  2

  3 SC_MODULE (next_trigger_example) {

  4   sc_in<bool> clock;

  5

  6   sc_event  e1,e2;

  7   int cnt;

  8

  9   void do_test1() {

 10     switch (cnt) {

 11       case 0 : cout << "@" << sc_time_stamp() <<" Default trigger clk triggered"<<endl;

 12                next_trigger(e1);

 13                break;

 14       case 1 : cout << "@" << sc_time_stamp() <<" Event e1 triggered"<<endl;

 15                next_trigger(10, SC_NS);

 16                break;

 17       case 2 : cout << "@" << sc_time_stamp() <<" Event e1 occured or time 10ns passed"<<endl;

 18                next_trigger(e1 | e2);

 19                break;

 20       case 3 : cout << "@" << sc_time_stamp() <<" Event e1 or e2 triggered"<<endl;

 21                break;

 22       default :cout << "@" << sc_time_stamp() <<" Default trigger clk triggered"<<endl;

 23                break;

 24     }

 25     cnt ++;

 26   }

 27

 28   void do_test2() {

 29     while (true) {

 30       wait(2);

 31       // Trigger event e1

 32       cout << "@" << sc_time_stamp() <<" Triggering e1"<<endl;

 33       e1.notify();

 34       wait(20);

 35       cout << "@" << sc_time_stamp() <<" Triggering e2"<<endl;

 36       e2.notify();

 37       // Wait for  2 posedge of clocks

 38       wait(2);

 39       cout << "@" << sc_time_stamp() <<" Terminating simulation"<<endl;

 40       sc_stop(); // sc_stop triggers end of simulation

 41     }

 42   }

 43

 44   SC_CTOR(next_trigger_example) {

 45     cnt = 0;

 46     SC_METHOD(do_test1);

 47       sensitive << clock;

 48     SC_CTHREAD(do_test2,clock.pos());

 49   }

 50 };

 51

 52 int sc_main (int argc, char* argv[]) {

 53   sc_clock clock ("my_clock",1,0.5);

 54

 55   next_trigger_example  object("wait");

 56     object.clock (clock.signal());

 57

 58   sc_start(0); // First time called will init schedular

 59   sc_start();  // Run the simulation till sc_stop is encountered

 60   return 0;// Terminate simulation

 61 }
Simulation Output : next_trigger

 @0 s Default trigger clk triggered

 @2 ns Triggering e1

 @2 ns Event e1 triggered

 @12 ns Event e1 occured or time 10ns passed

 @22 ns Triggering e2

 @22 ns Event e1 or e2 triggered

 @22500 ps Default trigger clk triggered

 @23 ns Default trigger clk triggered

 @23500 ps Default trigger clk triggered

 @24 ns Default trigger clk triggered

 @24 ns Terminating simulation

 SystemC: simulation stopped by user.

Bạn Có Đam Mê Với Vi Mạch hay Nhúng      -     Bạn Muốn Trau Dồi Thêm Kĩ Năng

Mong Muốn Có Thêm Cơ Hội Trong Công Việc

Và Trở Thành Một Người Có Giá Trị Hơn

Bạn Chưa Biết Phương Thức Nào Nhanh Chóng Để Đạt Được Chúng

Hãy Để Chúng Tôi Hỗ Trợ Cho Bạn. SEMICON  

 

Last Updated ( Tuesday, 29 March 2022 00:48 )