SystemC-敏感列表

SystemC- sensitivity list

我最近开始学习 SystemC,但 "SC_METHOD" 中的敏感度列表出现错误。我正在尝试实现一个 fifo,错误对应于代码的以下部分:

 SC_MODULE(fifo){
      ...   
      int rd_addr, wr_addr;
      ...
      void buffer_full();
      ...
      SC_CTOR(fifo){
           SC_METHOD(buffer_full);
           sensitive << rd_addr << wr_addr;
 }
};

我在编译代码时遇到错误,它抱怨敏感度列表。错误是

fifo_simple.h:32:22: error: invalid user-defined conversion from 'int' to 'const sc_core::sc_event&' [-fpermissive]

如果有人能告诉我敏感度列表有什么问题,我将不胜感激。我应该如何使 "buffer_full" 过程对 rd_addr 和 wr_addr.

中的变化敏感

我也尝试了以下语法来查看它是否适用于单位敏感度但仍然没有成功

    sensitive << rd_addr[0]

非常感谢

您不能对普通整数敏感,只能对端口(的事件)或普通事件敏感。

正如@jakub_d 在上面的评论中所建议的那样,尝试将 int 变量更改为信号端口(尽管我建议使用输入而不是输出端口):

SC_MODULE(fifo)
{
      ...
      // use ports instead of plain integers
      sc_in<int> rd_addr, wr_addr;
      ...
      void buffer_full();
      ...
      SC_CTOR(fifo)
        : rd_addr("rd_addr") // name your ports
        , wr_addr("wr_addr")
      {
           SC_METHOD(buffer_full);
           sensitive << rd_addr << wr_addr; // sensitivity works now
      }
};

使用您的 FIFO 时,您需要将匹配的 sc_signal<int> 实例绑定到这些地址端口:

int sc_main(int, char*[]) {
  sc_signal<int> rd_addr_s("rd_addr_s"), wr_addr_s("wr_addr_s");
  fifo fifo_i("fifo_i");

  // bind signals to ports
  fifo_i.rd_addr(rd_addr_s);
  fifo_i.wr_addr(wr_addr_s);
  // ...
  return 0;
}