Я конвертирую часть своего кода из SC_THREAD в SC_METHOD.У меня вопрос, нужно ли прекратить использование класса sc_fifo?Я понимаю, что SC_METHOD не должен вызывать sc_fifo.write (), потому что это использует вызов ожидания, который не разрешен для функций, которые не могут быть приостановлены.Однако sc_fifo предоставляет неблокирующие версии различных функций, и потенциально я мог бы использовать их вместо этого.В некоторой документации, которую я прочитал, указано, что вы никогда не должны использовать sc_fifo из SC_METHOD вообще, но не предоставили обоснования.
Вот пример кода, который я сейчас использую.
class Example : public sc_module {
public:
sc_fifo<int> myFifo;
sc_in<bool> clock_in;
SC_HAS_PROCESS(Example);
// constructor
Example(sc_module_name name) : sc_module(name) {
SC_METHOD(read);
sensitive << clock_in;
}
void read() {
int value = -1;
bool success = myFifo.nb_read(value);
if (success) { cout << "Read value " << value << endl; }
else { cout << "No read done but that's okay." << endl; }
}
};
int sc_main(int argc, char* argv[]) {
sc_clock clock("clock");
Example example("example");
example.clock_in(clock);
sc_start(10, SC_NS);
return 0;
}
Это не вызывает ошибок, хотя я вызываю функцию sc_fifo из SC_METHOD.Это плохая политика для использования nb_read () изнутри SC_METHOD?Если так, почему?