SystemC语法小结(三)
在 SystemC 中,SC_THREAD 和 SC_CTHREAD 看上去都像“可以在进程体里写 wait()”的线程,但它们在建模时序、复位、灵敏度以及可综合性上有本质区别。
1. 注册方式 & 隐式/显式敏感性
SC_THREAD:
SC_THREAD(prod);
sensitive << clk.pos() << req_event; // 必须手动写敏感列表
dont_initialize(); // 若不想在 time 0 调用
- 你可以把它对任意事件(event、signal 边沿、time)敏感
- 默认在 time 0 被调用一次(除非
dont_initialize()
) wait()
可以带事件、时钟边沿或时间延迟
SC_CTHREAD:
SC_CTHREAD(sync_proc, clk.pos()); // 隐式对 clk.pos() 敏感
reset_signal_is(rst_n, false); // 声明复位信号
- 只能对一个时钟边沿敏感,隐式完成,不用也不能写
sensitive
- 默认在 time 0 不自动执行,直到第一个时钟边沿到来
wait()