我最近开始学习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]
非常感谢
答案 0 :(得分:2)
您不能对纯整数敏感,而只能对端口的事件或纯事件敏感。
如@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;
}