基于对杰克回答的评论问题
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 或使用相同的引擎。