多个模块读取相同的 fifo
Multiples modules reading same fifo
假设多个模块不是同时读取,而是轮流读取,是否可以实例化多个模块从同一个 fifo 读取??
例如:
int _tmain(int argc, _TCHAR* argv[])
{
sc_fifo<int> PacketTx(24);
sc_fifo<int> PacketRx(20);
Transmit t1("Transmit");
t1.PacketRx(PacketRx);
t1.PacketTx(PacketTx);
Receive r1("Receive1");
r1.PacketTx(PacketRx);
r1.PacketRx(PacketTx);
Receive r2("Receive2");
r2.PacketTx(PacketRx);
r2.PacketRx(PacketTx);
sc_start();
return 0;
}
可以,但需要给模块添加同步信号。
对于更接近您要求的示例实现,可以在 Accellera SystemC 下载页面的 SystemC 源代码下获得。
下载“核心 SystemC 语言和示例”zip 文件:
- 解压缩文件。
- 导航到目录并查找“examples”目录。
以下示例更接近您的要求:
- examples/sysc/pkt_switch/
注意:此示例不使用 sc_fifo,但使用 sc_in/out 端口。
- examples/sysc/simple_bus/
注意:此示例展示了对 CPU 总线模型建模的用例。这个例子目前也没有使用 sc_fifo.
但是您可以获得更好的实施细节想法。
假设多个模块不是同时读取,而是轮流读取,是否可以实例化多个模块从同一个 fifo 读取??
例如:
int _tmain(int argc, _TCHAR* argv[])
{
sc_fifo<int> PacketTx(24);
sc_fifo<int> PacketRx(20);
Transmit t1("Transmit");
t1.PacketRx(PacketRx);
t1.PacketTx(PacketTx);
Receive r1("Receive1");
r1.PacketTx(PacketRx);
r1.PacketRx(PacketTx);
Receive r2("Receive2");
r2.PacketTx(PacketRx);
r2.PacketRx(PacketTx);
sc_start();
return 0;
}
可以,但需要给模块添加同步信号。
对于更接近您要求的示例实现,可以在 Accellera SystemC 下载页面的 SystemC 源代码下获得。
下载“核心 SystemC 语言和示例”zip 文件:
- 解压缩文件。
- 导航到目录并查找“examples”目录。
以下示例更接近您的要求:
- examples/sysc/pkt_switch/
注意:此示例不使用 sc_fifo,但使用 sc_in/out 端口。 - examples/sysc/simple_bus/
注意:此示例展示了对 CPU 总线模型建模的用例。这个例子目前也没有使用 sc_fifo.
但是您可以获得更好的实施细节想法。