DSP芯片和DSP技术的问题

DSP芯片和DSP技术的问题,第1张

你说的是其中的一部分知识,是DSP处理的信息的原理。

要向学习DSP的硬件开发,还要学习微机原理,由单片机系统的设计经验最好。

还有就是DSP的开发环境,也就是CCS,要掌握常用的编程语言,有汇编语言和C语言的编程经验最好

首先要了解DSP的特点。

数字信号处理相对于模拟信号处理有很大的优越性,表现在精度高、灵活性大、可靠性好、易于大规模集成等方面。随着人们对实时信号处理要求的不断提高和大规模集成电路技术的迅速发展,数字信号处理技术也发生着日新月异的变革。实时数字信号处理技术的核心和标志是数字信号处理器。自第一个微处理器问世以来,微处理器技术水平得到了十分迅速的提高,而快速傅立叶交换等实用算法的提出促进了专门实现数字信号处理的一类微处理器的分化和发展。数字信号处理有别于普通的科学计算与分析,它强调运算处理的实时性,因此DSP除了具备普通微处理器所强调的高速运算和控制功能外,针对实时数字信号处理,在处理器结构、指令系统、指令流程上具有许多新的特征,其特点如下:

(1) 算术单元

具有硬件乘法器和多功能运算单元,硬件乘法器可以在单个指令周期内完成乘法 *** 作,这是DSP区别于通用的微处理器的一个重要标志。多功能运算单元可以完成加减、逻辑、移位、数据传送等 *** 作。新一代的DSP内部甚至还包含多个并行的运算单元。以提高其处理能力。

针对滤波、相关、矩阵运算等需要大量乘和累加运算的特点,DSP的算术单元的乘法器和加法器,可以在一个时钟周期内完成相乘、累加两个运算。近年出现的某些DSP如ADSP2106X、DSP96000系列DSP可以同时进行乘、加、减运算,大大加快了FFT的蝶形运算速度。

(2) 总线结构

传统的通用处理器采用统一的程序和数据空间、共享的程序和数据总线结构,即所谓的冯•诺依曼结构。DSP普遍采用了数据总线和程序总线分离的哈佛结构或者改进的哈佛结构,极大的提高了指令执行速度。片内的多套总线可以同时进行取指令和多个数据存取 *** 作,许多DSP片内嵌有DMA控制器,配合片内多总线结构,使数据块传送速度大大提高。

如TI公司的C6000系列的DSP采用改进的哈佛结构,内部有一套256位宽度的程序总线、两套32位的数据总线和一套32位的DMA总线。ADI公司的SHARC系列DSP采用超级哈佛结构(Super Harvared Architecture Computer),内部集成了三套总线,即程序存储器总线、数据存储器总线和输入输出总线。

(3) 专用寻址单元

DSP面向数据密集型应用,伴随着频繁的数据访问,数据地址的计算也需要大量时间。DSP内部配置了专用的寻址单元,用于地址的修改和更新,它们可以在寻址访问前或访问后自动修改内容,以指向下一个要访问的地址。地址的修改和更新与算术单元并行工作,不需要额外的时间。

DSP的地址产生器支持直接寻址、间接寻址 *** 作,大部分DSP还支持位反转寻址(用于FFT算法)和循环寻址(用于数字滤波算法)。

(4) 片内存储器

针对数字信号处理的数据密集运算的需要,DSP对程序和数据访问的时间要求很高,为了减小指令和数据的传送时间,许多DSP内部集成了高速程序存储器和数据存储器,以提高程序和数据的访问存储器的速度。

如TI公司的C6000系列的DSP内部集成有1M~7M位的程序和数据RAM;ADI公司的SHARC系列DSP内部集成有05M~2M位的程序和数据RAM,Tiger SHARC系列DSP内部集成有6M位的程序和数据RAM。

(5) 流水处理技术

DSP大多采用流水技术,即将一条指令的执行过程分解成取指、译码、取数、执行等若干个阶段,每个阶段称为一级流水。每条指令都由片内多个功能单元分别完成取指、译码、取数、执行等 *** 作,从而在不提高时钟频率的条件下减少了每条指令的执行时间。

(6) DSP与其它处理器的差别

数字信号处理器(DSP)、通用微处理器(MPU)、微控制器(MCU)三者的区别在于:DSP面向高性能、 重复性、数值运算密集型的实时处理;MPU大量应用于计算机;MCU则适用于以控制为主的处理过程。

DSP的运算速度比其它处理器要高得多,以FFT、相关为例,高性能DSP不仅处理速度是MPU的 4~10倍,而且可以连续不断地完成数据的实时输入/输出。DSP结构相对单一,普遍采用汇编语言编程,其任务完成时间的可预测性相对于结构和指令复杂(超标量指令)、严重依赖于编译系统的MPU强得多。以一个FIR滤波器实现为例,每输入一个数据,对应每阶滤波器系数需要一次乘、一次加、一次取指、二次取数,还需要专门的数据移动 *** 作,DSP可以单周期完成乘加并行 *** 作以及3~4次数据存取 *** 作,而普通MPU完成同样的 *** 作至少需要4个指令周期。因此,在相同的指令周期和片内指令缓存条件下,DSP的运算送到可以超过MPU运算速度的4倍以上。

正是基于 DSP的这些优势,在新推出的高性能通用微处理器(如Pentium、Power PC 604e等)片内已经融入了 DSP的功能,而以这种通用微处理器构成的计算机在网络通信、语音图像处理、实时数据分析等方面的效率大大提高。

通常浮点DSP的数据宽度是32位的,它用24位组成尾数,用8位组成阶码。在实际应用中,尾数定义精度,阶码表示动态范围。

定点运算DSP在应用中已取得了极大的成功,而且仍然是DSP应用的主体。然而,随着对DSP处理速度与精度、存储器容量、编程的灵活性和方便性要求的不断提高、自80年代中后期以来,各DSP生产厂家陆续推出了各自的32bit浮点运算DSP。

和定点运算DSP相比,浮点运算DSP具有许多优越性:

浮点运算DSP比定点运算DSP的动态范围要大很多。定点DSP的字长每增加1bit,动态范围扩大6dB。6666bit字长的动态范围为96dB。程序员必须时刻关注溢出的发生。例如,在作图像处理时,图像作旋转、移动等,就很容易产生溢出。这时,要么不断地移位定标,要么作截尾。前者要耗费大量的程序空间和执行时间,后者则很快带来图像质量的劣化。总之,是使整个系统的性能下降。在处理低信噪比信号的场合,例如进行语音识别、雷达和声纳信号处理时,也会发生类似的问题。而32bit浮点运算DSP的动态范围可以作到666536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。

由于浮点DSP的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点DSP。这一优点在实现高精度复杂算法时尤为突出,为复杂算法的实时处理提供了保证。

32bit浮点DSP的总线宽度较定点DSP宽得多,因而寻址空间也要大得多。这一方面为大型复杂算法提供了可能、因为省的DSP目标子程序已使用到几十MB存储器或更多;另一方面也为高级语言编译器、DSP *** 作系统等高级工具软件的应用提供了条件。

DSP的进一步发展,必然是多处理器的应用。

DSP学习入门:

DSP的特点 :

对于没有使用过DSP的初学者来说,第一个困惑就是DSP其他的嵌入式处理器究竟有什么不同,它和单片机,ARM有什么区别事实上,DSP也是一种嵌入式处理器,它完全可以完成单片机的功能。

唯一的重要的区别在于DSP支持单时钟周期的"乘-加"运算这几乎是所有厂家的DSP芯片的一个共有特征几乎所有的DSP处理器的指令集中都会有一条MAC指令,这条指令可以把两个 *** 作数从RAM中取出相乘,然后加到一个累加器中,所有这些 *** 作都在一个时钟周期内完成拥有这样一条指令的处理器就具备了

DSP功能:

具有这条指令就称之为数字信号处理器的原因在于,所有的数字信号处理算法中最为常见的算术 *** 作就是"乘-加"这是因为数字信号处理中大量使用了内积,或称"点积"的运算无论是FIR滤波,FFT,信号相关,数字混频,下变频所有这些数字信号处理的运算经常是将输入信号与一个系数表或者与一个本地参考信号相乘然后积分(累加),这就表现为将两个向量(或称序列)进行点积,在编程上就变成将输入的采样放在一个循环buffer里,本地的系数表或参考信号也放在一个buffer里,然后使用两个指针指向这两个buffer这样就可以在一个loop里面使用一个MAC指令将二者进行点积运算这样的点积运算对与处理器来说是最快的,因为仅需一个始终周期就可以完成一次乘加

了解DSP的这一特点后,当我们设计一个嵌入式系统时,首先要考虑处理器所实现的算法中是否有点积运算,即是否要经常进行两个数组的乘加,(记住数字滤波,相关等都表现为两个数组的点积)如果有的话,每秒要做多少次,这样就能够决定是否采用DSP,采用多高性能的DSP了

浮点与定点 :

浮点与定点也是经常是初学者困惑的问题,在选择DSP器件的时候,是采用浮点还是采用定点,如果用定点是16位还是32位其实这个问题和你的算法所要求的信号的动态范围有关

定点的计算不过是把一个数据当作整数来处理,通常AD采样来的都是整数,这个数相对于真实的模拟信号有一个刻度因子,大家都知道用一个16位的AD去采样一个0到5V的信号,那么AD输出的整数除以2^16再乘以5V就是对应的电压在定点DSP中是直接对这个16位的采样进行处理,并不将它转换成以小数表示的电压,因为定点DSP无法以足够的精度表示一个小数,它只能对整数进行计算

而浮点DSP的优势在于它可以把这个采样得到的整数转换成小数表示的电压,并不损失精度(这个小数用科学记数法来表示),原因在于科学记数法可以表示很大的动态范围的一个信号,以IEEE754浮点数为例,

单精度浮点格式: [31] 1位符号 [30-23]8位指数 [22-00]23位小数

这样的能表示的最小的数是+-2^-149,最大的数是+-(2-2^23)2^127动态范围为20log(最大的数/最小的数)=16676dB 这样大的动态范围使得我们在编程的时候几乎不必考虑乘法和累加的溢出,而如果使用定点处理器编程,对计算结果进行舍入和移位则是家常便饭,这在一定程度上会损失是精度原因在于定点处理处理的信号的动态范围有限,比如16位定点DSP,可以表示整数范围为1-65536,其动态范围为20log(65536/1)=96dB对于32定点DSP,动态范围为20log(2^32/1)=192dB,远小于32位ieee浮点数的16676dB,但是,实际上192dB对绝大多数应用所处理的信号已经足够了。

由于AD转换器的位数限制,一般输入信号的动态范围都比较小,但在DSP的信号处理中,由于点积运算会使中间节点信号的动态范围增加,所以主要考虑信号处理流程中中间结果的动态范围,以及算法对中间结果的精度要求,来选择相应的DSP另外就是浮点的DSP更易于编程,定点DSP编程中程序员要不断调整中间结果的P,Q值,实际就是不断对中间结果进行移位调整和舍入。

DSP与RTOS:

TI的CCS提供BIOS,ADI的VDSP提供VDK,都是基于各自DSP的嵌入式多任务内核DSP编程可以用单用C,也可以用汇编,或者二者结合,一般软件编译工具都提供了很好的支持我不想在这里多说BIOS,VDK怎么用这在相应的文档里说的很详细我想给初学者说说DSP的RTOS原理用短短几段话说这个复杂的东西也是挑战!

其实DSP的RTOS和基于其他处理器的通用RTOS没什么大的区别,现在几乎人人皆知的uCOSii也很容易移植到DSP上来,只要把寄存器保存与恢复部分和堆栈部分改改就可以一般在用BIOS和VDK之前,先看看 *** 作系统原理的书比较好uCOS那本书也不错

BIOS和VDK其实是一个RTOS内核函数集,DSP的应用程序会和这些函数连接成一个可执行文件其实实现一个简单的多任务内核并不复杂,首先定义好内核的各种数据结构,然后写一个scheduler函数,功能是从所有就绪任务中(通过查找就绪任务队列或就绪任务表)找出优先级最高的任务,并恢复其执行然后在此基础上写几个用于任务间通信的函数就可以了,比如event,message box,等等

RTOS一般采用抢先式的任务调度方式,举例说当任务A等待的资源available的时候,DSP会执行一个任务调度函数scheduler,这个函数会检查当前任务是否比任务A优先级低,如果是的话,就会把它当前挂起,然后把任务A保存在堆栈里寄存器值全部pop到DSP处理器中(这就是所谓的任务现场恢复)接着scheduler还会把从堆栈中取出任务A挂起时的程序执行的地址,pop到PC,使任务A继续执行这样当前任务就被任务A抢先了

使用RTOS之后,每个任务都会有一个主函数,这个函数的起始地址就是该任务的入口一般每个任务的主函数里有一个死循环,这个循环使该任务周期地执行,完成一部分算法模块的功能,其实这个函数跟普通函数没任何区别,类似于C语言中的main函数一个任务创建的时候,RTOS会把这个函数入口地址压入任务的堆栈中,好象这个函数(任务)刚发生过一次中断一样一旦这个新创建任务的优先级在就绪队列中是最高的,RTOS就会从其堆栈中d出其入口地址开始执行

有一个疑问是,不使用RTOS,而是简单使用一个主循环在程序中调用各个函数模块,一样可以实现软件的调度执行那么,这种常用的方法与使用RTOS相比有什么区别呢其实,使用主循环的方法不过是一种没有优先级的顺序执行的调度策略而已这种方法的缺点在于,主循环中调用的各个函数是顺序执行的,那么,即使是一个无关紧要的函数(比如闪烁一个LED),只要他不主动返回,也会一直执行直到结束,这时,如果发生一个重要的事件(比如DMA buffer full 中断),就会得不到及时的响应和处理,只能等到那个闪烁LED的函数执行完毕这样就使整个DSP处理的优先次序十分不合理而在使用了RTOS之后,当一个重要的事件发生时,中断处理会进入RTOS,并调用scheduler,这时scheduler 会让处理这一事件的任务抢占DSP处理器(因为它的优先级高)而哪个闪烁LED任务即使晚执行几毫秒都没任何影响这样整个DSP的调度策略就十分合理。

在Matlab2022b中生成DSP配置环境的步骤如下:

1、在Matlab命令窗口中输入以下命令,打开DSPSystemToolbox。

2、在DSPSystemToolbox中,单击"Tools"菜单并选择"GenerateMATLABCodeforModel"。这将打开"GenerateMATLABCodeforModel"窗口。

3、在"GenerateMATLABCodeforModel"窗口中,选择要导出的模型和文件类型。

4、配置代码生成选项,例如代码生成目标、优化级别和目标硬件平台。

5、单击"Generate"按钮生成代码。生成的代码将包括用于配置DSP环境的文件和脚本。

6、运行生成的代码,配置DSP环境。如果生成的是C代码,可以将其编译成可执行文件并在目标硬件上运行。如果生成的是VHDL代码,可以将其加载到FPGA上并进行硬件验证。

您好,通常情况下,DSP芯片可以使用C++语言进行编程。至于C++11,是否支持取决于您所使用的开发环境以及DSP芯片的型号和型号支持的C++标准。

如果您的DSP芯片支持C++11,则可以使用具有C++11功能的编译器进行编程。这包括对于C++11新增的关键字、语法以及标准库的支持。通常,各种流行的编译器如GCC,Clang以及IAR等都提供了对于C++11的支持。

如果您在DSP芯片上使用C++11进行编程,那么需要确保您选择的编译器对于您所使用的DSP芯片进行了支持。

希望这些信息对您有所帮助。如果您还有其他疑问或者需要进一步的帮助,请随时回复我。

对于学习DSP重要的是理清外设的工作 构架,相应的寄存器如何设置,没有必 要对寄存器花太多的时间去研究,用的 时候能找到(寄存器的名称都是英文的 缩写,很好理解的)。学习DSP,先找 本中文教材入个门,之后你会发现好多 地方、尤其是真正要用的,往往也是最 复杂的地方书上都找不到,更谈不上做 什么项目了,这时候就要开始深入研究 Data Sheet,以及官网的源代码示例 有了之前的中文教材基础看起来就快多 了;学习DSP重要的不是会编程,而是 算法的研究(Matlab/Simulnk仿真就不

DSP使用时一般是:DSP开发板+仿真器,实际中可能还需要一些其它外围的小配件。

仿真器作用:主要是通过仿真器将DSP开发板与电脑连接,这样所编写的程序才能写入DSP芯片,以及在计算机上通过(CCS)调试DSP开发板,没有仿真器几乎做不了什么(高手可能出外),现在仿真器一般都是USB借口的,比如TDS510增强型DSP仿真器等等,可以对各种系列DSP使用。

开发板按照板上的DSP芯片信号又分为:2000系列(一般自动控制用),5000系列(一般数字信号处理用),6000系列(一般图像处理用)

以上就是关于DSP芯片和DSP技术的问题全部的内容,包括:DSP芯片和DSP技术的问题、浮点DSP,浮点DSP是什么意思、DSP学习入门等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9611527.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存