对信号使用等待语句

Using wait statements with signals

是否可以在线程中使用带有输入信号的等待语句,即

void Thread::myThread(){
   while(1){
      wait(mySignal);
      if(mySignal == 1){
         //do stuff
      }
   }
}

其中 mySignalsc_in<int> mySignal;

我尝试 运行 类似的变体,但是当我尝试跨过 wait 语句时出现以下错误。

从我能够读到的关于 waits 的内容来看,它们似乎需要时间、事件和其他一些组合,但不是直接的信号。

假设我不能在等待中直接使用信号,我可以通过在构造函数中使线程敏感来实现相同的结果,即

SC_MODULE(myModule){
   sc_in<bool> mySignal;

   void myThread();

   SC_CTOR(myModule){
      SC_THREAD(myThread)
      sensitive << mySignal;
   }
}

void myModule::myThread(){
   while(1){
       wait(); //Wait for mySignal
        if(mySignal == 1){
           //do stuff
        }
    }
}

您的代码中存在轻微的不一致。 尝试将您的代码更改为:

SC_MODULE(myModule){
  sc_in<bool> mySignal;
  void myThread();
  SC_CTOR(myModule){
    SC_THREAD(myThread); //<< SC_THREAD is a macro.
    sensitive << mySignal;
  }
}

void myModule::myThread(){ //<< Did you mean this instead of Thread class
  while(1){
    wait(); //Wait for mySignal
    if(mySignal == 1){
      //do stuff
    }
  }
}