DSP(Digital Signal Processing)芯片也称数字信号处理器,它是一种特别适合于进行数字信号处理运算的微处理器,其主要特点是能够实时快速地实现各种数字信号处理算法。自1980年以来,DSP芯片得到了突飞猛进的发展,现在DSP芯片的应用越来越广泛。美国模拟器件公司(Analog Devisces,简称AD)是设计和制造DSP芯片的主要厂商之一。近年来,该公司相继推出了一系列具有自己特点的DSP芯征,其中有定点DSP芯片ADSP2100/2100A/2101/2103/2105、ADSP2111/2115、ADSP216X以及ADSP2171/2181以用浮点DSP芯片ADSP21000/21020、ADSP2106等。
1 浮点式ADSP芯片的特性
1.1 ADSP2100浮点芯征特性
ADSP21000系列浮点芯片有如下特性:
●快速算术处理能力
乘法器和ALU、数据地址产生器(以下称DAGs)、程序序列产生器可并行操作;
●可在单周期内完成两个片外存储器的读取操作
并行的DAGs能使两个存储器的读/写操作在一个周期内完成;
●动态扩展范围
●32/40位IEEE标准浮点动态范围为10E-38~10E+38,具有32位定点MACs及80位累加器;
●可硬件支持环形缓冲寻址,DAGs支持对两个存储器的环形缓冲和取模寻址;
●硬件无开销循环,嵌套可达6层。
1.2 ADSP2106X浮点芯片特性
ADSP2106X是高性能的浮点DSP芯片,采用超哈佛结构,具有四条独立总线(两条数据总线、一条程序总线和一条I/O总线)。它不仅具有ADSP21000系列高性能的核心处理器,而且在结构上增加了以上几个部分;
●具有大容量的高效片内存储器系统,其中ADSP21060有4M位片内存储器;而ADSP21062和ADSP21061分别有2M和1M位片内存储器;
●内含DMA控制器和I/O处理器,允许灵活且无开销的高速数据传输,其速率为240Mbytes/s;
●可提供与16位32位处理器的接口;
●具有两个40Mbit/s的多通道串行口。
2 ADSP芯征处理能力
ADSP系列器件具有很强的运算能力、寻址能力和I/O操作能力,因而有着很高的性能。ADSP器件在常用的券积、滤、FFT以矩阵运算等方面效果较好。若用高级语言调用DSP板专用ADSP程序模块,其运算速度可提高2-3个数量级。ADSP系列器件采用CMOS工艺,因而具有较低的功耗。另外,它们的指令全部兼容,并且在芯片上集成了完整的串行口硬件,从而使功能更加强大。
2.1 运算能力
一个性能优良的DSP处理器必须能在单周期内完成乘与累加运算与其它运算和逻辑操作的组合。ADSP系列器件因为其内有三个独立的计算单元ALU、MAC和桶形移位器,并经结果总线相连,且任一单元的输出寄存器均可直接作为其它单元的输入而被处理,因此,ADSP器件能在一个周期内完成对两处存储器的读/写操作。此外,ALU和MAC还可直接与程序存储器及数据存储器相连,每个运算单元都有很强的独立性,允许任意的计算次序,从而避免了重新排序给育种员带来的额外工作。
2.2 数据寻址能力
一个优秀的DSP处理器必须能在同一单周期内从两个不同的存储空间存取两个操作数,典型况是一个系数和一个数据字。ADSP系列有两个独立的地址发生器,一个用于从程序存储器获取数据的地址,另一个则用于数据存储器。每个地址发生器有8个I(Index)寄器存放地址指针和8个M(Modify)寄存器修改地址,同时具有8个L(Length)寄存器存储循环缓冲器寻址的缓冲区长度。
当一个地址被送到地址总线时,地址发生器将该地址作码位反转,并为FFT提供了零额外开销的码位反转。循环缓冲是由地址发生器硬件支持的,对于全部8个循环缓冲器,地址发生器可同时维持其中的4个。循环缓冲器的内容可放置在数据存储器或程序存储器中,并把缓冲区长度加载到长度寄存器中。当地址指针达到或超过缓冲区边界时会被模逻辑检测到并自动完成指针回绕工作,在缓冲区可作前向或后向操作,其步长为任意值,但必须小于缓冲区长度。直接寻址举例如下:
MXO=DM(标号);
指令24位宽度,指令中可指定一个14位地址(标号)。
间接寻址举例:
寄存器=DM(I0,M3);
由数据存储器加载寄存器,并用M3修改I0。
2.3 程序定序能力
程序定序效率主要集中在两方面:第一是循环执行;第二是如何处理循环转移和条件转移。
ADSP系列的程序定序器支持零额外开销的“DO UNTIL”循环。该处理器利用计数堆栈、环堆栈和循环比较可以确定是否应终止一个循环,并转到下一条指令而不需额外开销周期。
下例是一个3条指令的循环程序,它被设计成重复100次:
CNTR=100; DO label UNTIL CE First instruction of Loop Second instruction of Loop Label:Last instruction of loop; First instruction outside Loop;
该程序的循环机理是自动的,其堆栈和计数器的操作及程序流程均由定序器逻辑来处理。可支持4级循环嵌套(浮点DSP支持6级循环嵌套),如矩阵操作、二维处理以及FFI这样的常用算法,都得益于循环嵌套能力。
ADSP系列有许条件指令,其中大部分运算指令、跳转、子程序调用、中断或子程序返回都是有条件的。踱定序器在运行时,不需额外开销就可确定该条件是否满足,并确定采取什么行动。
有关条件指令的用法举例如下:
IF Condition JUMP Label; IF Condition JUMP I4; IF Condition CALL Label;
I4表示于间接跳转的地址发生器寄存器;Condition是指处理器16个运算条件中的任一个;Label是指任一地址或程序存储空间的标号。
在中断发生或子程序调用时,处理器状态能自动保存在服务子程序中,无需状态引退和恢复。
2.4 I/O操作能力
ADSP2111/2101可与单字节宽EPROM直接接口,能有效地引导加载程序而无需附加任何部件。被引导的存储空间由一个外部64×8位的空间组成,它分为8页(8k×8位)。复位时,零引导页被自动传到ADSP2111/2101的内部RAM中。
它的串行口能以该处理器的速度全速操作,其发送字和接收字的宽度可编程,能设为3到16的任意数值。串行口还允许自动缓冲。在规定好缓冲区长度、缓冲区首地址和修改值后,它便能自动更新地址。当每个字通过串行口被传送时,数据被自动读出或写入寄存器,而无需产生中断。另外,ADSP2111/2101还具有如下特点:
●每个串行口具有独立的发送和接收硬件。采用双缓冲寄存器,可在一个时钟周期内同时完成压扩,从而实现全双工,μ律和A律压扩功能可任意选择。
●接口灵活。每个串行口均工作在自己的串行口时钟SCLK下,SCLK和帧同步信号既可由外部输入,也可内部产生。数据字长在3-16bit之间变。
●使用独立的收、发帧信号定义串行数据字的传输开始,可选择需不需要帧同步,长帧还是短帧,电平触发还是边沿触发。
●自动缓冲功能。当设定为自动缓冲模式后,串行口会自动接收发送一整块的数据,不需要软件开销,仅当缓冲区的指针产生回绕时产生一个中断请求。
●多路能力。SPORT0具有多路选择接收和发送功能,可从24或32路时分复用比特流中选取某时隙的有效数据字。
每个串行口各有五条引脚与外围电路连接。SCLK(时钟)、RFS(接收帧同步)、TFS(发送帧同步)、DR(数据接收)和DT(数据发送)。
2.5 ADSP2106X的DMA处理能力
ADSP2106X的片内Direct Memory Access(DMA)功能可提供一种进行整块数据传输的机制。这使得ADSP2106X的内部存储器和外部存储器、外设或主处理器、串行口之间能够进行DMA传输。外部存储器和外设之间也能进行DMA传输。在数据传输过程中,ADSP2106X的片内DMA控制器发挥着关键作用。DMA控制器可独立操作,且核心处理器不可见。它允许核心处理器在运行程序和指令的同时进行DMA数据传输,以减轻核心处理器在数据传输过程中的压力。
3 数字模型的建立和算法的实现
为实现对某特定频率的滤波,程序中共使用了两种数字模型。(采用的是ADSP21XX定点处理器)。
3.1 谐振器合成滤波器
对某特定频率进行滤波的谐振器合成滤波器是利用对前两个数据和当前数据的相关性来实现的。这在算法实现上要比以往的FFT、IIR等传统滤波器容量得多,其主要优点是节省指令。对某频率数据的处理如图1所示。图中Ya的取得与前N个数据相关,其算式为:
Ya=X(n)-RNX(n-N);
Yb与前n-2个数据相关,其算式为:
Yb=Ya(n)-Rya(n-2);
对于Yn的获得则通过一个揩振器对Yb进行处理,其处理算式为:
Yn=∑Yb(n)+Yc(n-1)×2cos(2kπ/N)-Ryc(n-2)
其中N值取决于所要求的带宽和采产频率。由于我们处理的是PCM脉码信号,故取采样频率f0=8kc,根据实际情况,建议取带宽为50Hz为佳。
则有:
N=f0/△f=8kc/25=320
关于系数R的取值,可取经验值0.99。然后将R和cos的乘积作成一个固定系数。对应于700、900、1100、1300、1500、1700六个基准频率的值分别为0X6C0C、0C605C、0X524C、0X4236、0X327E、0X1D95。
采用ADSP汇编语言来实现这一设计的程序如下:
mx0=dm(i3,m0); my0=dm(const-r); mr=mx0×my0(ss); ar=ay0-mr1; ay0=ar; {Yb} cntr=6; do result until ce; mx0=dm(i2,m1); my0=dm(const-rs); mr=mx0×my0(ss); mx0=dm(i2,m2); my0=pm(i5,m5); af=ay0-mr1; mr=ay0-mr1; mr=mx0×my0(ss); ar=mr1+af; {Yn} dm(i2,m1)=mx0; result:dm(i2,m1)=ar;
图2为用700Hz程序运行时,在示波器上所看见的波形。
3.2 水缸判别
对滤波器滤出的数据进行水缸积累,使之达到一种动态平衡,让其在有数据时水缸渐满,无数据时水缸不变。这时有:
A=Yc(M+A-A)M
其中M的取值取决于所要计算的数据的多少,本程序中取M=128;图3为700Hz的水缸判别图。
当曲线超过A时,表示数据已有,在A和B之间的数据表示700Hz的频率已捕获。对不同值的信号可调节A、B的值,使它们达到一种公共值。
用ADSP汇编语言来实现这一设计的程序如下:
(对700Hz,采用8kc采样) AR=DM(I2,M3); AR=ABS AR; AY0=DY(I1,M0); AR=AR-AY0; SR=ASHIFT AR BY-6(LO); AR=SR0+AY0; DM(I1,M3)=AR; AR=AR-AY1; IF GT JUMP判别处理;
该算法可用于对某些特定频率的滤波,这在实际工作中效果非常明显。
来源:国外电子元器件 |