电子设备应用越来越多地涉及信号处理。家庭影院,计算机图形学,医学成像和电信都依赖于信号处理技术。信号处理需要在复杂但重复的算法中进行快速数学运算。并且许多应用需要实时计算:即,信号是时间的连续函数,必须对其进行采样并转换为数字,以进行数值处理。因此,处理器必须执行在样本到达时对样本执行离散计算的算法。
数字信号处理器(DSP)的架构经过优化,可以处理这些算法。良好的信号处理引擎的特征包括:快速,灵活的算术计算单元(例如,乘法器,累加器,桶形移位器);无限制的数据流入和流出计算单元;计算单元中的扩展精度和动态范围(以避免溢出并最小化舍入误差);双地址生成器(用于同时处理二元运算的两个输入);高效的程序排序(包括有效处理循环和中断的能力);
DSP具有与精简指令集计算机(RISC)相同的一些功能。此外,两者都围绕某些核心指令构建,使它们能够以非常高的指令速率运行;并且都避开了内部微码。然而,它们是根本不同的“动物”。 RISC和DSP之间的差异在处理器的
中最为明显
计算单位
数据地址生成器
内存架构
中断功能
循环硬件
< li>条件指令
接口功能
DSP属于两个基本类:定点,一个(通常)基于16位架构16位整数数据类型和浮点,通常采用32位架构,基于具有尾数和指数的数据类型。
计算单位:DSP都包含并行硬件乘法器以支持单周期乘法,它们的乘法器通常在一个周期内组合乘法和累加。 DSP具有专用的累加器,其寄存器明显宽于标称字大小,以保持精度 - 例如,32位ADSP-2106x SHARC系列中的80位(图1)。与ADSP-21xx系列一样,硬件可能支持从累加器溢出中恢复。此外,DSP都包含全功能的算术逻辑单元(ALU),与乘法器无关。
ALU可能具有特殊功能,例如同时产生的能力用于在时域和频域之间转换信号的快速傅里叶变换(FFT)算法中加速内核例程的和和差。高级DSP将在计算单元中包含饱和逻辑,以防止数据溢出。它还可以提供零开销(即,不需要额外的时钟周期)陷阱来中断算术异常的例程。
复杂的DSP还可以包含单周期桶形移位器(即,能够在一个时钟周期内向左或向右移位字的字段),具有优先级编码器数据缩放,数据压缩/扩展或打包/解包和位操作。它还可以包括专用硬件,以最小化快速划分,平方根和超越函数计算所需的时间。在RISC处理器上找不到具有这些专用功能的计算元素。
地址生成:高效的DSP将使其计算单元保持至少两个独立数据的数据 - 地址生成器。抽头延迟线和系数缓冲器是DSP的特征,但在通用计算中大多是未知的。高效的DSP需要循环缓冲硬件来支持缓冲区。循环缓冲区指针需要在每个周期更新而不会产生开销。此外,缓冲区结束的比较测试需要无延迟命令来重置缓冲区末尾的指针。另一方面,RISC处理器需要额外的周期进行每次比较测试。
存储器架构:DSP通常支持与通用计算系统不同的系统存储器架构。 DSP采用哈佛架构,允许持续单周期访问来自两个不同外部存储器的两个字数据。例如,ADI公司的SHARC DSP具有片上集成的2或4 Mbits双端口SRAM。这个存储器是直接寻址的 - 而不是像RISC处理器中那样的缓存。对于CPU来说,这个片上存储器看起来像一块独特的存储器,而不仅仅是系统中其他地方的高速存储器复制品。原因是DSP通常是嵌入式处理器。它们的片上存储器通常足以包含任务所需的完整,重复的DSP程序。每个存储器模块都是双端口,用于核心处理器和I / O处理器或DMA控制器的单周期独立访问(图2)。双端口存储器和独立的片上总线允许两个数据传输来自内核,一个来自I / O,所有这些都在一个周期内完成。
中断功能:由于DSP旨在用于实时系统,因此高效,复杂且可预测的中断处理对DSP至关重要。 RISC处理器采用高度流水线架构,往往具有较慢的中断响应时间和有限的中断能力。上下文切换应该非常快。高级DSP,如新型ADSP-21csp01和ADI公司的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背后的驱动力,ADSP-21csp是一系列新的并发信号处理器。尽管如此,虽然使用高级语言,DSP程序员必须能够在语言级别下降(尽量减少痛苦),以提高时间关键程序的性能。
DSP设计越来越多地按照以下顺序进行编程:首先,用高级语言编写和调试软件原型。该原型通常可以产生足够的性能。然而,更一般地,需要提高性能,因此高级代码在模拟中被直方图化以找到需要最多执行时间的部分。然后使用汇编语言对关键部分进行手工编码。迭代直方图和手动编码过程,直到满足性能目标。
虽然DSP和RISC之间的差异很多,但这两种架构往往会聚集在编程领域,这是由时间驱动的融合 - 推向市场以及DSP在应用中的不断发展的作用。熟悉快速开发工作C程序的程序员可以使用它们更快地将产品推向市场。同时,DSP采用更多系统管理功能,例如用户界面或系统控制,并且需要提供高级语言效率,以便与之前分配这些控制任务的μC和RISC处理器竞争。
-
dsp
+关注
关注
544文章
7681浏览量
344331 -
嵌入式
+关注
关注
4981文章
18272浏览量
288333
发布评论请先 登录
相关推荐
评论