DMA技术应用研究

2024-07-24

DMA技术应用研究(共3篇)

DMA技术应用研究 篇1

随着CPU的速度不断提高, 硬盘速度已是计算机系统速度的“瓶颈”, 于是各路计算机高手各显神通, 纷纷提出了提高硬盘速度潜能的妙计。但笔者发现90%以上的电脑使用者不懂DMA是什么, 他们误认为DMA是影响硬盘速度的因素。实际上, 硬盘使用DMA模式, 只是降低了硬盘对CPU的占用率, 提高了硬盘的外部传输率, 从而提高了整个系统的性能。本文从DMA的各个层面上给出详尽的阐述, 弥补了大多数参考书中对DMA描述不系统的缺陷, 以及对许多概念讲不明白的问题。

1 硬盘的传输模式

传输模式PIO和DMA。CPU与硬盘之间的数据传送, 有两条途径:一是用CPU来管理数据传送的PIO模式;二是用专门的芯片完成数据传送的DMA模式;UDMA模式是最新研发的一种DMA数据传输模式, 其数据传输率是PIO模式的2~8倍。

PIO模式和DMA的速率如表1所示。

2 影响硬盘速度的因素

影响硬盘传输速度的因素主要有如下几个方面:

2.1 转速。即指硬盘主轴电机的转动速度。

2.2 内部数据传输率。硬盘内部数据传输率是指硬盘磁头读取存储在盘片内的数据向硬盘高速数据缓存传送时的数据传输速率。

2.3 外部数据传输率。外部数据传输率也就是指数据从硬盘高速数据缓存通过硬盘接口传输至内存这过程中的数据传输率。

2.4 连续 (STR) 数据传输率和突发数据传输率 (Burst TR) , 突发数据传输率就是硬盘在突发情况下所能达到的数据传输率, 它一般略低于硬盘接口带宽, 由于它是一种突发状态下产生的数据传输率, 所以它并不能准确表示硬盘的速度快慢, 但STR连续数据传输率刚好与其相反, 它是表示硬盘速度快慢最真实的体现。STR并不是硬盘所有时刻数据传输率值的平均值, 而是磁头由盘片内圈至外圈连续寻道时的数据传输率。

2.5 接口速度。接口速度即指硬盘接口所能支持的最大带宽。

2.6 平均访问时间。平均访问时间是指硬盘在盘片上移动读写磁头至指定磁道寻找相应目标数据所用时间的均值。

2.7 缓存是硬盘与外部总线交换数据的场所。

3 DMA工作原理

什么是DMA?我们都知道, 计算机要工作, 都要由CPU发出指令, 各个部件才做出响应, 硬盘也是如此。假如现在CPU发出指令, 要从硬盘上读取512K的数据, 设CPU每条指令每次能从硬盘读取1K的数据, 那CPU要对硬盘发出512次指令。而且硬盘的速度又远远低于CPU, 这就造成CPU将长时间等待硬盘的数据, 这无疑大大浪费了CPU资源。怎么解决这个问题呢?DMA技术就应蕴而生了。它的工作原理很简单, 就是在主板的南桥芯片中增加了一个DMA控制器8237芯片。DMA控制器作用是当CPU要从硬盘上读取的数据时, CPU只要发出一条指令, 告诉DMA控制器要读取那一块的数据, 由DMA控制器来从硬盘上读取数据, 读取的数据暂时存放在硬盘的缓存 (Cache) 上, 当数据全部读到缓存上时, DMA控制器会向CPU发出一条反愦信息, 告诉CPU数据以读完。这时CPU再发第二条条读指令, 将缓存上的数据读到内存中。这样CPU只发出了两条指令, 就完成了这512K数据的读取。所以要清楚一点, DMA虽然没有提高硬盘速度, 但DMA可以大大减少CPU占有率, 从而提高计算机的整体性能。随着技术的发展, 计算机的速度越来越快。可是, 硬盘的速度却提高很少, 这时硬盘就成为“瓶颈”。为了解决这个问题, UDMA就诞生了。UDMA的全名叫Ultra DMA, 它是一种接口技术, 就是说UDMA只能提高硬盘的外部传输速率, 改变不了硬盘的内部传输速率。

4 DMA模式的设置方法

IDE驱动没装好的话, 你的硬盘厂家及型号就可能无法被Windows识别, 从而不能使用DMA功能;可你装好了IDE驱动以后, Windows默认关闭DMA模式。用户若使用DMA, 则必须把硬盘的传输模式设置为DMA。不同的操作系统设置方法不同, 本文仅就常用的几种操作系统说明其设置方法。WIN95:控制面板→系统→设备管理——磁盘管理→磁盘驱动器, →硬盘属性的DMA选项打开。windows98:“开始→设置→控制面板→系统→设备管理器→磁盘驱动器→硬盘类型→属性→设置→选项→DMA”。windows2000:用鼠标右键单击“开始→设置→控制面板→系统→硬件→设备管理器→IDE ATA/ATAPI控制器→Primary IDE Channel (second IDE channel) →属性→高级设置→传输模式→DMA (若可用) 。windows XP:”开始→控制面板→性能维护→系统→硬件→设备管理→IDE ATA/ATAP控制器→主要IDE通道 (次要IDE通道) →属性→高级设置→设备0 (设备1) →传送模式→DMA (若可用) 。系统提示:“修改次设置可能会在您的硬件上产生不希望出现的结果, 请洽询硬件供应商”。确认具有此项功能后按确定, 关闭所有对话框, 重启电脑即可。

5 DMA的使用问题

5.1 使用UDMA模式过程中出错的可能原因有:

a.硬盘本身芯片损坏, 主板、硬盘接口不良, 数据线损坏。b.操作系统有问题, IDE驱动和ULTRA驱动没有安装或不完善, BIOS相关选项设置不对。c.与非ATA/100/133的设备接在同一条数据线线上。

5.2 查看是否支持DMA的方法。

a.运行Ultra ATA Manager或者用HWINFO32查看UDMA模式;如果您装了主板的IDE和UDMA驱动, 也可从相应选项中查到, 它自动检测硬盘所支持的模式。b.Intel系列主板需安装IN-TEL APPLICATION ACCELERATOR即IAA。可以查看默认/当前状态下的传输模式。c.VIA系列主板, 需安装VIA四合一驱动程序包。如果模式仍不正确, 请下载威盛最新发布的IDE Miniport Driver, 安装后可以在“VIA Bus Master PCI IDE Utility”中清楚地看到硬盘当前所处的接口模式, 而且还可以手动切换要运用好。

参考文献

[1]林东和.急救硬盘不求人[M].北京:人民邮电出版社.

[2]胡嘉玺.硬盘实战手册[M].北京:中国铁道出版社.

[3]高云庆.硬盘保护技术手册[M].北京:人民邮电出版社.

[4]戴梅萼.微型机算机技术及应用[M].北京:清华大学出版社.

[5]扬晓云.计算机组装与维护教程[M].北京:电子工业出版社.

DMA技术应用研究 篇2

DMA(Direct Memory Access)是在处理器内核不干预情况下,所进行的后台高速数据传送机制,不占用DSP内核的处理时间[4],特别是二维DMA数据传输方式,能够将数据块按要求顺序传输和排列。以ADSP-TS201S(以下简称TS201)为例,针对外设到DSP内部的二维DMA数据传输方式进行探讨。

2 TS201的DMA传输

2.1 DMA简介与分析

TS201内核工作频率高达600MHz,是一款性能极高的静态超标量处理器[1]。专对复杂信号处理任务和通信结构进行了优化,其Tiger SHARC静态超标量结构使DSP每周期能够同时执行4条指令,24个16位定点运算和6个浮点运算。支持14个DMA通道,可完成片内存储器、片外存储器、存储器映射外设、链路口、主机处理器和其他处理器(如FPGA)之间的低开销高速传输。TS201片内的DMA控制器允许将数据传输作为一个后台任务执行,从而将处理器核释放出来,进行其他数字信号处理操作。在复杂信号处理系统中,特别是需要大量数据传输和搬移等操作的系统,采用DMA方式可以释放处理器内核,提高工作效率。

2.2 TS201的链路口DMA

TS201具有适合多DSP并行处理的突破性体系结构,除了多条独立的128位宽的数据总线外,具有4位宽的4个双向LVDS(Low Voltage Differential Signaling)链路口是其组成并行系统的关键。链路口可以直接由处理器核控制,也可以由DMA控制器控制,每个链路口的接收和发送都有指定的DMA通道。通过编程控制可以将链路口设置成4位并行或者1位的方式进行传输。

TS201链路口通过写TX缓冲寄存器完成数据的发送,读取RX缓冲寄存器数据完成数据的接收。只要TX移位寄存器为空,所有写TX缓冲区的数据都会拷贝到移位寄存器。当RX移位寄存器为空,或者RX缓冲器有多余的空间可以从RX移位寄存器接收完整的4个字的接收数据时,接收方才允许数据输入。RX缓冲器为空,有4个字的接收已经完成,才会从移位寄存器读入数据。如果RX缓冲器已满,会将数据拷贝至RX临时接收缓冲器内,一直保持到RX缓冲器为空。片上每个链路口都与2个DMA通道相连,分别进行数据的发送和接收。2个DMA通道都与内部寄存器、外部寄存器及其他链路口缓冲器相连接。链路口收发结构如图1所示。

2.3 二维DMA

TS201可以寻址和传输一个二维存储阵列,二维DMA将外部存储区的数据块作为一个数据阵列进行传输,这对制定矩阵操作的DSP算法十分有用[5]。存储器中的二维存储块可以通过链路口向外发送,由链路口接收的数据块也可以按照二维存储阵列的形式保存到存储器中。接收端存储器矩阵的大小可以与发送端的不同,只要两边所含的总字节数相等即可。二维DMA的优点如下:

(1)允许任意一个矩阵区域的数据交叉存取,以一种比较直观的处理顺序将数据放入存储区。

(2)能够实时高效地完成数据块存取。DMA控制器和DSP内核同时存取向不同存储块的操作均可在一个时钟周期内完成。例如,当DSP内核对一子存储块的数据进行操作时,DMA可以向另一个存储块存放数据。在某些条件下,甚至可以同时访问同一个存储块。

(3)允许有选择的数据传输,即只选择需要的输入数据块而不是全部数据。

(4)链式二维DMA可以在DSP内核不干预的情况下,进行无限制的多次DMA传输,并且每次操作的属性和I/O都可以不同。

(5)允许在一个激活的二维DMA链中插入高优先级的链式DMA,能实时实现DMA链的更新,继续二维DMA数据传输。

假设某系统中存在4种并行数据(如并行AD采集数据)的二维DMA传输,通过乒乓缓存的方式进行数据的转存,其数据块二维传输过程如图2所示。

图2中的Data0…Data3表示连续产生的4路并行数据,Data00…Data0n表示Data0的n个数据块。左侧表示为原始输入数据,例如AD数据经过数字滤波器后的4路并行数据。中间表示为高速缓存区内部的一维排列数据,右边表示经过二维DMA链路口传输后的二维数据块排列。从图2中可以看出,二维DMA传输将原来不适合DSP流水线操作的数据,实时高效地传输到DSP内部,并将数据块按照流水线要求顺序排列存储。

TS201的二维DMA控制和状态寄存器组,包括DMA控制寄存器、DMA状态寄存器、清除寄存器和传输控制寄存器等。通过对寄存器组编程可以允许相应DMA产生中断,整块数据传输完毕后,DMA将产生中断。中断发生在计数寄存器减至0,而且最后一个数据单元传输后。每个DMA控制块都有自身的中断,DMA中断会锁存在ILAT寄存器中,并由I-MASK寄存器打开。但需要注意的是,DMA中的计数器必须是减到零,向计数器寄存器写零并不会产生DMA中断。

DMA传输控制块寄存器是一个128位的4字组寄存器,含有DMA块传输所需的控制信息。在DMA发送时,4个字包含了原数据的地址,将要发送的字数量,地址增量和控制位。在DMA接收时,4个字包含了目的地址、将要接收的字数据数量、地址增量和控制位,其结构图如图3所示。

其中DI寄存器是一个32位的DMA索引寄存器,它包括了将要发送或者接收的数据的源地址或者目的地址,既可以指向内部寄存器和外部寄存器,也可以指向链路口。DX寄存器包含一16位的计数值和一个16位的修改量,计数值保存在高16位,修改量保存在低16位。如果使用二维DMA,则该寄存器保存的只是X方向的计数值和修改量。计数值和修改量均以32位字为单位。DY寄存器和DX寄存器结合使用,该寄存器保存了Y方向上的16位修改量和16位计数值。如果只是进行一维的DMA传输,就不需要设置该寄存器。DP寄存器包含了DMA传输的所有控制信息。22位-31位包含了所有控制信息,0位-21位包含了链式信息。

一般情况下启动二维DMA的步骤如下:

(1)保存TCB DI寄存器中的当前地址,启动一个DMA存储器周期。

(2)在该周期内,将TCB DX增量寄存器中的X修改量与TCB DI寄存器中的当前地址相加。

(3)TCB DX计数寄存器内容减1,若TCB DX计数寄存器值为零,则执行第4步。

(4)重新加载TCB DX计数寄存器值。

(5)DMA寄存器中Y维增量加到TCB DI寄存器中的当前地址。

(6)TCB DX计数寄存器内容减1。

(7)若TCB DX计数寄存器值等于零,则DMA传输结束,在再次设置TCB前,需禁止它。

3 二维DMA应用

3.1 硬件结构

系统硬件结构如图4所示。

模拟输入端采用两片18位的高速AD进行模数转换,每一片AD的数据分别经过FPGA中的4个FIR滤波器,产生的8路并行数据通过链路口二维DMA传送给DSP组,进行相应的数字信号处理。具体数据传输框图如图5所示。

3.2 软件设计

以图4中所示的FPGA与DSP0的L3链路口的二维DMA数据传输为例,假设数据块大小设定为1024点,其链路口数据排列顺序如表1所示。

上标(第一行及第一列)表示DSP0内部存储区内的偏移地址,每次DMA中断传输4×1024个数据,即每次传输4行1024列大小的数据,8次DMA中断即可获得一个时间片内的两个AD采集数据经过4个FIR滤波器后的全部数据,而且数据块按照DSP0的流水线顺序排列。

DSP0处理软件采用混合汇编方式进行设计[6],主要完成L3链路口的初始配置和接收中断函数的设计,首先进行DSP系统时钟和UART及FIR滤波器系统的初始设置,然后进行二维DMA寄存器控制和内存块的分配,开启硬件AD采集,等待二维DMA中断,进入中断获得最终数据。软件流程如图6所示。

二维DMA中断处理代码如下:

其中的L3r_data为数据存储区的首地址。

4 结语

介绍了TS201的二维DMA传输,结合实例说明了链路口二维DMA设置及应用方法,给出软件设置流程图及关键代码。实践证明二维DMA传输能够保证大量数据的可靠传输,同时又解决了多处理器之间共用总线所产生的I/O瓶颈问题,增强了多处理器系统的并行处理能力,提高了系统流水线运行效率。

摘要:采用二维DMA方式进行外设高速缓存区到DSP内核的数据块实时传输,以解决高速并行信号处理系统中的数据总线传输瓶颈问题[1]。在分析二维DMA方式控制原理的基础上,给出了具体操作步骤。结合工程实例,介绍二维DMA在并行信号处理系统中的应用,给出了DSP链路口数据传输的二维DMA控制软件流程图和关键代码。

DMA技术应用研究 篇3

DMA(Direct Memory Access)是计算机学中的一种内存访问技术[1]。它允许CPU内部的某些子系统(存储器和外设)可以独立的直接读写系统存储器而不需要CPU的干预。在同等程度CPU负荷下,DMA是一种快速的数据传送方式。现在越来越多的单片机采用DMA技术以提供外设和存储器间或者存储器之间的高速数据传输。但这些单片机中所包含的DMA控制器的数量是有限的,一般为1到2个。如果实际系统中需要多个DMA控制器的,那么这些单片机就显得无能为力了。

Nios Ⅱ系统是一个用户可配置的通用32位RISC嵌入式处理器,它是SOPC的核心。处理器以软核的形式实现,具有高度的灵活性和可配置性。Nios Ⅱ系统中所有外设以及外设控制器等都是以可配置的IP核形式出现的,用户可以根据需要重复多次添加。通过添加可配置的IP核的方式,可以在Nios Ⅱ系统中实现一个或者多个DMA控制器,以解决普通单片机中DMA控制器数量有限的问题。

1 DMA控制器的原理

1.1 DMA功能介绍

Nios Ⅱ中的DMA控制器包含2个Avalon-MM类型的主控制器端口(读端口和写端口),1个用于DMA控制Avalon-MM类型的从端口以及内部一些寄存器组所构成,其结构图如图1所示[2,3]。

DMA控制器可以将数据从源地址搬移到目的地址。源地址或者目的地址可以是存储器中的一段地址范围也可以是Avalon从控制器的外设。因此,在Nios Ⅱ系统中,存在3种类型的DMA操作,即存储器到外设,外设到存储器以及存储器到存储器。DMA控制器还具备流处理能力,允许固定或者可变长度的数据传输。当DMA操作结束时,DMA控制器发出中断(IRQ)请求。典型的DMA数据传输过程如下:

(1) CPU通过写控制端口配置DMA控制器用于数据传输;

(2) DMA控制器向CPU发出HOLD信号请求占用总线;

(3) CPU响应DMA控制器的请求,并让出总线,DMA控制器获得总线的控制权;

(4) DMA控制器读端口从源地址读数据,写端口向目的地址写数据,读写端口间利用FIFO缓存数据;

(5) 当传输完指定的数据时,DMA传输结束并向Nios Ⅱ CPU发出中断请求;

(6) CPU响应中断请求,DMA交出总线控制权。

1.2 DMA寄存器组描述

DMA控制器共有8个32位寄存器,其中5个为当前有效的寄存器,另外3个为以后扩展所用。寄存器的映射表如表1所示。

状态寄存器的每个状态位指示DMA控制器内部的详细情况。状态寄存器各位的含义如表2所示。

源地址寄存器指定DMA传输的数据源的起始地址;目的地址寄存器指定了DMA传输的目标数据区的起始地址;数据长度寄存器指定从读端口传输到写端口的字节数。如果是字传输,则数据长度寄存器的值需乘以4;若为半字传输,则需乘以2。主控制器写端口每写一个字节数据时,数据长度寄存器减1。当数据长度寄存器为0时,状态寄存器的LEN位置位;控制寄存器每个位设定DMA的工作方式。控制寄存器每个位的意义如表3所示。DMA传输的数据宽度用字节、半字、字、双字和4字位指定。这些位只能有一位设置为1。数据传输的宽度由2个读/写传输设备中传输宽度窄的一方决定。例如,将数据从16位的外部SDRAM存储器中搬移到内部32位的片内存储器时,传输数据宽度应该设置为半字。

1.3 软件编程

ALTERA 提供了HAL DMA设备的驱动程序[4,5],该驱动程序把DMA传输抽象成2种数据通道:发送数据通道和接收数据通道。当存储器从外设接收数据时,使用数据接收通道;当存储器向外设发送数据时,使用数据发送通道;当存储器间进行数据传输时,既要使用数据接收通道又要使用数据发送通道。与DMA发送数据通道相关的函数有alt_dma_txchan_open(),alt_dma_txchan_send(),alt_dma_txchan_space(),alt_dma_txchan_ioctl(),alt_dma_txchan_close();而与DMA接收数据通道相关的函数有alt_dma_rxchan_open(),alt_dma_rxchan_prerare(),alt_dma_rxchan_depth(),alt_dma_rxchan_ioctl()。

alt_dma_txchan_open()和alt_dma_rxchan_open()函数分别打开DMA控制器的发送数据通道和接收数据通道,获得DMA控制器的发送数据通道和接收数据通道的句柄,返回非0值表示成功。

调用alt_dma_txchan_send()函数产生一次DMA发送数据请求。其函数原型为int alt_dma_txchan_send(alt_dma_txchan dma,const void* from ,alt_u32 length, alt_ txchan_done* done ,void* handle)。调用此函数时,length字节长度的数据将从地址from处被发送。当发送结束时,函数返回值为非负则表示DMA传输成功,否则表示传输失败。当传输结束时,回调函数done将被执行,handle为函数done的参数。

DMA接收函数的用法与DMA发送函数的用法大致相同,其函数原型为 int alt_dma_rxchan_prepare(alt_dma_rxchan dma,const void* data ,alt_u32 length, alt_ txchan_done* done ,void* handle)。参数data表示DMA接收数据存放的起始地址。Length表示接收数据的长度,单位为字节。函数返回值为非负表示接收成功。当接收结束时,回调函数done将被执行,handle为函数done的参数。另外,与发送通道和接收通道相关的还各有2个函数。与发送通道相关的函数为alt_dma_txchan_space()和alt_dma_txchan_ioctl()。alt_dma_txchan_space()返回传送到DMA发送信道的发送请求数目。alt_dma_txchan_ioctl()则是执行了与器件相关的控制操作。与接收通道相关的函数为alt_dma_rxchan_depth()和alt_dma_rxchan_ioctl()。alt_dma_rxchan_depth()函数返回DMA接收通道的最大接收请求数。alt_dma_rxchan_ioctl()执行了与器件相关的控制操作。

2 DMA控制器应用举例

在软硬件的调试过程中,有时需要将内存中的一段数据通过串口打印出来,作为调试信息,这时就可利用DMA技术进行数据传输。图2为在SoPC Builder中构建的DMA传输的硬件连接图,实现了SDRAM到串口的数据传输[6,7]。

如下的程序实现了将SDRAM中以chr为起始地址的20个字节的数据通过DMA方式发送到串口。其实现的核心代码如下:

3 结 语

在某雷达信号网络化数字传输系统的研制中,将雷达信号接口单元与网络接口单元分别映射为Nios Ⅱ系统中的2个外设,利用外设间的DMA方式进行数据传输。实践证明,利用DMA方式进行数据传输,CPU可从繁重的数据传输工作中释放出来,提高了CPU进行数据处理的能力。

摘要:详细介绍了NiosⅡ系统中DMA控制器的基本原理,数据传输过程以及DMA控制器中各寄存器的作用。重点介绍了与DMA操作有关的API函数及其使用方法,并通过一个实例描述NiosⅡ系统中如何利用DMA方式将数据从SDRAM传输到串口。实践证明,在同等CPU开销的情况下,利用DMA技术可以将CPU从繁重的数据搬移操作中释放出来,从而提高CPU的数据处理能力。

关键词:NiosⅡ,DMA控制器,DMA技术,SDRAM

参考文献

[1]邹逢兴.计算机硬件技术及其应用基础[M].长沙:国防科技大学出版社,2001.

[2]周立功.SoPC嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2006.

[3]Altera Corporation.QuartusⅡhandbook,volume 4[M].[S.l.]:Altera Corporation,2005.

[4]Altera Corporation.QuartusⅡhandbook,volume 5[M].[S.l.]:Altera Corporation,2005.

[5]Altera Corporation.NiosⅡsoftware developer′s handbook[M].[S.l.]:Altera Corporation,2008.

[6]覃洪英.基于NiosⅡ的DMA传输及调试[J].石油仪器,2010(3):21-23.

上一篇:自动驾驶之劫下一篇:形象再解读