作者:Sachin Gupta, Lakshmi Natarajan,赛普拉斯半导体
就像一个人体是由许多独立的系统构成一样,嵌入式系统也包含多种功能。连今天基本的移动电话也包括呼叫功能、信息功能、娱乐项目(例如游戏、音乐播放器、收音机、照相机、蓝牙连接,等等)。包括这么多不同的功能让这些系统变得相当复杂。
CPU处理算法和决策操作。大多数实时系统可能包括一个或多个处理器来处理这些它们之间的相互联系。一方面,我们增加更多的CPU来分担负荷;另一方面,CPU多了可能会浪费时间来在他们之间传输数据。
一种有效的实时系统是这样的,CPU用于处理大量任务以便于反应能力更快和功耗更低,同时还有足够的灵活性,以便支持将来的改进。为了减少CPU在数据传输上浪费时间,许多系统包括周边设备可做成无需CPU的数据交换。这个外设称为直接存储器存取(DMA)。
DMA有助于使CPU利用率更高,因此可以达到更高的系统吞吐量。早些时候,直接存储器存取的概念只限制到计算机,服务器等应用。由于现代的电子产品越来越复杂,需要传输大量的数据,DMA已成为嵌入式应用等方面不可分割的一部分。
近期,很多用于大型实时系统的高端处理器都集成了DMA,例如:汽车电子、航空电子、医疗等领域。DMA可以用于以下类型的数据传输,控制器不同类型也不同。
Memory到memory的传输
Memory 到外设的传输
外设倒memory的传输
外设到外设的传输
在一个系统中,数据传输可能占据了CPU时间的相当大的比例。让我们以一个汽车仪表盘系统为例。仪表盘有多个来自不同的子系统的数据显示。图1显示了仪表盘的系统与子系统。
图1:实时系统和子系统示例
各子系统把数据传输给控制显示的CPU。在这种情况下,控制显示的CPU必须接受大量的数据,并确定哪些子系统已经传递了数据,那些更新了需要显示的内容。如果CPU不得不处理接收数据、决策和显示更新,那么系统响应将会变慢,变成一个迟缓的系统。
为了改善系统性能,开发人员可以使用高频CPU。然而,这在功耗和成本上都会增加。直接存储器存取可让CPU从这些众多的数据传输操作中解脱出来。DMA处理所有的数据传输,让CPU处理所有的其他任务。上面的例子给出了为什么在复杂系统中更需要直接存储器的基本理由。
在一个处理器系统中,所有的外围设备包括memory都会使用公共总线连接到CPU。按照图2所示,这些总线就是外设(包括**)和CPU传输数据的路径。包括直接存储器存取的处理器对于总线来说有两个master—CPU和直接存储器存取。例如,一个简单的C语句:“a= b + c”,这涉及到CPU对memory数据的访问。CPU需要访问内存来读入变量b和c,就算之和,并更新内存里 “a”变量对应位置的值。当CPU需要访问内存时,它先向总线提出请求,然后总线处理请求,获得结果,然后通过总线更新memory对应位置的数据。
图2:实时系统和子系统示例
当DMA参与后,基于控制器特性,DMA可以访问任何一个外设。例如,假设在一个系统中,DMA用于把收到的UART的数据传送到memory。在这种情况下,直接存储器存取需要通过总线访问UART寄存器和内存。由于直接存储器存取和CPU都可以访问总线,通常会有仲裁机制来处理总线的访问。
让我们做一个简单的例子,从flash队列里读10字节的数据到SRAM队列里,我们可以看出使用DMA可以节约多少时间。当这个功能由CPU单独完成时,需要执行下列步骤:
1)复制Flash对应位置的值并存储到GPR(通用寄存器,例如:R0)
2)复制GPR值到累加器寄存器
3)复制累加器寄存器到SRAM相应位置
4)检查所有的字节是否复制完成
5)如果是,结束
6)如果不是,Flash指针加1
7)SRAM指针加1
8)回到第一步
一个简单的Flash到SRAM的复制就用了这么多CPU参与的指令周期。
如果使用直接存储器存取来做同样的例子,直接存储器存取硬件来处理这个过程,从而可以减少执行时间。图3显示了直接存储器存取处理的传输过程:
图3:DMA处理数据传输
直接存储器存取需要几个周期的初始化,然后直接存储器存取硬件自动处理的内存指针增加。DMA硬件也会检查数据是否传输完毕,信号是否完整。
使用直接存储器存取优势
CPU运行时间越长,功耗消耗越多。使用DMA承担了CPU部分工作从而降低功耗。
DMA与CPU并行工作,从而模拟了多处理器环境,有效地提高了CPU的带宽。
解放CPU意味着CPU会有更多的空闲时间。这使现有产品有能力为未来的产品升级作储备。
使用DMA实时系统示例
使用SoC的示波器是一个很好的例子,它让DMA完美地显示了其优势,明确表明使用DMA会产生很大的不同------主要是示波器需要没有中断地持续地产生波形。示波器可以这样来完成:用存储在查询表里的值更新数模转换器(DAC)的数据寄存器。如果处理器没有DMA,DAC数据寄存器由CPU完成更新,这使CPU浪费了指令周期来复制查询表的值到DAC.
DMA可以放过来运行:根据指定间隔把取样数据从memory反向复制到DAC。与CPU不同,直接存储器存取不需要中断驱动。这意味着不会产生象CPU那样的延时(因为CPU方案为高频中断)。随着波形频率和取样数量的增加,系统会消耗更多的CPU带宽,从而会有更大的功耗。当使用了直接存储器存取后, 只要波正常产生,CPU就不需要做任何事情。
如果我们看看功耗问题,一般来说CPU比直接存储器存取控制器消耗更多的功耗。当CPU不用时,它可以断电,这样就节省了静态和动态功率。因此,如果大部份的工作是传递数据,那么使用直接存储器存取有助于优化系统功耗。如果我们假设一个系统,其中一部分功能是要产生4个波形,如果没有DMA,那么CPU就要达到足够的带宽来实现这样功能,请见图4。功耗请见图5。
图4:CPU使用情况
Figure 5: Power consumption
图5:功耗 |