【问题标题】:DMA vs Load/Store UnitDMA 与加载/存储单元
【发布时间】:2022-11-04 04:45:54
【问题描述】:

据我了解,像 Arm 这样的 RISC 架构中的 LSU(加载/存储单元)处理加载/存储调用,而 DMA(直接内存访问)单元负责独立于处理器、内存到内存、外围设备到内存等移动数据.我感到困惑的是哪一个处理分支预测器或指令/数据缓存的指令或数据的预取。既然预取不是一条指令,而是一个加速处理器的自动过程,那么这项工作是由 DMA 处理的吗?我很困惑,因为 DMA 单元在 Arm Cortex-M85 技术参考手册中给出的示例设计中显示为外部单元 example design

【问题讨论】:

    标签: memory arm cpu-architecture risc


    【解决方案1】:

    基于对杰克回答的评论问题

    DMA通常特定于芯片而不是核心(所以不是手臂的东西)(如回答)。有许多内置 dma 的 mcus。例如,您可以设置某种数据传输,外围设备可以为您获取数据,而不是您必须在一定时间内服务中断或轮询.由于资源有限和/或连续数据传输,它可能有一个带有水印的缓冲区,如果你愿意或乒乓缓冲区,这让你有时间准备下一个缓冲区,而外围设备使用 dma 从当前缓冲区传输。

    不要假设 DMA 是免费的或快速的,很多人都会犯这个错误,这很大程度上取决于系统设计。有时 dma 传输发生在未使用的总线插槽期间,并且在大多数情况下是免费的。有些设计故意留下插槽,以防万一你在做 dma,我认为这很浪费,但我已经看到了。还有一些设计(甚至基于arm),dma接管总线一段时间,CPU本质上是停滞的,只要它需要接触该总线(获取或加载/存储)它就会停滞直到dma完成。

    问问自己,在您的设计中,您是否在外围设备中没有存储空间的外围设备的数据传入/传出,并且想要使用处理器使用的 sram?称它为 DMA 或只是一个仲裁器,但您需要设计您的 sram 接口,以便手臂或外围设备可以访问 sram。理想情况下,任何一个都没有太多的性能问题,或者让程序员选择一些速率,dma 只传输一次 X 时钟......

    或者您是否在外围设备上有存储以进行整个传输,但是将该传输移入/移出 sram 以供处理器运行会在处理器上消耗大量的加载/存储操作。这可能还需要 dma 传输功能,以便处理器可以触发并忘记并轮询或等待中断以知道传输已完成。

    ARM 文档只是为您提供 arm 总线,您的系统不一定是 arm 总线,您的 sram 没有 arm 总线,也没有大型系统上的 ddr 控制器,也没有外围设备等。这通常是由外围设备或 sram 驱动的,因此您已经将它们全部粘合在一起。那是dma通常居住的地方。如果外围设备可以是总线主控器,您将在逻辑中缓冲 ARM 传输(无论如何您都会)以及外围设备驱动,然后仲裁共享资源。

    资源推荐当然不是这个网站的目的,它是解决问题的快速方法。

    我很困惑您为什么要问这个问题,因为如果您有资源来实际构建芯片,那么这都是基本的芯片设计内容。并且构建带有手臂的东西(我猜除了教育 fpga 工作之外),这确实增加了成本。

    归根结底,您是否有不想给处理器带来过多负担的外围设备/传输,或者处理器由于总线时序、中断延迟等原因而无法处理?过重的负担会从软件团队的高级成员开始警告您,如果您尝试使用此设计投入生产,他们将不会编写软件来支持它并且它将失败。从历史上看,有一堵墙,但如今几乎所有的芯片初创公司都失败了,硅、硬件和软件团队都需要从芯片开始到通过模拟和仿真一起工作。

    了解你的合作伙伴允许给予和接受,如果你在这个上给我 DMA,那么你的 fifo 可能会更小或更慢,我希望能够出于各种原因轮询我的方式,但也有至少 50 的中断% 水印(或乒乓缓冲区)。如果您有兴趣,我可以为您提供一些逻辑,使该软件任务更容易,CRC 引擎或散列等对我来说微不足道,对您来说很耗时。等等。

    真正的底线是与您的软件和硬件(pcb,将部件与其他组件、包装、电气规格等)一起放在板上。在您对外围设备实施的想法/经验与软件/硬件团队的经验之间,很快就会关闭芯片内外所有外围设备的所有数据传输解决方案。如果您将其作为自己的引擎,则并非所有人都被认为想要 dma 或使用相同的引擎。

    【讨论】:

    • 感谢您提供详细而有见地的答案,这当然很有帮助。我要求来源的原因是我是一名应届毕业生(学士),我当然没有必要的资源来从一开始就构建性能高效的芯片,但无论如何我都在尝试。我想在这个领域工作并在这个领域提高自己,但我找不到很多与我自己相关的资源,我不想用我可能遇到的每一个小问题来打扰这里的人们。因此,如果您有任何材料/资源建议,我会非常满意。
    【解决方案2】:

    预取是 CPU 的工作之一。 DMA 完全绕过 CPU。没有什么可混淆的。

    由于 DMA 绕过了包括缓存在内的所有 CPU 组件,因此 DMA 调用大致按以下顺序发生:
    缓存刷新
    DMA 调用
    缓存失效

    【讨论】:

    • 我的问题的根源是,如果系统是没有虚拟内存或数据密集外设的微控制器或实时处理器(以便移动一个大量数据很少见)。我可以请你推荐任何我可以研究的资源来广泛研究这个主题吗?到目前为止,我主要通过阅读 Arm 技术参考手册来取得进步。他们很棒,但我认为我需要更深入的知识。
    猜你喜欢
    • 2019-12-21
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多