- sc_signal và sc_buffer là hai kênh primitive, cả hai đều thuộc mô hình evaluate-update và chúng tương tự nhau. Dưới đây là cú pháp khai báo, đọc và viết.
Mã:
sc_signal<datatype> signame[, ...;
signame. write(newvalue) ;
signame. read(varname) ;
sensitive << signame. default_event();
wait(signame. default_event()|...);
if (signame. event() == true) {
// occurred in previous delta-cycle
sự kiện đó gây ra bởi giá trị trả về của wait(); Tuy nhiên, đối với kênh sc_signal các method event() có thể được gọi để xem nếu các kênh phát hành một sự kiện ở delta-cycle liền kề.
- sc_signal <> cơ bản giống với signal của VHDL. Đối với Verilog, tương tự như một reg trong phép gán non-blocking(<=).
** Ví dụ
Mã:
// Declare variables
int count;
sc_string message_temp;
sc_signal<int> count_sig;
sc_signal<sc_string> message_sig;
// Initializing during 1st delta cycle
count_sig. write(10);
message_sig. write("Hello");
count = 11;
message_temp = "Whoa";
cout << "count is " << count << " "
<< "count_sig is " << count_sig << endl
<< "message_temp is '" << message_temp << "' "
<< "message_sig is '" << message_sig << "'"
<<endl
<< "Waiting" << endl;
wait(SC_ZERO_TIME);
// 2nd delta cycle
count = 20;
count_sig. write(count);
cout << "count is " << count << " "
<< "count_sig is " << count_sig << endl
<< "message_temp is '" << message_temp << "' "
<< "message_sig is '" << message_sig << "'"
<<endl
<< "Waiting" << endl;
wait(SC_ZERO_TIME);
// 3rd delta cycle
message_sig. write(message_temp = "Rev engines");
cout << "count is " << count << " "
<< "count_sig is " << count_sig << endl
<< "message_temp is '" << message_temp << "' "
<< "message_sig is '" << message_sig << "'"
<<endl
<< "Done" << endl;