摘要: 越来越多的电子设备应用涉及到信号处理。家庭影院、计算机图形、医疗成像和电信都依赖于信号处理技术。信号处理需要在复杂但重复的算法中快速计算。许多应用需要实时计算:即,信号是时间的连续函数,必须对其进行采样并转换为数字,以便进行数值处理。因此,处理器必须在样品到达时执行对样品进行离散计算的算法。
越来越多的电子设备应用涉及到信号处理。家庭影院、计算机图形、医疗成像和电信都依赖于信号处理技术。信号处理需要在复杂但重复的算法中快速计算。许多应用需要实时计算:即,信号是时间的连续函数,必须对其进行采样并转换为数字,以便进行数值处理。因此,处理器必须在样品到达时执行对样品进行离散计算的算法。
对数字信号处理器(DSP)的结构进行了优化,以处理这种算法。一个好的信号处理引擎的特点包括:快速、灵活的算术计算单元(如乘法器、累加器、移桶器);不受约束的数据流入和流出计算单元;扩展计算单元的精度和动态范围(避免溢出和最小化舍入误差);双地址生成器(用于同时处理两个输入到dy - c操作);高效的程序排序(包括有效处理循环和中断的能力);以及易于编程。
DSP与精简指令集计算机(RISC)有一些共同的特征。此外,两者都是围绕某些核心指令构建的,使它们能够以非常高的指令速率运行;两者都避开了内部微码。然而,它们是本质上不同的“动物”。risc和dsp之间的区别在处理器上最为明显。
计算单位
数据地址生成器
内存架构
中断功能
循环的硬件
条件指令
接口特性
dsp属于两个基本类:定点(通常是基于16位整数数据类型的16位体系结构)和浮点(通常是基于尾数和指数数据类型的32位体系结构)。
计算单元:dsp都包含并行的硬件乘法器,支持单周期乘法,其乘法器通常将乘法和累加结合在一个单周期内。dsp具有专用的累加器,其寄存器的宽度明显大于标称字长,以保持精度-例如,32位ADSP-2106x SHARC系列中的80位(图1)。硬件可能支持累加器溢出恢复,如ADSP-21xx系列。此外,dsp都包含功能齐全的算术逻辑单元(alu),与乘法器无关。
ALU可能具有特殊的功能,例如能够同时产生和和差,从而加速快速傅里叶变换(FFT)中的核例程——一种在时域和频域之间转换信号的算法。高级DSP将在计算单元中包含饱和逻辑以防止数据溢出。它还可以提供零开销(即,不需要额外的时钟周期)陷阱,以在算术异常时中断例程。
一个复杂的DSP还可能包含一个单周期桶移位器(即,一个能够在一个时钟周期内向左或向右移动任意位数的字),一个优先编码器用于数据缩放,数据压缩/扩展或打包/拆包和位操作。它还可能包括专用硬件,以最大限度地减少快速除法、平方根和超越函数计算所需的时间。具有这些特殊功能的计算元素在RISC处理器上找不到。
地址生成:一个高效的DSP将保持其计算单元的数据至少来自两个独立的数据地址生成器。抽头延迟线和系数缓冲器是dsp的特征,但在通用计算中大多是未知的。一个高效的DSP需要循环缓冲硬件来支持缓冲。循环缓冲区指针需要在没有开销的情况下每个周期更新一次。此外,缓冲区结束的比较测试需要一个no-delay命令来重置缓冲区结束处的指针。另一方面,RISC处理器每次比较测试都需要额外的周期。
内存架构:dsp通常支持不同于通用计算系统的系统内存架构。dsp利用哈佛架构,允许从两个不同的外部存储器中持续的单周期访问两个字的数据。例如,器件SHARC dsp具有集成在片上的2或4兆双端口SRAM。这个内存是直接寻址的,而不是像RISC处理器那样的缓存。对于CPU来说,这个片上内存看起来就像一块独特的内存,而不仅仅是系统中其他地方内存的高速副本。原因是dsp是典型的嵌入式处理器。它们的片上存储器通常足以包含完成任务所需的完整的、重复的DSP程序。每个内存块都是双端口的,用于单周期,由核心处理器和I/O处理器或DMA控制器独立访问(图2)。双端口内存和单独的片上总线允许从核心传输两次数据,从I/O传输一次数据,所有这些都在一个周期内完成。
中断功能:由于DSP是用于实时系统的操作,因此高效、复杂和可预测的中断处理对DSP至关重要。RISC处理器具有高度流水线的架构,往往具有缓慢的中断响应时间和有限的中断能力。上下文切换应该非常快。高级dsp,如新的ADSP-21csp01和Devices的ADSP-2106x浮点系列支持完整的可选寄存器集,允许单周期上下文切换以支持中断处理。(注册文件窗口不同,因为它的目的是加速参数传递,而不是保存整个上下文。)
除了内部中断外,高级DSP还将支持至少四个独立的外部中断。中断延迟将保持在几个周期内,并且必须是可预测的。中断应该是可嵌套的和可优先排序的。此外,实时启用和禁用特定中断应该很容易。
硬件循环:由于信号处理算法是重复的,因此高效的环路对数字信号处理至关重要。一个好的DSP将通过专用的内部硬件支持零开销环路。也就是说,芯片将监视循环条件和终止,并与所有其他操作并行决定是否增加程序计数器或分支,而不会对循环的顶部造成周期时间损失。另一方面,RISC处理器必须在每个循环结束时进行测试和分支,每个循环和每次通过至少要花费一个额外的周期。嵌套循环在信号处理算法中也很常见;DSP循环硬件应该支持至少四层嵌套循环的深度。RISC处理器还没有发展到支持这些基本的信号处理需求。
条件执行:依赖于数据的执行对于信号处理非常重要。由于这个原因,高级dsp,如ADSP-2100系列和ADSP-2106x SHARC浮点系列,支持大多数基本指令的条件执行:在单个指令中,处理器测试条件代码,如果为真,则在同一周期内执行操作。这可以对计算密集型算法产生巨大的影响。英特尔发现了i860的这个问题,并增加了一个图形单元来处理高性能z缓冲所需的条件存储操作。
接口:dsp处理来自数字转换器的真实信号,并将结果发送到D/A转换器。由于这个原因,dsp通常包含串行端口,作为到这些设备的廉价接口。高级dsp增加硬件以提高操作效率,例如双缓冲和自动缓冲。由于这些输入/输出信号可能来自并进入非线性编解码器,因此高级DSP可能具有用于零开销a律和μ律扩展的专用硬件。此外,串行端口可能具有简化与T1和CEPT数据传输线接口的功能。
该SHARC串行端口的设计,以最大限度地提高吞吐量与硬件是灵活的,但调整到各种信号类型。它们的特点包括:每个串行端口可以自动接收和/或发送一整块数据,独立发送和接收——每个端口都有一个数据缓冲寄存器以及一个移位寄存器,多通道模式用于TDM。
编程注意事项:一度,dsp和risc之间的显著区别在于它们的编程模型。由于DSP本身具有性能驱动的特性,因此DSP的编程大多采用汇编语言,以获得处理器的最佳性能。对于定点dsp来说,这通常仍然是正确的,但对于ADSP-2100系列直观的代数汇编语言(图3)来说,这一点要容易得多。在不牺牲性能的情况下,它改善了促使许多程序员倾向于使用C等高级语言的易用性问题。
另一方面,用高级语言对浮点dsp进行更有效的编程。浮点计算避免了c中不存在的分数数据类型,此外,体系结构决策会影响编译器的效率。例如,ADSP-2106x SHARC系列的大而统一的地址空间使编译器更容易分配内存。此外,它们的大而灵活的寄存器文件提高了效率。
我们产品战略的核心是提供工具和DSP核心,使我们能够用高级语言高效地编程我们的固定和浮点DSP。这就是ADSP-21csp(一个新的并发信号处理器家族)背后的驱动力。然而,尽管使用高级语言,DSP程序员必须能够降低语言水平(以最小的痛苦)来提高时间关键例程的性能。
越来越多的DSP设计是按照这个顺序编程的:首先,用高级语言编写软件原型并进行调试。这种原型通常会产生足够的性能。然而,更普遍的是,需要提高性能,因此在模拟中将高级代码绘制成直方图,以找到需要最多执行时间的部分。然后用汇编语言手工编写临界区。直方图和手工编码过程迭代,直到满足性能目标。
虽然DSP和risc之间的差异很多,但这两种架构在编程领域趋于融合,这种融合是由上市时间和DSP在应用中不断发展的角色驱动的。擅长快速开发可工作的C程序的程序员使用它们将产品更快地推向市场。同时,dsp承担更多的系统管理功能,如用户界面或系统控制,并且需要提供高水平的语言效率,以与以前分配这些控制任务的微处理器和RISC处理器竞争。
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308