notify() function dùng để trigger một event. Nó có một vài biến thể dưới đây.
-
- notify() :Immediate notification
- notify(SC_ZERO_TIME) :Delta notification
- notify(double v, sc_time_unit tu) :Timed notification
- Thực tế, Delta notification là Timed notification với giá trị thời gian v = 0.
- Khi một event sử dụng Immediate notification, thì có nghĩa là việc thực thi sẽ diễn ra trong cùng delta-cycle đó(Evaluate phase)
- Khi một event sử dụng Delta notification, Việc thực thi sẽ đợi cho đến khi Simulation stage chuyển qua Update phase. Và cho phép các process khác trong delta-cycle hiện tại cũng hoàn thành.
Chúng ta cùng sử dụng một ví dụ để làm rõ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void NOTIFY::monitor_signal_immediate_method() { printf("[%40s][%10s] reg value is 0x%08x.\n", __FUNCTION__, sc_time_stamp().to_string().c_str(), reg.read()); } void NOTIFY::monitor_signal_delta_method() { printf("[%40s][%10s] reg value is 0x%08x.\n", __FUNCTION__, sc_time_stamp().to_string().c_str(), reg.read()); } void NOTIFY::StartEventMethod() { reg.write(0x1F1F1F1F); e_start_delta.notify(SC_ZERO_TIME); e_start_immediate.notify(); } |
Output:
1 2 |
[ NOTIFY::monitor_signal_immediate_method][ 5 ps] reg value is 0x00000000. [ NOTIFY::monitor_signal_delta_method][ 5 ps] reg value is 0x1F1F1F1F. |
- Khi ghi giá trị 0x1F1F1F1F vào reg port. Giá trị sẽ không được update vào reg port cho tới khi Simulation stage chuyển qua Update phase.
- Vì thế, trong cùng delta-cycle đó , monitor_signal_immediate_method được gọi ,giá trị của reg port vẫn là 0x00000000 ( giá trị cũ ).
- Và khi chuyển qua Update phase, monitor_signal_delta_method được gọi ,giá trị của reg port sẽ là giá trị mới 0x1F1F1F1F.
Download Project (VS2015):
Google Drive 1 Google Drive 2