引言
DSP(数字信号处理器)和FPGA(现场可编程门阵列)一直是数字信号处理的两个核心处理单元。目前的无线通信、图像系统、语音系统都是以这两类芯片为核心,配置必要的外围电路来组成整个系统。DSP的主要优点是算法处理能力强,而FPGA的主要优点则是并行处理。随着电子技术和芯片技术的发展,DSP和FPGA逐渐融合,目前一般的FPGA芯片都提供数字算法处理IP核,可以在FPGA上完成FFT、滤波等传统意义上属于DSP的工作。这些核的主要缺点是算法固定,只提供成熟的算法,算法处理的灵活性较低。经过长期的发展,DSP的片内外设逐渐丰富,但一直很难触及FPGA的并行处理。
TI公司推出的C6727B芯片其片内集成了最新的dMAX(Dual Data Movement Accelerator,双向数据传输加速器)模块,使得并行数据传输成为可能。其实现并行数据传输的本质就是相当于在片内集成2个EDMA(Enhanced Direct Memory Access,增强的直接存储器访问)模块,实现数据在无需CPU参与情况下的并行双路传输。本文以HPI和EMIF接口的数据传输为例,介绍dMAX的结构、配置及其使用方法。
1 dMAX及其结构
C6727B是在C671x基础上发展的浮点型DSP,其最高工作频率达到350 MHz。单个指令周期可以执行6个浮点数据运算,最高达到2 100 MFLOPS;片内具有256 KB的RAM,片内外设有EMIF、UHPI、音频串口、dMAX、定时器以及I2C、SPI接口等。
dMAX模块是C672x系列DSP所特有的数据传输模块,可以实现内部存储器、片内外设和外部存储器两两之间的数据传输。其内部结构如图1所示。
图1 dMAX内部结构图
从图中可以看出,dMAX主要由事件和中断处理模块、事件编码器、事件参数表、事件的地址生成硬件等组成。事件模块分成高优先级和低优先级两个相互独立的模块,各自有独立的事件入口和事件参数表,和CPU有独立的接口,使得dMAX可以同时处理两个不同的事件。当访问CPU端口时,MAX0的优先级高,MAX1的优先级低。
dMAX可以使用户定义的数据在内部数据存储器与外设之间移动,dMAX能够移动数据到任意能够寻址的存储器空间,包括内部存储器、外设存储器空间、扩展内存。dMAX能够同时处理2个数据转移请求,而且dMAX能够通过执行先进的一维、二维与三维数据的存储器传输工作,从而使DSP得以专注于信号处理任务,显著提高系统性能,适合图像的子帧提取或者语音信号的子信道提取。
为了方便CPU直接控制dMAX,C6727B还有2个专门的寄存器负责CPU与dMAX的通信,分别为DETR与DESR寄存器,CPU通过对这两个寄存器的读写就可以控制dMAX的操作。
2 系统硬件结构
C6727B和其他DSP有一个较大的区别就是,C6727B不再提供专门的外部中断引脚,而是使用一些GPIO引脚与dMAX配合使用,通过寄存器的设置将GPIO引脚配置成外部中断引脚。为了实现并行的数据传输,需要使用2个外部中断引脚。为此,使用C6727B的音频串口的AXR[8]和AXR[9]作为通用I/O引脚,同时需要将音频串口的CONFIGMCASP0和CONFIGMCASP1分别配置成0x0001和0x0002,如图2所示。此时音频串口不能再作为普通的音频口使用,而是配置成I/O接口。
图2 McASP和dMAX的内部连接
从图2可以看出,配置好音频串口后,一旦AXR[8]和AXR[9]引脚有上升沿到,则McASP0和McASP1激活dMAX的事件26和事件27。这两个事件分别连接到dMAX的低优先级和高优先级模块。即使两个中断同时发生,dMAX也可以同时响应事件,并处理相应的数据传输。
为了实现并行数据传输,必须将事件26的参数设置成与EMIF接口通信,同时需要将传输数据的源地址,目的地址,数据个数和数据增加方式(不变、加1、减1等)在初始化时写入dMAX(Lo)的参数中。这样,一旦事件26触发,dMAX(Lo)将自动传输数据;数据传输结束后,可以根据需要将dMAX(Lo)配置为向CPU发送内部中断14。同样,对于事件27,配置dMAX(Hi)的参数就可以完成对HPI接口的数据传输,也可以根据需要将dMAX(Hi)配置为向CPU发送内部中断13。
McASP与中断相关的寄存器配置是实现以上方案的重点,其中断配置框图如图3所示。从图中可以看出,使用PFUNC寄存器将其配置成通用I/O引脚;PDIR寄存器控制I/O引脚的方向,若是输出引脚则由POUT引脚输出高低电平,若是输入引脚则由PDIN寄存器读出该引脚的状态;此外,可以使用PDCLR和PSET寄存器清除或者设置输出引脚的状态。
图3 McASP的中断配置
3 系统软件设计
系统软件设计主要包括McASP、dMAX、HPI和EMIF的初始化,以及中断使能等。系统主程序只需要等待中断进行相应的处理,主要的数据传输工作都是由dMAX按照软件配置自动完成,不需要CPU参与。系统软件流程如图4所示。图中,虚线部分表示由dMAX独立完成的工作,实线部分表示由CPU完成的工作。两者之间通过内部中断方式实现状态的交流。
图4 系统软件流程
当有2个以上传输事件发生,尤其是多个事件都在同一个dMAX优先级完成时,事件仲裁就变得很重要。图5是多个dMAX事件进行数据传输的例子。图中,事件A为dMAX(Hi)数据传输;事件0~2为dMAX(Lo)数据传输。在dMAX(Lo)中,设定事件0优先级最高,事件2优先级最低。
图5 多个dMAX事件的数据传输
事件A和事件0同时发生,将分别触发dMAX(Hi)和dMAX(Lo)进行数据传输。在之后的时钟周期内,dMAX(Hi)不再有其他事件发生,将稳定、持续地进行事件A的数据传输,直到传输结束,如图5中最后一行所示。
对于dMAX(Lo),在传输了事件0的一个数据后,事件2发生。虽然事件2的优先级低于事件0,但dMAX(Lo)仍然会响应事件2,并且会传输一个事件2的数据,如图中第5行的E2/Q0。此时,dMAX(Lo)就存在2个激活的事件——事件0和事件2。之后的数据传输dMAX(Lo)进行优先级判断,将优先传输事件0的数据,而将事件2挂起,直到事件0结束后才开始处理事件2的数据传输。
4 总结
dMAX使用2路独立的传输通道从而实现并行数据传输,其本质是采用了独立的物理通道,这与FPGA实现并行处理基本一致。本文介绍了基于C6727B的dMAX的基本结构以及软硬件设计,使用事件优先级控制区分多个事件的数据传输。由于可以并行传输数据,使得DSP与外部设备的通信更加方便和快捷,而且不需要CPU的参与,减轻了CPU的负担,使CPU可以专注于复杂的算法处理。