多个模块读取相同的 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.

但是您可以获得更好的实施细节想法。