Learn SystemC - Signal: read and write

本文为英文版本翻译,原文地址:Signal: read and write

sc_signal:

  1. 用于对一组数字线路进行模拟建模
  2. 通过evaluate-update以确保在同时读写操作的情况下具有确定性行为,使用者维护当前值及新值。
  3. 若新值与当前值不同,write()会提交一个更新请求(update request)
  4. i实现接口:sc_signal_inout_if<T>

Constructors(构造函数):

  1. sc_signal(): 通过初始化列表调用基类构造函数:sc_prim_channel(sc_gen_unique_name("signal"))
  2. sc_signal(const char* name_): 通过初始化列表调用基类构造函数:c_prim_channel(name_)

Member functions(成员函数):

  1. T& read() or operator const T& (): 返回信号的当前值引用,不修改信号的状态
  2. void write(const T&): 修改信号的值,以使其在下一个增量周期后可获取新值(read)
  3. operator=: 同write()
  4. sc_event& default_event(), sc_event& value_changed_event(): 返回值变化事件的引用
  5. bool event(): 仅当信号的值在紧接前一个增量周期的更新阶段发生变化且在当前仿真时间发生变化时,返回true

As compared to fifo(与fifo对比):

  1. sc_signal仅有一个读写(read/write)槽位置
  2. sc_signal仅在新值与当前值不同时才出发更新请求(update request)
  3. (read)操作不会删除信号值

Other than execution phase, a sc_signal:

  1. 在阐释阶段可写入以初始化信号值
  2. 在阐释阶段或仿真暂停时,即在调用函数 sc_start 之前或之后,可以在函数 sc_main 写入

示例代码:

// Learn with Examples, 2020, MIT license
#include <systemc>
using namespace sc_core;

SC_MODULE(SIGNAL) {
  sc_signal<int> s;
  SC_CTOR(SIGNAL) {
    SC_THREAD(readwrite);
  }
  void readwrite() {
    s.write(3);
    std::cout << "s = " << s << "; " << s.read() << std::endl;
    wait(SC_ZERO_TIME);
    std::cout << "after delta_cycle, s = " << s << std::endl;
    
    s = 4;
    s = 5;
    int tmp = s;
    std::cout << "s = " << tmp << std::endl;
    wait(SC_ZERO_TIME);
    std::cout << "after delta_cycle, s = " << s.read() << std::endl;
  }
};

int sc_main(int, char*[]) {
  SIGNAL signal("signal");
  signal.s = -1;
  sc_start();
  return 0;
}

运行结果:

s = -1; -1 # read() or operator = both returns current value of signal
after delta_cycle, s = 3 # new value replaces current value after a delta cycle
s = 3                    # read the current value
# new value replaces current value; if multiple new values are written, only the last one remains
after delta_cycle, s = 5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值