SystemC- список чувствительности - PullRequest
1 голос
/ 23 мая 2019

Я недавно начал изучать 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]

Большое спасибо

1 Ответ

2 голосов
/ 23 мая 2019

Вы не можете быть чувствительными к простым целым числам, только к (событиям) портов или обычным событиям.

Как предложено @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;
}
...