DMA与加载/存储单元



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

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

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

基于对Jake答案的评论问题

DMA通常是特定于芯片而非核心的(因此不是ARM的事情(如所回答的))。有许多MCU内置了DMA。因此,例如,您可以设置某种数据传输,外围设备可以为您获取数据,而不必在一定时间内为中断或轮询提供服务。由于资源有限和/或连续的数据传输,它可能有一个带有水印的缓冲区或乒乓缓冲区,这使您有时间准备下一个缓冲区,而外围设备使用DMA从当前缓冲区传输。

不要认为DMA是免费的或快速的。很多人都会犯这样的错误;它在很大程度上是基于系统设计的。有时DMA传输发生在未使用的总线插槽中,并且在大多数情况下感觉是免费的。有些设计故意留下插槽,以防您正在进行DMA。我认为这是浪费,但我已经看到了。还有一些设计(甚至基于ARM),DMA接管总线一段时间,CPU基本上处于停滞状态:只要它需要接触总线(获取或加载/存储),它就会停滞,直到DMA完成。

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

或者,您在外围设备上是否有用于整个传输的存储,但将传输移动到SRAM或从SRAM移动到处理器以进行操作会在处理器上消耗相当多的加载/存储操作?这可能还需要DMA传输能力,这样处理器就可以启动并忘记、轮询或等待中断来知道传输已经完成。

ARM文档只为您提供ARM总线,;您的系统不一定是ARM总线,您的SRAM通常没有ARN总线(在较大的系统上也没有DDR控制器),也没有外围设备等。这通常是由外围设备或SRAM驱动的,所以你已经把它粘在一起了。DMA通常住在那里。如果外围设备可以是总线主控器,则可以在逻辑中缓冲ARM传输(无论如何都可以)以及外围设备驱动的传输,然后仲裁共享资源。

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

我很困惑你为什么要问这个问题,因为如果你有资源真正制造芯片,这都是基本的芯片设计。而且用ARM构建一些东西(我想除了教育FPGA工作之外)确实会增加成本。

一天下来,您是否有不想给处理器带来过重负担的外围设备/传输,或者处理器由于总线定时、中断延迟等原因无法处理?负担过重的软件团队的高级成员会警告你,如果你试图用这种设计投入生产,他们不会编写支持它的软件,它就会失败。从历史上看,这是一堵墙,但现在几乎所有的芯片初创公司都失败了,硅、硬件和软件团队都需要从芯片诞生之初就通过模拟和仿真进行合作。

了解你的合作伙伴可以互让:如果你在这个问题上给我DMA,那么你的FIFO可能会更小或更慢;出于各种原因,我希望能够轮询它,但也要有一个至少有50%水印(或乒乓缓冲区)的中断。因此,如果你感兴趣,我可以为你提供一些逻辑,让这个软件任务变得更容易,一个CRC引擎或哈希,等等——对我来说很琐碎,对你来说很耗时。等等。

真正的底线是与你的软件和硬件(PCB,将零件与其他组件、包装、电气规格等一起放在板上)合作。在您对外围设备实现的想法/经验与软件/硬件团队的经验之间,它应该很快接近芯片内外所有外围设备的所有数据传输解决方案。并不是所有人都想要DMA,也不是所有人使用相同的引擎(如果你让它成为自己的引擎)。

最新更新