两者的优势不一样。在硬件层面,DSP是ASIC,如同CPU GPU一样,适宜于量产降低成本,缺点是(硬件)设计一旦确定,便不易于修改。而FPGA较灵活,可以通过硬件描述语言进行快速设计和改进,但成本较高,传统上讲用于ASIC的prototype设计。
另外,在软件层面上,给DSP写程序和给多核CPU写程序,给GPU写程序,没有太大区别,DSP有完善的C语言编译器。而FPGA没有“软件设计”这个概念,因为它没有DSP或者CPU中指令的概念,一切逻辑都要通过硬连线实现(除非在FPGA中使用软核模拟,而软核的效率是不能和ASIC相提并论的),虽然硬件描述语言和软件开发语言形式很相似,但实际上是直接对硬件电路进行设计。
所以做FPGA和DSP系统对开发人员的技能要求也是不同的。目前高端的FPGA中都集成了硬核DSP。
一、结构特点
1.FPGA
a.片内有大量的逻辑门和触发器,多为查找表结构,实现工艺多为SRAM
b.可以通过硬件描述语言进行快速设计和改进,能够重复编程
c.掉电后一般会丢失原有逻辑配置;时序难规划;不能处理多事件;不适合条件操作
2.DSP
a.采用数据和程序分离的哈佛结构和改进的哈佛结构,即数据总线和地址总线分开,使程序和数据分别存储在两个分开的空间,允许取指令和执行指令完全重叠。也就是说在执行上一条指令的同时就可取出下一条指令,并进行译码,这大大的提高了微处理器的速度。
b.DSP通过汇编或高级语言(如C语言)进行编程,有完善的C语言编译器
c.具有软硬件等待功能,能与各种存储器接口
d.有中断处理器及定时控制器,便于构成小规模系统
e.有DMA通道控制器及串行通信口等,便于数据传送
f.适宜于量产降低成本,缺点是(硬件)设计一旦确定,便不易于修改
二、内部资源
1.FPGA
a.FPGA侧重于设计具有某个功能的硬件电路,内部资源是VersaTIles(ActelFPGA)之类的微小单元
b.FPGA内部的连线资源将这些功能模块的内部和模块之间的信号连接起来,构成较大的模块。
c.FPGA可以内部实现ALU,加法器,乘法器,累加器,FIFO,SRAM,DDRcontroller,FFT,HDLC,DMA,PWM等等数字电路,也就说我们要用其实现一个特定的或是通用的硬件功能一个或是多个模块,这些模块的各个细节都要要用HDL来描述设计实现
d.普遍用于实现数字电路模块,基本上能实现所有的数字电路,传统的数字功能模块,以及客户产品特定需求的数字处理模块
e.IO的驱动能力或是电压都是可编程配置的
2.DSP
a.DSP主要是算法处理,内部资源主要是乘法器,加法器之类的资源,有SPI接口,UART接口,接受一定的指令集
b.内部的资源基本上都是现成的,需要客户的需要而重新配置
c.但是相对来讲其功能是有局限性的,所以主要用于某些特定的领域
d.内部有很多现成的硬件模块和接口以及控制器,但是需要软件编程设定,可以实现PWM控制,接口控制,UART接口,SPI接口等功能
e.受指令集的时钟周期的限制,DSP不能处理太高的信号
三、适用场合
1.FPGA
FPAG适用于系统高速取样速率(≥几MHZ)、高数据率、框图方式编程、处理任务固定或重复、使用定点。) 适合于高速采样频率下,特别是任务比较固定或重复的情况以及试制样机、系统开发的场合
2.DSP
DSP适用于系统较低取样速率、低数据率、多条件操作、处理复杂的多算法任务、使用C语言编程、系统使用浮点。)适合于较低采样速率下多条件进程、特别是复杂的多算法任务