内存储器是如何与外层数据交换次数的?交换次数又回产生什么影响?外层数据代表什么意思,是外存吗?

内存储器是如何与外层数据交换次数的?交换次数又回产生什么影响?外层数据代表什么意思,是外存吗?,第1张

1 DMA概述

直接内存存取(DMA)对计算机系统是非常重要的。它可以使CPU在运行指令的同时,系统能实现从外部存储器或设备中存取数据,也可以在CPU不参与的情况下,由专用的DMA设备存取数据。

对于浮点DSP芯片来讲,DMA的作用更是重要。众所周知,DSP芯片主要是面向实时的信号处理,其核心的运算部件具有很高的运算速度,常以MFLOPS(每秒百万次浮点运算)来衡量。ADSP2106x为120MFLOPS,但该速度是以存储在芯片内部存储器中的程序和数据为前提的。在DSP内部往往采用多总线的哈佛结构,数据总线和程序总线相互独立,即指令的存取和数据的存取并行不悖;另外在ADSP2106x内部还有各种接口总线,用以提高数据的流通能力。但在芯片的外部,所有的总线都合并在一起了。因此为了发挥DSP核心运算单元的高速运算能力,首先必须把世此程序和数据传输到芯片的内存中,这通常需要DMA *** 作来实现。

另一方面,DSP系统总要与各种外部信号打交道,它从外部输入数字信号,经过各种算法的处理后,再输出给其他设备。不仅如此,对于浮点DSP系统,数据的输入和输出常常是连续不断的。试想,如果用DSP的核心部件来完成数据的输入和输出,它高速的运算能力又如何发挥得出来呢?所以,浮点系列的DSP芯片大都把DMA控制部分直接集成到了芯片上,用DMA来完成数据的输入和输出。

高效的DSP系统通常采用图1所示的结构。在内存中开辟出四块缓存区,两个作为输入缓存,两个作为输出缓存,用来实现输入、输出的乒乓切换。核心处理单元直接从输入缓存中取数运算,然后把运算结果写入输出缓存;而数据从外部接口的输入和输出则完全由DMA来实现,不需核心处理单元的参与。只要核心处理单元的运算速度和DMA的数据率满足要求,图1所示的结构就可以完成连续的数据流输入和输出。当然,从外部看,数据的输入和输出是连续的,但在芯片内部却是分段处理的。分段处理虽然带来一些误差,但只要缓存的数据足够长,就可以使误差降到允许的范围。因为间隔越长,前后数据间的相关性越小,相互间的影响就越小,故分段处理是可行的。由于分段处理,也给DSP芯片的结构带来了一个重要影响,那就是尽可能地增加其内部存储器的容量。对于ADSP21060,其内部的SRAM容量达4Mbit,可以满足大多数分段处理的需要。

下面首先对ADSP2106x中的DMA做概要介绍,然后对几种典型的DMA *** 作进行详细分析。

2 ADSP2106x中的DMA

ADSP2106x中的片内DMA控制器可以同时控制10个通道的DMA,完成下列类型的数据传输 *** 作:

·内存外存或外部存储器映射设备

·内存其他ADSP2106x的内存

·内存主机接口

·内存串行口

·内存Link口

·内存外部设备

·外存外部设备

丰富的数据流向可以使ADSP2106x实现对各种外设的接口;另外,由于ADSP2106x的内存是双口SRAM,因此在进行上述DMA *** 作的同时,核心处理单元仍可以读写内存,使DMA *** 作与内部运算处理达到高度的并行性。当然,应尽量避免二者同时对同一内存地址进行读写。

每个DMA通道都有一个(或两个)用FIFO实现的数据缓存器,最大的缓冲深度为6级,用以提高DMA数据传输率。所有的DMA数据传输都是通过这10个数据缓存器来完成的,这些缓存器如表1所示。其中通道1、3、6、7都是两个缓存器共用一个DMA通道。所有数据缓存器作为I/O寄存器被映射到内存的前256个地址中。

DMA的编程是通过内部核心处理单元或外部主机对片内有关的I/O寄存器设置来实现的,这些I/O口寄存器也被映射到内存的前256个地址上。与DMA *** 作有关的I/O寄存器除搜轮迅了前面的数据缓存器外,桐让主要还包括:

·DMA控制寄存器:DMAC6~9,LCTL,STCTL0~1,SRCTL0~1。

·地址-计数寄存器:II0~9,IM0~9,C0~9,EI6~9,EM6~9,EC6~9。

·链式 *** 作指针寄存器:CP0~9。

·二维 *** 作寄存器(也可作DMA通用寄存器):GP0~9,DA0~5,DB0~5。

·DMA状态寄存器:DMASTAT。

DMA设置传输过程一般如下:

(1)设置对应通道的地址-计数寄存器。

(2)设置对应通道的DMA控制寄存器,并将其中的DMA使能位设为有效。

(3)开始DMA数据传输。

(4)DMA传输结束后,产生对应的中断,程序对中断进行处理。

3 几种常用的DMA *** 作

在基于ADSP2106x的DSP系统的开发过程中,最常用到以下几种DMA *** 作:内存与外存、内存与主机、内存与外设、内存与Link口间的数据交换。

3.1 内存与外存间的DMA

内存与外存间的DMA传输可用DMA通道6~9这四个通道中的任一个。这里用一个例子来说明,假如要把内存地址0x26000~0x263ff中的1024个数用DMA通道6传送到外存0x400000~4003ff中,可用下面的编程来实现:

/*设置内存地址-计数寄存器*/

R0=0x26000

DM(II6)=R0 /*设置内存起始地址*/

R0=1

DM(IM6)=R0 /*设置内存地址增加值*/

R0=1024

DM(C6)=R0 /*设置内存读数次数*/

/*设置外存地址-计数寄存器*/

R0=0x400000

DM(E16)=R0 /*设置外存起始地址*/

R0=1;

DM(EM6)=R0 /*设置外存地址增加值*/

R0=1024;

DM(EC6)=R0; /*设置外存写数次数*/

R0=0x0205

DM(DMAC6)=R0;/*设置DMA控制寄存器

DMAC6*/

/*设置为Master和从内存读数方

式,并使能DMA*/

/*DMA通道6开启DMA传数 *** 作*/

这里需要说明两点:(1)I/O寄存器不能用立即数来直接赋值,而要通过通用寄存器R0~15或USTAT0~1来赋值;(2)在ADSP2106x中,由于数据的宽度有8、16、32和48几种方式,通过DMA传输时,内存和外部接口上的宽度可以不同,因此对应的读写次数可能不同,故内部计数器和外部计数器要分别设置。

对于外部存储器映射设备,其接口地址是固定的,此时内存与该外设间DMA的编程更加简单。比如某外设的地址设在0x400000,要把内存0x26000~0x263ff中的1024个数用DMA通道6传送到该外设接口上,只需把上面程序中的EM6设为0即可。

3.2 内存与主机间的DMA

在ADSP2106x芯片上包含了一个主机(host)接口,可以使其方便地与通用16位或32位计算机相连接,此时,通用计算机就作为ADSP2106x的主机,它可对ADSP2106x的片内存储器进行访问。通常情况下,为了减少主机对ADSP2106x寻址的地址线根数,以降低硬件复杂性,主机往往只对ADSP2106x的I/O寄存器(有256个)寻址,寻址的地址线只需8根1。BittWare公司的ADSP2106xEZ-LAB开发板即采用了此种方式。在这种情况下,主机与ADSP2106x内存间的数据交换大多是通过DMA完成的。下面通过运行在微机上的一段C语言程序来说明,此时EZ-LAB板插入微机的ISA总线插槽上,微机作为ADSP2106x的主机,ADSP2106x的I/O寄存器可由微机通过ISA总线上的I/O口来访问。该程序把数据d[1024]通过DMA通道6加载到ADSP2106x内存0x26000~0x263ff中。具体程序如下:

#injclude"conio.h"

#include "def21060.h" /*ADSP I/O寄存器地址定义文件*/

#include :stdio.h"

#define ADDR 0X402 /*定义ADSP地址线对应

的ISA总线I/O口地址*/

#define DATA 0x404 /*定义ADSP数据线对应

的ISA总线I/O口地址*/

main()

 {int n,d[1024]

/*设置ADSP中DMA通道6的地址-计数寄存器及控制寄存器*/

outpw(ADDR,II6) /*寻址起始地址寄存器II6*/

outpw(DATA,0x6000);/*设置II6的低16位*/

outpw(DATA,0x2); /*设置II6的高16位*/

outpw(ADDR,IM6) /*寻址地址增加寄存器IM6*/

outpw(DATA,1) /*设置IM6的低16位*/

outpw(DATA,0) /*设置IM6的高16位*/

outpw(ADDR,C6) /*寻址计数寄存器C6*/

outpw(DATA,1024) /*设置C6的低16位*/

outpw(DATA,0) /*设置C6的高16位*/

outpw(ADDR,DMAC6) /*寻址DMA控制寄存器

DMAC6 */

outpw(DATA,0x41)/*设置DMAC6的低16位*/

outpw(DATA,0) /*设置DMAC6的高16位*/

/*ADSP的DMA通道6设为16/32位模式,

并开启就绪,等待微机传数*/

/*微机向DMA通道6的数据缓存器EPB0中连续写入数据d[.]*/

outpw(ADDR,EPB0) /*寻址DAM通道6的数

据缓存器EPB0*/

for(n=0n<1024n++)

 {outpw(DATA,d[n]); /*写数据d[n]*/

outpw(DATA,0) /*高16位写0*/

}

}

对以上程序需要说明的有两点:(1)ADSP2106x的地址线和数据线是通过ISA总线上两个I/O口地址(ADDR和DATA)来访问的;(2)ISA总线为16位,而ADSP2106x的I/O寄存器和内存的数据都为32位,因此微机要用高、低16位分别传输,同时把DMA6设置为16/32位模式。关于EZ-LAB的详细情况可参见文献[1]。

3.3 内存与外设间的DMA

对于某些外部设备,其输入或输出是与某个外部时钟同步的,而与ADSP2106x的读写时钟不相干。当这样的设备与ADSP2106x接口时,通常的做法是在接口端加FIFO或双口RAM,把ADSP2106x的读写与该外设的输入或输出时钟隔离开来。但ADSP2106x芯片本身提供了更灵活、更高效的方式,即DMA通道7和8的握手DMA方式(Handshake),可以完全省去FIFO或RAM,其典型应用电路如图2所示。

图中以8位数据线宽度为例,以DMA通道7为输出,对应的握手信号为DMAR1和DMAG1;以DMA通道8为输入,对应的握手信号为DMAR2和DMAG2。整个电路只用到了最常用的74273和74374芯片,外设的读写时钟最高可达40MHz。在这种握手DMA方式中,外设不占用ADSP2106x的外部地址总线。关于上面电路的详细情况,在此不再赘述。

下面给出设置握手DMA的对应程序。这里假设要从外设2中输入1024个数据到内存0x26000~0x264ff中,则需对DMA通道8进行如下编程:

/*设置内存地址-计数寄存器*/

R0=0x26000

DM(II8)=R0/*设置内存起始地址*/

R0=1;

DM(IM8)=R0; /*设置内存地址增加值*/

R0=1024;

DM(C8)=R0; /*设置内存写数次数*/

/*设置外存计数寄存器*/

R0=1;

DM(EM8)=R0; /*设置外存地址增加值*/

R0=1024;

DM(EC8)=R0; /*设置外存输入次数*/

R0=0x401;

DM(DMAC8)=R0; /*设置DMA控制寄存器

DMAC8*/

/*设置为Handshake和向内存写数方式,并使能DMA*/

/*DMA通道8开启,等待外设的输入时钟,每接 收到一个时钟,输入一次*/

对上面程序需要说明的是:虽然电路中没有用到外存地址,但外存计数寄存器EM7和EC7也必须设置。

如果要向外设1中输入数据,则需要对DMA7进行类似的编程。

3.4 内存与Link口间的DMA

ADSP2106x具有很强的并行工作能力,不需加任何外部仲裁电路,6片ADSP2106x和一个主机就可以很方便连在一起并行工作。它们之间的数据交换既可以通过共享的外部数据、地址总线来实现,也可采用点对点的Link口来完成。6个Link口是ADSP2106x芯片所独有的高速数据接口;每个Link口包含4根数据线、一个时钟线和一个应答信号线,最高的数据传输率为40Mbyte/s。

用Link口进行片间数据交换,通常情况下都要采用DMA方式,这样才能将其优点充分发挥。在使用DMA方式进行Link口通讯时,除了要进行地址-计数寄存器的设置外,还要进行传输速率选择寄存器(LCOM)和缓存-口配对寄存器(LAR)的设置;最后设置DMA控制寄存器LCTL,并开启DMA *** 作。

假设有两片ADSP2106x,它们相互间用Link5口相连;我们要把第一片内存0x26000~0x263ff中的1024个数用Link5口传输到第二片的内存0x23000~0x23fff处,则两片ADSP2106x的DMA编程设置如下:

/*第一片*/

r0=0X3f000

dm(LCOM)=r0; /*把Link口设为2x clock*/

r0=0xfff7f;

dm(LAR)=r0; /*link port5--> link buffer2,

对应DMA通道4*/

r0=0X26000;

dm(II4)=r0; /*设置起始地址*/

r0=1024;

dm(C4)=r0; /*设置读数次数*/

r0=1;

dm(IM4)=r0; /*设置地址增加值*/

r0=0Xb00

dm(LCTL)=r0/*enable output DMA*/

/*第二片*/

r0=0X3f000;

dm(LCOM)=r0; /*把Link口设为2x clock*/

r0=0xfff7f;

dm(LAR)=r0/*link port5-->link buffer 2,对

应DMA通道4*/

r0=0x23000;

dm(II4)=r0; /*设置起始地址*/

r0=1024;

dm(C4)=r0; /*设置读数次数*/

r0=1;

dm(IM4)=r0; /*设置地址增加值*/

r0=0x300;

dm(LCTL)=r0; /*enable input DMA*/

对于上面的两段程序,应分别加载到两片ADSP2106x中。需要说明的是:Link Buffer 2对应DMA通道4。如果把其他的Link Buffer与Link口5配对,则需设置与该Buffer对应的DMA通道。

ADSP2106x中DMA *** 作功能强大,形式多样,除了本文所介绍的部分外,还有链式DMA、二维DMA等,因此要全部掌握并熟练应用是有一定难度的。通过对各种DMA的应用,可以使数据进出芯片变得更加流畅,也可以使其核心处理单元的运算能力发挥到极致

我也不懂,以下是我搜集的,希望对你有帮助

DSP芯片,也称数字信号处理器,是一种特别适合于进行数字信号处理运算的微处理器具,其主机应用是实时快速地实现各种数字信号处理算法。根据数字信号处理的要求,DSP芯片一般具有如下主要特点:

(1)在一个指令周期内可完成一次乘法和一次加法;

(2)程序和数据空间分开,可以同时访问指令和数据;

(3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;

(4)具有低开销或无开销循环及跳转的硬件支持;

(5)快速的中断处理和硬件I/O支持;

(6)具有在单周期内 *** 作的多个硬件地址产生器;

(7)可以并行执行多个 *** 作;

(8)支持流水线 *** 作,使取指、译码和执行等 *** 作可以重叠执行。

当然,与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用毕梁和开发提供了便利条件。

单片机的应用领域 :

1. 单片机在智能仪器仪表中的应用;

2. 单片机在工业测控中的应用;

3. 单片机在计算机网络和通讯技术中的应用;

4. 单片机在日常生活及家电中的应用;

5. 单片机在办公自动化方面。

DSP比单片机贵

你说的是其中的一部分知识,是DSP处理的信息的原理。

要向学习DSP的硬件开发,还要学习微机原理,由单片机系统的设计经验最好。

还有就是DSP的开发环境,也就是CCS,要掌握常用的编程语言,有汇编语言和C语言的编程经验最好.

首先要了解DSP的特点。

数字信号处理相对于模拟信号处理有很大的优越性,表现在精度高、灵活性大、可靠性好、易于大规模集成等方面。随着人们对实时信号处理要求的不断提高和大规模集成电路技术的迅速发展,数字信号处理技术也发生着日新月异的变革。实时数字信号处理技术的核心和标志是数字信号处理器。自第一个微处理器问世以来,微处理器技术水平得到了十分迅速的提高,而快速傅立叶交换等实用算法的提出促进了专门实现数字信号处理的一类微处理器的分化和发展。数字信号处理有别于普通的科学计算与分析,它强调运算处理的实时性,因此DSP除了具备普通微处理器所强调的高速运算和控制功能外,针对实时数字信号处理,在处理器结构、指令系统、指令核拆流程上具有许多新的特征,其特点如下:

(1) 算术单元

具有硬件乘法器和多功能运算单元,硬件乘法器可以在单个指令周期内完成乘法 *** 作,这是DSP区别于通用的微处理器的一个重要标志。多功能运算单元可以完成加减、逻辑、移位、数据传送等 *** 作。新一代的DSP内部甚至还包含多个并行的运算单元。以提高其处理能力。

针对滤波、相关、矩阵运算等需要大量乘和累加运算的特点,DSP的算术单元的乘法器和加法器,可以在一个时钟周期内完成相乘、累加两个运算。近年出现的某些DSP如ADSP2106X、DSP96000系列DSP可以同时进行乘、加、减运算,大大加快了FFT的蝶形运算速度。

(2) 总线结构

传统的通用处理器采用统一的程序和数据空间、共享的程序和数据总线结构,即所谓的冯•诺依曼结构。DSP普遍采用了数据总线和程序总线分离的哈佛结构或者改进的哈佛结构,极大的提高了指令执行速度。片内的多套总线可以同时进行取指令和多个数据存取 *** 作,许多DSP片内嵌有DMA控制器,配合片内多总线结构,使数据块传送速度大大提高。

如TI公司的C6000系列的DSP采用改进的哈佛结构,内部有一套256位宽度的程序总线、两套32位的数据总线和一套32位的DMA总线。ADI公司的SHARC系列DSP采用超级哈佛结构(Super Harvared Architecture Computer),内部集成了三套总线,即程序存储器总线、数据存储器总线和输入输出总线。

(3) 专用寻址单元

DSP面向数据密集型应用,伴随着频繁的数据访问,数据地址的计算也需要大量时间。DSP内部配置了专用的寻址单元,用于地址的修改和更新,它们可以在寻址访问前或访问后自动修改内容,以指向下一个要访问的地址。地址的修改和更新与算术单元并行工作,不需要额外的时间。

DSP的地址产生器支持直接寻址、间接寻址 *** 作,大部分DSP还支持位反转寻址(用于手氏运FFT算法)和循环寻址(用于数字滤波算法)。

(4) 片内存储器

针对数字信号处理的数据密集运算的需要,DSP对程序和数据访问的时间要求很高,为了减小指令和数据的传送时间,许多DSP内部集成了高速程序存储器和数据存储器,以提高程序和数据的访问存储器的速度。

如TI公司的C6000系列的DSP内部集成有1M~7M位的程序和数据RAM;ADI公司的SHARC系列DSP内部集成有0.5M~2M位的程序和数据RAM,Tiger SHARC系列DSP内部集成有6M位的程序和数据RAM。

(5) 流水处理技术

DSP大多采用流水技术,即将一条指令的执行过程分解成取指、译码、取数、执行等若干个阶段,每个阶段称为一级流水。每条指令都由片内多个功能单元分别完成取指、译码、取数、执行等 *** 作,从而在不提高时钟频率的条件下减少了每条指令的执行时间。

(6) DSP与其它处理器的差别

数字信号处理器(DSP)、通用微处理器(MPU)、微控制器(MCU)三者的区别在于:DSP面向高性能、 重复性、数值运算密集型的实时处理;MPU大量应用于计算机;MCU则适用于以控制为主的处理过程。

DSP的运算速度比其它处理器要高得多,以FFT、相关为例,高性能DSP不仅处理速度是MPU的 4~10倍,而且可以连续不断地完成数据的实时输入/输出。DSP结构相对单一,普遍采用汇编语言编程,其任务完成时间的可预测性相对于结构和指令复杂(超标量指令)、严重依赖于编译系统的MPU强得多。以一个FIR滤波器实现为例,每输入一个数据,对应每阶滤波器系数需要一次乘、一次加、一次取指、二次取数,还需要专门的数据移动 *** 作,DSP可以单周期完成乘加并行 *** 作以及3~4次数据存取 *** 作,而普通MPU完成同样的 *** 作至少需要4个指令周期。因此,在相同的指令周期和片内指令缓存条件下,DSP的运算送到可以超过MPU运算速度的4倍以上。

正是基于 DSP的这些优势,在新推出的高性能通用微处理器(如Pentium、Power PC 604e等)片内已经融入了 DSP的功能,而以这种通用微处理器构成的计算机在网络通信、语音图像处理、实时数据分析等方面的效率大大提高。

谈一点学dsp的心得

因为课题需要,所以跟dsp打上了交道。大概从今年的8月份开始了解dsp。

那个时候中文书籍好像不是很多,就从网上下载ti的一些基本手册和几本大

黄皮书。因为以前基本没接触过,所以没搞dsp之前觉得dsp好深奥好难,看

了一段时间书以后,开始使用ccs仿真一些程序。现在回头看看ccs的软仿真

一般只能仿真算法的对错,对于算法的效率和其他一些性能的仿真基本没有

什么意义。可惜刚上手的时候我对这个不太清楚,就一直在ccs的软仿真上

浪费了太多时间,总想通过ccs下的profiler观测值来提高程序效率,结果

和后来在实际板子上跑出来的效果大相径庭。大概到了国庆假期结束,开始

画电路板,11月初拿到电路板开始漫长的调试过程。早听人说过调硬件是一

件很苦恼又很无奈的事,因为好多问题没有道理可讲。第一块板子是一块小

的实验板,制版焊接到调试一次通过,我就感觉调试硬件没什么特别难的。

结果后来的事实让我体验到了调试硬件的艰苦。第二块板子也很快做完了,

结果上电后总进不去ccs。折腾了两天,挨个管脚测,后来又和第一次做得

板子进行比较,发现一些中断引脚没有拉高,估计可能是这方面的原因。把

这些中断管脚拉高以后,ccs顺利进去了。后来又遇到了很多问题,每次都要

花上两三天时间才能把问题找出来。到现在电路基本能跑起来,但还有些不太

稳定,原因还需要慢慢琢磨。

在调试过程中,能多找一些身边的高手问就尽量找,这样有两个好处,一

能节省你的时间,二可以从高手那里得到一些经验。其次如果电路在调试过程

中老出问题,先检查程序,确认程序没有问题以后,在查硬件电路,这样一个

顺序效率比较高。再就是多留意一下bbs上的信息,有的信息可能现在对你

没多少用处,但是可能在以后会用到。

还有一些具体经验,以后有时间在总结了 *^_^*

学习DSP可能需要时间很长,不是短期可以解决的。

我的建议:

1。看网上资料;

2。用DSK来练手;

3。如果你连硬件经验都没有,那就得先练焊板子,哈哈

4。找人请教

我的唯一感受,如果你想学深些的话:

1.多看TI的pdf,多多宜善,权威而且全面

2.硬件上,多做项目,包括单片机的、一般电路的都行

3.软件上,一般的编程不说了,编译原理之类的对混合编程很有帮助的

4.其它东西,就是那些随着DSP的出现才流行的东西,如DSP/BIOS,CPLD技术等

其实也没什么诀窍,我现在还是照着上面学,离目标还差得远


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8246981.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存