首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AXI4如何支持PCIE生产者/消费者订购模型?

AXI4如何支持PCIE生产者/消费者订购模型?
EN

Stack Overflow用户
提问于 2020-06-16 01:08:42
回答 1查看 324关注 0票数 0

PCIE使用生产者/消费者订购模型,而AXI4使用不同的订购模型。AXI4 4的读写通道是独立的。

例如,像这样的系统,

CPU <-> PCIE控制器<-> PCIE AXI桥<-> AXI4与DEC和DDR从站(DEC模块连接到AXI4从数据port0和APB寄存器端口,DDR存储模块连接到AXI4从数据port1)

CPU执行两个操作,

代码语言:javascript
复制
1.CPU writes data to DDR
2.CPU writes DEC APB register to start DEC

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

这个排序问题可以通过编写数据然后按如下方式读取数据来解决,

代码语言:javascript
复制
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互连端解决这个订购问题更好?

EN

回答 1

Stack Overflow用户

发布于 2020-06-17 13:18:44

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62399435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档