【问题标题】:How can AXI4 support PCIE Producer/Consumer ordering model?AXI4 如何支持 PCIE Producer/Consumer 订购模型?
【发布时间】:2020-06-16 01:08:42
【问题描述】:

PCIE 使用生产者/消费者排序模型,但 AXI4 使用不同的排序模型。 AXI4的读写通道是独立的。

例如,像这样的系统,

CPU PCIE Con​​troller PCIE AXI Bridge AXI4 with DEC and DDR slaves (DEC module is connected to AXI4 slave data port0 and APB register port, DDR memory module is connected到 AXI4 从数据端口1)

CPU 执行以下两个操作,

1.CPU writes data to DDR
2.CPU writes DEC APB register to start DEC

由于 PCIE 内存写入(可预取和不可预取)已发布,即没有响应,PCIE AXI Bridge 将执行上述操作两个操作连续使用相同的 ID 但不等待 BRESP。在数据到达 DDR 之前,DEC 可能已经看到 APB 寄存器写入并开始读取数据,因此数据可能是旧的和无效的。

这个排序问题可以通过写入数据然后读回来解决,如下所示,

1.CPU writes data to DDR
2.CPU read the same data back
3.CPU writes DEC APB register to start DEC

但效率低下。

那么当 PCIE 和 AXI4 连接时,我们如何解决这个排序问题呢?是在 PCIE 端还是 AXI 互连端解决这个排序问题更好?

【问题讨论】:

    标签: pci-e axi4


    【解决方案1】:

    当我查看 Linux Kennel 代码设备驱动程序时,我看到了同样的问题,先写入这个寄存器,然后写入这个,但我怎么知道第一个已经完成?在很多情况下,驱动程序将简单地读取相同的寄存器或应该显示副作用的寄存器。例如,可以通过一个寄存器写入来重置 nvme 设备,但在另一个寄存器读取返回特定值之前,您不知道操作已完成。注意 nvme_enable_ctrl 函数,它写入 32 reg 然后立即停止,直到读取返回特定值。因此,我建议遵循过去开发的决定,而不是包装自己的解决方案。

    https://elixir.bootlin.com/linux/latest/source/drivers/nvme/host/core.c#L2169

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      相关资源
      最近更新 更多