DMA技术
目录前言1. DMA简介2. DMA 的核心工作流程与优势2.1工作流程2.2优势潜在挑战3. DMA 的三种工作模式前言DMADirect Memory Access直接存储器访问是计算机科学中一个至关重要的概念特别是在嵌入式系统、高频交易和高性能计算领域。简单来说它就像是给计算机雇了一个“搬运工”让 CPU 从繁琐的数据搬运工作中解脱出来但一般不用在FPGA中因为FPGA可以并行处理。但像ZynqPS PL中会用到DMA。本文将对DMA技术进行介绍。1. DMA简介DMA是一种允许外设如网卡、显卡、磁盘、ADC 等直接与系统内存RAM进行数据交换的机制而无需 CPU 的全程干预。在没有 DMA 的年代数据交换采用PIOProgrammed I/O模式CPU 发出读取指令。CPU 等待外设准备好数据。CPU 将数据读入寄存器。CPU 将数据从寄存器写入内存。该模式流程如图1-1所示。结果大量 CPU 时钟周期被浪费在单纯的“搬运”上。图 1-1PIO模式流程图2. DMA 的核心工作流程与优势2.1工作流程DMA 的操作通常分为四个阶段初始化CPU 通过设置 DMA 控制器的寄存器源地址、目的地址、传输数据量、控制字等来“下达任务”。请求DMA Request外设准备好数据后向 DMA 控制器发送请求信号。接管总线Bus ArbitrationDMA 控制器向 CPU 申请总线控制权Hold。CPU 完成当前总线周期后释放总线HLDA由 DMA 接管。数据传输DMA 直接控制地址总线和数据总线完成内存与外设间的数据移动。结束Interrupt传输完成后DMA 控制器向 CPU 发起中断告知“活儿干完了”。该流程如图2-1所示。图 2-1 DMA控制器的五个关键阶段将传统的CPU搬运方式和DMA架构方式做对比如图2-2所示。图 2-2 DMA工作原理对比2.2优势DMA搬运数据具有以下优势提升 CPU 效率CPU 可以并行处理逻辑运算而不是卡在 I/O 等待上。提高吞吐量数据路径更短减少了寄存器中转带来的延迟。低功耗在某些应用中可以让 CPU 进入睡眠模式只留 DMA 在搬运传感器数据。潜在挑战缓存一致性Cache CoherencyDMA 直接改写了内存但 CPU 的 Cache 里可能还是旧数据。这需要硬件维护一致性或软件进行Invalidate/Flush操作。总线竞争如果 DMA 占用总线太久会造成 CPU “饥饿”。3. DMA 的三种工作模式根据对总线占用方式的不同DMA 有以下三种常见模式模式描述优缺点停止 CPU 访问 (Burst Mode)DMA 一旦获得总线就连续传输完所有数据才释放。快但传输期间 CPU 被完全挂起实时性差。周期挪用 (Cycle Stealing)每次 DMA 只传输一个字/字节就归还总线等下一个请求再申请。对 CPU 影响小但总线申请开销大适合慢速外设。透明模式 (Transparent Mode)仅在 CPU 不使用总线如译码阶段时才偷偷传输。对 CPU 完全透明但电路设计极其复杂且传输效率不可控。以上就是本次笔记的内容。

相关新闻

【STM32CubeIDE】巧用链接脚本与NOLOAD属性:高效管理大数组与自定义内存段

【STM32CubeIDE】巧用链接脚本与NOLOAD属性:高效管理大数组与自定义内存段

1. 从Keil到CubeIDE:为什么你的大数组“炸”了? 如果你是从Keil或者IAR这类传统ARM开发环境转到STM32CubeIDE的开发者,估计都踩过这个坑:想把一个大数组,比如一个32MB的图像缓冲区,放到外部SDRAM的指定地址…

2026/7/6 0:15:21 阅读更多 →
图解拓扑排序:用DFS实现顶点排序的5个关键步骤(附Java代码)

图解拓扑排序:用DFS实现顶点排序的5个关键步骤(附Java代码)

图解拓扑排序:用DFS实现顶点排序的5个关键步骤(附Java代码) 如果你正在学习算法,尤其是准备技术面试,那么“拓扑排序”这个概念你一定绕不开。它不像排序算法那样直观,也不像动态规划那样充满挑战&#xff…

2026/7/5 16:34:26 阅读更多 →
信息学奥赛实战解析:矩阵乘法的核心算法与OpenJudge解题技巧

信息学奥赛实战解析:矩阵乘法的核心算法与OpenJudge解题技巧

1. 从零开始:矩阵乘法到底是什么? 如果你刚开始接触信息学奥赛,看到“矩阵乘法”这个词,可能会觉得它很高深,像是大学线性代数里的东西。别怕,我刚开始学的时候也这么想。但实战下来,我发现它在…

2026/7/3 12:18:04 阅读更多 →

最新新闻

LSTM 时间序列预测实战:基于3000期双色球数据,构建7维序列模型

LSTM 时间序列预测实战:基于3000期双色球数据,构建7维序列模型

LSTM时间序列预测实战:基于3000期双色球数据的7维序列建模引言:当深度学习遇见概率游戏每次双色球开奖时,那些在彩票站盯着走势图沉思的身影总让人好奇——是否存在某种数学规律能穿透随机性的迷雾?作为数据科学家,我们…

2026/7/6 0:15:20 阅读更多 →
Cartographer ROS Noetic 仿真建图实战:Gazebo+Rviz 完整流程与 3 个关键配置文件解析

Cartographer ROS Noetic 仿真建图实战:Gazebo+Rviz 完整流程与 3 个关键配置文件解析

Cartographer ROS Noetic 仿真建图实战:GazeboRviz 完整流程与 3 个关键配置文件解析当我们需要在仿真环境中验证SLAM算法时,Cartographer与Gazebo的组合提供了一个理想的测试平台。本文将深入探讨如何在ROS Noetic环境下,通过精心配置三个核…

2026/7/6 0:15:20 阅读更多 →
POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践

POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践

POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践在跨平台软件开发中,操作系统接口的差异一直是工程师面临的主要挑战之一。POSIX(Portable Operating System Interface)标准作为Unix-like系统的通用接口规范&…

2026/7/6 0:15:20 阅读更多 →
位置编码外推实战:从BERT 512到26万token的3种延拓策略

位置编码外推实战:从BERT 512到26万token的3种延拓策略

位置编码外推实战:从BERT 512到26万token的3种延拓策略当处理长文本序列时,BERT等Transformer模型面临一个根本性限制——位置编码的长度约束。传统BERT模型最多只能处理512个token,这严重制约了其在长文档理解、基因组分析等场景的应用潜力。…

2026/7/6 0:11:20 阅读更多 →
如何彻底告别重复点击:AutoClicker鼠标自动化完全指南

如何彻底告别重复点击:AutoClicker鼠标自动化完全指南

如何彻底告别重复点击:AutoClicker鼠标自动化完全指南 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker 还在为每天重复的鼠标点击任务感到疲惫吗…

2026/7/6 0:11:20 阅读更多 →
DQN 算法实战:CartPole-v0 环境 1000 轮训练实现 200 分满分

DQN 算法实战:CartPole-v0 环境 1000 轮训练实现 200 分满分

DQN算法实战:从零构建CartPole智能体的完整指南1. 环境准备与基础概念在开始构建DQN智能体之前,我们需要先理解几个核心概念。CartPole-v0是OpenAI Gym中的一个经典控制问题,目标是让小车上的杆子保持直立不倒下。这个环境有四个状态变量&…

2026/7/6 0:11:20 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻