【问题标题】:Processor concurrent PCI read处理器并发 PCI 读取
【发布时间】:2012-06-08 19:39:39
【问题描述】:

我正在开发一个使用 LEON2 (SparcV8) 处理器的项目,我们有一条连接其他 FPGA 和处理器的 PCI 总线。

在此运行我们有一个使用 RTEMS 并用 C 编写的多任务应用程序。

现在我对处理器和 pci 架构一点也不熟悉,这就是为什么我来向你们寻求启发的原因。

问题是这样的:假设我们有一个 RTEMS 任务,它在 PCI 总线上执行内存读取。在我们的板上,PCI 访问大约有 2us 长。现在我的一位同事提出了一个问题,如果在 PCI 读取期间 RTEMS 的任务调度程序决定是时候触发另一个任务,并且该任务作业也执行 PCI 读取。 他的观点是,在任务切换之前执行的第一次 PCI 读取将被第二次 PCI 读取破坏,而第二次 PCI 读取将在执行第一个任务之前由第二个任务执行。

这种情况会发生吗?

我的观点是这个问题不应该发生,因为对我来说,PCI 读取就像任何其他内存读取一样,只是我们读取地址而不是读取例如地址 0x4000'0000 的本地 RAM 0xA020'0000 然后处理器将其转换为 PCI 总线上的地址并通过总线执行此读取。 当然这个读取比本地内存读取要长,但是这个过程在中间不应该是可中断的。 我的理解很可能完全错误,在这种情况下,请随时纠正我!

【问题讨论】:

    标签: concurrency pci rtems


    【解决方案1】:

    注意:我指的是 PCI Express (PCIe)。 PCI 可能有点不同 - 我不熟悉它。

    这取决于执行读取的 PCIe 核心(模块)。

    基本上,为了执行内存读取,PCIe 内核在标记的总线上发送一个 MemRd 数据包。数据本身以具有相同标签的完成数据包到达。所以读取没有“损坏”。

    现在,PCIe 内核可能会阻塞 CPU,直到收到 Completion 数据包,或者它可以在发送 MemRd 数据包后立即释放 CPU。在这种情况下,PCIe 内核将需要能够处理多个并发未决读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 2012-11-30
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多