PCIE 使用Producer/Consumer 排序模型,但 AXI4 使用不同的排序模型。AXI4 的读写通道是独立的。
例如,像这样的系统,
CPU <-> PCIE Controller <-> PCIE AXI Bridge <-> AXI4 with DEC and DDR slaves(DEC模块连接到AXI4从数据端口0和APB寄存器端口,DDR内存模块连接到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 互连端解决这个排序问题更好?