DSP原理与应用-第5章dMAX.ppt

上传人:za****8 文档编号:15799356 上传时间:2020-09-06 格式:PPT 页数:74 大小:931KB
返回 下载 相关 举报
DSP原理与应用-第5章dMAX.ppt_第1页
第1页 / 共74页
DSP原理与应用-第5章dMAX.ppt_第2页
第2页 / 共74页
DSP原理与应用-第5章dMAX.ppt_第3页
第3页 / 共74页
点击查看更多>>
资源描述
第四章 双通道数据搬移加速器(dMAX),第四章 双通道数据搬移加速器(dMAX),4.1 dMAX概述 4.1.1 简介 dMAX 控制器用于处理内部数据存储控制器和C672x DSP外围设备之间用户编程数据的传输,dMAX也允许任何可寻址存储空间之间的数据传输,包括内部存储器、外设和外部存储器。,DSP结构框图,dMAX功能框图,dMAX控制器有如下功能, 可以进行高级数据分类的三维数据传输 把一部分存储器作为循环缓冲/FIFO存储器,并有基于读写数据的延迟 可以同时处理两个传输请求(假设它们的源地址或目的地址不同),dMAX控制器的结构框图 事件和中断处理寄存器。 事件编码器 高优先级事件参数随机存储器(PaRAM) 低优先级事件参数随机存储器PaRAM 用于高优先级事件的地址生成器MAX0(HiMAX) 用于低优先级事件的地址生成器MAX1(LoMAX),dMAX的具体工作内容,4.1.2 dMAX术语,dMAX-双通道数据搬移加速器:dMAX由两个相同的模块组成,MAX0和MAX1,两个模块可并行运行。 Element transfer-单元传输:从源地址到目的地址的单个数据单元(8位,16位,32位)的传输。如果需要的话,每个单元可以在同步事件的基础上进行传输。单元传输用于一维传输。 Frame-帧:一组数据单元组成帧。一个帧可以有交错的或连接的数据单元。帧可以在有同步事件或无同步事件的情况下进行传输。帧用于一维传输。,4.1.2 dMAX术语,Event-事件:由事件标志寄存器(DEFR)触发的事务。例如,McASP接收的数据可以触发一个事件。,4.1.2 dMAX术语,EventEntry-事件入口:如果一个事件用来触发数据传输,应设定事件入口以指定传输类型、传输选项,并应该包括指向传输入口的指针。如果事件是用来触发一个中断,事件入口只需指定使用哪条中断线路。事件入口仅占用dMAX PaRAM存储空间的一个字节,里面是事件和事件入口之间一对一的对应关系。在每个PaRAM里一个特定的事件入口对应一个事件(一个事件在高优先级PaRAM中有一个事件入口,在低优先级PaRAM中有一个事件入口),事件优先级组决定当一个事件到达时哪一个事件入口传输给HiMAX/LoMAX。所有的事件被分进低优先级或高优先级组,事件编码器对所有收到的事件进行优先级划分,并且找出每个组中具有最高优先级别的事件。两个具有最高优先级别的事件(每个组一个)可以被同时处理(HiMAX处理来自高优先级组的最高优先级的请求,LoMAX处理来自低优先级组的最高优先级的请求)。事件入口是可编程的,定义相应的事件到达时如何进行处理。,4.1.2 dMAX术语,EventEntryTable-事件入口表:事件入口表包含所有的事件入口,占据32个字节,它位于PaRAM的开始。有两个事件入口表,一个用于高优先级事件,一个用于低优先级事件。如果一个事件属于高优先级事件组,那么它的事件入口就位于高优先级事件入口表,如果一个事件属于低优先级事件组,那么它的事件入口就位于低优先级事件入口表。 EventPriorityGroup-事件优先级组:dMAX事件可以被设定为高优先级或低优先级,这样就把事件分进了两个优先级组:高优先级或低优先级。高优先级事件组由MAX0模块来处理,低优先级事件组由MAX1模块来处理。,4.1.2 dMAX术语,Transfer Entry-传输入口:传输入口表包括一个11字节长的入口,定义如源地址、目的地址、计数以及索引等传输参数。每个PaRAM中有足够的空间来存储8个不同传输的传输入口(一共16个传输入口)。 QuantumTransfer-量子传输:为减少系统等待时间,长数据被分为很多短数据传输,称量子传输。dMAX总是以量子传输的方式移动数据。如果在dMAX进行量子传输的时候一个事件到达,那么在量子传输进行完之后再处理这个事件。,4.1.2 dMAX术语,QuantumTransferSizeLimit(QTSL)-量子传输大小限制:可在指定通道的事件入口上编程指定量子传输的大小,可以编程为1个、4个、8个或16个数据单元。量子传输的实际大小是QTSL中比较小的,而且数据单元的个数也被传输。减少QTSL可以降低总体的dMAX延迟,增加QTSL可以提高dMAX的数据吞吐量。 PendingEvent-未处理事件:未处理事件是指在DEFR中占据了位置但还没有被dMAX控制器处理的事件。 LongDataTransfer-长数据传输:当每个同步事件之后传输的数据单元的个数大于QTSL时发生长数据传输。,4.1.2 dMAX术语,One-Dimensional (1D) Transfer-一维传输:一组数据单元组成一个一维数据块,可以设置数据单元的个数以及数据单元之间的间隔(space),指定的间隔与源地址和目的地址无关,范围是-32768到32767个单元。 Two-Dimensional (2D) Transfer-二维传输:一组帧组成2维数据块,第一维是一个帧中的数据单元数,第二维是帧的数量,一个二维数据块中帧的数量可以是1到65535。一次可以传输一帧或整个2维数据块。二维数据块间的间隔与源地址和目的地址无关,(当前值:-32768到32676个单元)。,4.1.2 dMAX术语,Three-Dimensional (3D) Transfer-三维传输:一组二维数据块组成三维数据块,第一维是帧中数据单元的数量,第二维是帧的数量,第三维是二维数据块的数量。二维数据块的数量可以是1到32767。一次可以传输一帧或整个3维数据块。三维数据块间的间隔与源地址和目的地址无关,(当前值:-32768到32676个单元)。 One-Dimensional Burst (1DN) Transfer-1维突发传输:1维突发传输是为搬移存储器里一段连续的数据而进行的优化,这一传输不支持不连续的源或目的地址。,4.1.2 dMAX术语,SPI Slave Transfer-SPI从传输:SPI外设要求对于一个给定的SPI事件,一个单元从SPI输入寄存器读出,一个数据单元写入SPI输出移位寄存器。从SPI传输提供了这一功能。 FIFO (Circular Buffer)-FIFO/循环缓冲:一个FIFO是由它的基地址、大小、两个容量标记以及两个指针(读指针和写指针)定义的,当从缓冲写入或读出数据时两个指针互相追赶运动。缓冲的读和写是异步的,当FIFO填入数据时,指针循环,新数据覆盖旧数据。FIFO的大小是由数据单元的数量决定的,而不必是2的整次幂。,4.1.2 dMAX术语,Table-based Multi-tap Delay Transfer-基于表格的多级延迟传输:许多语音算法以不连续的方式访问大的延迟缓冲区。基于表格的多级延迟传输按照预先设定好的延迟偏移读写FIFO缓冲区的数据单元。基于表格的多级延迟存储器访问,在连续级间有任意的间隔(由延迟表定义),并且在一级内有可预见的连续间隔(一个级内延迟数据是连续的)。 dMAX Channel-dMAX通道:与事件入口和传输入口相联系的用于传输数据的事件信号。,4.1.2 dMAX术语,Reference (Reload) Registers in Transfer Entry -传输入口的参考(重载)寄存器:若使能重载,参考寄存器上(Reference Register)的值用于在传输结束的时候装载当前寄存器(Active Register)组,这样可以实现ping-pong 缓冲功能。 Active Registers in Transfer Entry-传输入口当前寄存器:这些当前寄存器在传输的过程中被dMAX更新,dMAX在当前寄存器中存放当前传输的状态信息。,4.1.2 dMAX术语,Delay Table-延迟表:在FIFO传输时,传输入口的指针引用延迟表,表中列出了所有多级延迟传输的请求延迟 (缓冲指针参考这些延迟偏移)。,FIFO 简答,FIFO: 一、先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。 1什么是FIFO? FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。,FIFO 简答,2什么情况下用FIFO? FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端时AD数据采集,另一端时计算机的PCI总线,假设其AD采集的速率为16位 100K SPS,那么每秒的数据量为100K16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。,FIFO 简答,3FIFO的一些重要参数 FIFO的宽度:也就是英文资料里常看到的THE WIDTH,它只的是FIFO一次读写操作的数据位,就像MCU有8位和16位,ARM 32位等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度是可以自己定义的。,FIFO 简答,FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。如一个8位的FIFO,若深度为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据,FIFO的深度可大可小,个人认为FIFO深度的计算并无一个固定的公式。在FIFO实际工作中,其数据的满/空标志可以控制数据的继续写入或读出。在一个具体的应用中也不可能由一些参数算数精确的所需FIFO深度为多少,这在写速度大于读速度的理想状态下是可行的,但在实际中用到的FIFO深度往往要大于计算值。一般来说根据电路的具体情况,在兼顾系统性能和FIFO成本的情况下估算一个大概的宽度和深度就可以了。而对于写速度慢于读速度的应用,FIFO的深度要根据读出的数据结构和读出数据的由那些具体的要求来确定。,FIFO 简答,满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。读指针:指向下一个读出地址。读完后自动加1。写指针:指向下一个要写入的地址的,写完自动加1。读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。,FIFO 简答,4FIFO的分类 根均FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。,4.1.3启动dMAX传输,有两条途径可以用dMAX控制器启动数据传输: 事件触发的dMAX传输(这是dMAX典型的应用) CPU启动的dMAX传输,4.1.4 FIFO的实现,dMAX具有把一部分存储器作为循环缓冲/FIFO的功能,并且支持读写FIFO的专用传输类型。这时,FIFO是在DSP内部或外部RAM上的一个存储块,由基地址、大小、包含的数据单元大小(8、16或32位)定义的。FIFO缓冲区的大小是由缓冲区可以容纳的最大数据单元的数量指定的,它不必是2的整次幂。FIFO最大可以为1048576数据单元。 当往FIFO缓冲区填入数据的时候,缓冲循环,新的数据覆盖旧的数据。FIFO描述器描述FIFO缓冲区,描述器可以位于DSP存储器的任何位置。,FIFO的结构框图,FIFO容量标记(Watermarks ),当FIFO中未读数据单元的数量低于一定值或者高于某个预先设定的值(这两个水平值称作FIFO的容量标记)时就需要对其状态进行检测。 保留了专用的中断线路以向CPU报告FIFO的容量标记、状态以及FIFO错误,FIFO状态中断线路以及dMAX FIFO状态寄存器(DFSR)用于向CPU通知FIFO的状态。 一个FIFO有两组容量标记,EMARK及FMARK。每一组容量标记都有一个状态位,只有当达到容量标记时,才对DFSR中的这一位进行设置,FIFO容量标记(Watermarks ),当FIFO中未读信号的数量大于或等于预先设定的FMARK值时,dMAX将通过触发FIFO状态中断并且设置DFSR中的满标志状态位来通知CPU容量标记的状态。 当FIFO中未读信号的数量小于或等于预先设定的EMARK值时,dMAX将通过触发FIFO状态中断并且设置DFSR中的空标志状态位来通知CPU容量标记的状态。 为了接收到下一个容量标记的通知,CPU需要清空DFSR中EMSC或FMSC状态位,只有向CPU报告的最后一个容量标记的状态位被清空了,dMAX才会触发新的FIFO状态CPU中断。,FIFO错误域,如果读写FIFO时发生错误,dMAX使用FIFO描述器中的错误域(EFIELD)来向CPU报告错误类型。检测到一个错误后,dMAX中断传输,这时需要CPU介入来恢复操作。 dMAX控制器通过设置DFSR中的FIFO状态位(FMSC及EMSC),通过向EFIELD写入错误代码并且触发一个FIFO状态中断来向CPU通知FIFO传输错误。,dMAX向CPU报告三种类型的FIFO错误, 发生溢出错误,在FIFO的未读数据被覆盖之前FIFO传输中断。每次在进行一个写入传输之前,dMAX把当前COUNT0 位域中一位的值与FIFO中空位的值进行比较,如果FIFO中空位的值小于COUNT0位域中的值,dMAX将中断写入传输,并且向CPU标志一个错误。 发生下溢错误,在试图读取比FIFO中存储的未读数据还要多的数据时传输中断。每次在进行一个读取传输之前,dMAX把当前COUNT0 位域中一位的值与FIFO中可供读取的数据数进行比较,如果FIFO中可供读取的数据数小于COUNT0位域中的值,dMAX将中断读取传输,并且向CPU标志一个错误。 在基于表格的多级延迟传输中,如果延迟表中设定的延迟要大于FIFO中存储的数据数,产生一个错误并且中断传输。,dMAX传输的类型,dMAX提供五种类型的数据传输。 通用数据传输包括一维(1D)、二维(2D)、三维(3D)数据传输 支持基于表格的多级延迟存储器访问的FIFO写传输 支持基于表格的多级延迟存储器访问的FIFO读传输 一维突发传输(1DN) 从SPI传输,一维传输,二维传输,三维传输,FIFO传输,dMAX控制器可以在两维线性地址和循环缓冲(FIFO)之间搬移数据,dMAX支持FIFO读类型和写类型的传输,一个FIFO传输是由其PaRAM上的传输入口定义的,传输入口对传输进行了描述,其包含一个指向FIFO描述器的指针,指针用做传输源地址或传输目的地址。,FIFO写 三帧FIFO写传输(传输开始之前),FIFO写三帧FIFO写传输(第一个帧传输完毕后),FIFO写三帧FIFO写传输(第二个帧传输完毕后),FIFO写三帧FIFO写传输(第三个帧刚刚传输完毕后),FIFO写三帧FIFO写传输(传输完毕后),FIFO读,FIFO读的传输入口包括:一个目的地址的当前拷贝、一个指向FIFO描述器的指针、两个目的地址索引、数据单元计数器的一个当前及一个参考拷贝、用于重载目的地址的两组参考寄存器以及指向延迟表的两个指针。,FIFO读,FIFO读,FIFO读,FIFO读,FIFO读,一维突发传输(1DN),一维突发传输(1DN)是为了快速把连续的数据从一个存储器位置传输到另一个位置而进行的优化。1DN由其在PaRAM中的传输入口定义,传输入口对传输进行了描述,包括指向源地址和目的地址的指针,还包括定义了需要传输的位数CNT。,一维突发传输(1DN),1DN的传输是突发的,一个突发同步于一个量子传输,并且描述了dMAX 在检测到一个新事件之前将要传输的位数。如果事件到达时dMAX正在进行一个突发传输,那么在突发结束之后才去处理这个事件。突发的长度设定在了1-64位。不象通用目的传输,1DN传输在传输完一个突发后不会让位于更高优先级的未处理传输,只有当一个新的事件到达后1DN传输在完成一个突发后才会让位。1DN传输在处理完N个突发后才让位于更高优先级的未处理传输,这个N是由用户设置的,可以在传输入口设置。这样1DN传输会阻碍更高优先级的传输,所以使用时要谨慎。,一维突发传输(1DN),传输过程中,dMAX更新传输入口中的参数(源地址、目的地址、位计数器及突发的数量),一个1DN传输最多可以搬移的字节数量是65535。收到一个事件后,传输CNT数的字节。当CNT域递减到0时一个1DN传输结束。,从SPI传输,从SPI传输服务于SPI外设。外设要求对于一个给定的SPI事件,从SPI输入寄存器读出一个数据单元,同时向SPI输出移位寄存器写入一个数据单元,从SPI传输支持这一功能。C672x DSP支持两个SPI外设。从SPI传输要服务的SPI外设是在事件入口设置的。,从SPI传输,量子传输,把一个传输分解成多个子传输,就可以允许dMAX控制器快速处理在传输过程中到达的高优先级的请求,就可以减少系统延迟。为改善系统延迟,dMAX总是以称为量子传输的小的子传输的方式搬移数据。量子传输过程中传输的数据单元总是小于或等于传输入口中定义的量子传输大小限制(QTSL),长于量子传输大小限制的传输称为长传输。,量子传输,数据单元大小及其调整,数据单元的大小可以对于每个通道单独设定,dMAX控制器支持三种不同的数据单元大小设置:8位、16位及32位。 传输计数器总是定义要传输的数据单元的数量。源地址、目的地址、索引及缓冲的大小也都是以数据单元数量的形式定义的。,源/目的地址更新,既然所有的索引都以数据单元数量的形式定义,为了计算正确的地址,索引的值必须乘以数据单元的大小。索引可以取正值或负值。每次传输之后,源地址及目的地址根据相应的索引与数据单元大小的乘积更新。,重载dMAX传输,传输入口包含一组当前寄存器,两组地址参考寄存器以及一个参考计数寄存器。在当前寄存器组中,dMAX存储有关传输状态的信息(源及目的地址以及数据单元数量)。,dMAX中断生成,dMAX控制器可以使用: 一条专用的中断线(INT8)通知CPU数据传输结束。 一条专用的中断线(INT7)向CPU报告FIFO的状态。 表1-2列出的任何事件通过使用六条中断线中的一条线,来触发一个中断。,事件编码器,事件编码器使用两个寄存器,即DEHPR及DELPR上的信息来把所有的事件分为两个优先组,然后事件编码器按照事件编号把一个组内的所有事件分级(事件的编号越低其在组内的优先级越高),高优先级组优先级别最高的事件及低优先级组优先级别最高的事件被dMAX同时处理。 新的事件总是优先于长传输,事件的编号仅仅用于判断其在多个未处理事件中的优先性。例如,如果有多个事件及多个长传输都等待处理,编号最低(最高优先级)的新事件将首先被处理,一旦处理完了所有的新事件,将接着处理编号最低/优先级最高的长传输。,dMAX事件的同步,MAX事件标志寄存器(DEFR)最多可以捕获31个独立的事件,因而在dMAX事件输入上事件可以同时发生。这时,事件编码器解决处理的顺序,这一机制可以对同步事件进行分类,设定事件的优先级。,dMAX事件的同步,dMAX控制器把所有的事件分成两个优先组,这样一个事件可以属于高优先级组或低优先级组。两个寄存器,DEHPR及DELPR在事件及优先级组之间建立联系。DER及DEFR上的位按照其编号分配给事件(这些寄存器上的n位对应事件编号n)。DEFR上的事件标志和DEHPR上的32位是一对一的对应关系,在DEHPR上设定一位就把对应的事件归入高优先级事件组。DEFR上的事件标志和DELPR上的32位也是一对一的对应关系,在DELPR上设定一位就把对应的事件归入低优先级事件组。 当同一个优先级组的事件同时到达时,其优先级是由其事件编号决定的(事件编号越小在组内的优先级别越高)。dMAX可以同时处理来自每个优先级组的一个事件,因而两个优先级最高的事件(每个组一个)可以被同时处理。表4-2列出了dMAX中同步事件是如何与事件编号联系的。,同一事件优先级组内事件处理的优先性,在一个优先级组内,事件是根据其事件编号来划分其优先级别的(事件编号越低优先级别越高)。 长数据传输总是分解成许多个量子传输,并在后端处理。长数据传输的优先级总是要低于新事件,当一个新事件到达,新事件总是给予比长传输更高的优先级,即使这个新事件的优先级低于触发这个长传输的事件。 如果dMAX在运行一个量子传输(长数据传输的子传输)的时候一个事件到达,那么dMAX就会在这个正在运行的量子传输完成之后立即处理这个事件。处理完整个事件,如果没有其它的待处理事件,dMAX将继续进行前面被中断的数据传输。,同一事件优先级组内事件处理的优先性,同一个通道中,一个长传输过程中一个新事件到达的情形,4.2 寄存器描述,dMAX控制器的存储器分为高优先级和低优先级PaRAM,高优先级PaRAM包含用于高优先级事件的事件入口表和传输入口表,低优先级PaRAM包含用于低优先级事件的事件入口表和传输入口表,高优先级及低优先级PaRAM存储器的组织方式是相同的。,4.2.1参数RAM(PaRAM),每个PaRAM包含两个部分:事件入口表部分和传输入口表部分,dMAX控制器框图,PaRAM存储器映像图,PaRAM存储器组织框图,事件入口表,当要处理一个事件时,其相应的事件入口传输给dMAX,控制器就使用这些信息对事件进行处理。事件入口是可编程的,并把事件与一个CPU中断或一个传输类型相联系。在第一种情形下,事件入口会定义使用哪一条中断线,在第二种情形下,事件入口会定义传输选项。高优先级事件和低优先级事件都有一个事件入口表,每个事件基于其优先级别与两个事件入口中的一个相联系,一个事件入口位于高优先级事件表中,另一个位于低优先级事件表中。,传输入口表,有两种传输入口表,每种可以有最多8个传输入口。一种表与高优先级事件相联系,另一种与低优先级事件相联系。传输入口的大小固定为11个字长。不同传输类型传输入口的格式是不同的,通用数据传输及FIFO读写有专用的传输入口。,4.2.2 FIFO描述器,FIFO(循环缓冲)描述器定义了如下内容: FIFO基地址 FIFO数据单元大小 FIFO大小(以数据单元数量的形式) 一个读及一个写指针 两个用于表示FIFO满及空的状态码 两个容量标记(空标记EMARK及满标记FMARK) 错误字段(EFIELD),用于向CPU描述一个错误状态,4.2.3 dMAX控制寄存器,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!