Q:FPGA设计与DSP设计相比,最大的不同之处在哪里?
A:这个问题要从多个角度看。它们都用于某个功能的硬件电路实现,但是它们的侧重点有所不同。这里涵盖的说一下。
1) 内部资源
FPGA侧重于设计具有某个功能的硬件电路,内部资源是Versatiles(Actel FPGA)之类的微小单元,FPGA的内部单元初始在编程前都是使用的是HDL语言实现硬件电路的设计描述。FPGA内部的连线资源将这些功能模块的内部和模块之间的信号连接起来,构成较大的模块。FPGA可以内部实现ALU,加法器,乘法器,累加器,FIFO,SRAM,DDR controller,FFT,HDLC,DMA,PWM等等数字电路,也就说我们要用其实现一个特定的或是通用的硬件功能一个或是多个模块,这些模块的各个细节都要要用HDL来描述设计实现。目前的FPGA都可以直接内嵌诸如ARM7,CoretexM1,Core8051等微处理器,用于FPGA的软核的,也有的FPGA厂商将一些硬件模块直接做到FPGA中,这些是FPGA内部的硬核。传统的FPGA都是实现纯数字电路的,业界只有Actel的FPGA实现了数模混合的PSC单芯片技术,真正的提升和扩大了FPGA的应用功能和领域。另外多数FPGA都有PLL,DLL之类的锁相环,Slew可调,Actel的还内建了OSC,RTC,Power manager之类的硬件单元,甚至Actel的Fusion系列还内建了600kbps的12bit的ADC以及MOSFET Driver之类模拟接口,内部有User Flash Memeory,Flash ROM等资源可以实现真正的PSC,Bootloader之类的功能。
DSP主要是算法处理,内部资源主要是乘法器,加法器之类的资源,有SPI接口,UART接口,接受一定的指令集,内部的资源基本上都是现成的,需要客户的需要而重新配置,方便于客户的使用,但是相对来讲其功能是有局限性的,所以主要用于某些特定的领域。DSP也有内嵌的锁相环,计数器,Baud rate发生器,有的DSP也有ADC模拟接口。
2) 使用的编程语言
FPGA主要使用HDL,包括VHDl,Verilog,还有数模混合的描述语言Verilog-AMS等。DSP使用C,汇编语言编程。
3) 功能角度
FPGA普遍用于实现数字电路模块,基本上能实现所有的数字电路,传统的数字功能模块,以及客户产品特定需求的数字处理模块。FPGA的IO桥接种类繁多,不同种类的级别的FPGA支持的IO标准和协议都不尽相同,但是这些IO的驱动能力或是电压都是可编程配置的。任何数字功能电路的实现,高速信号的处理,控制领域的信号处理,桥转换协议的实现,Actel的Fusion还能用于电流/电压检测,温度的检测,MOSFET driver,电源管理,其独特的Flash工艺技术可以依靠电池供电工作,和掉电实时保存数据,超低功耗,多种工作模式(Static, Sleep mode),尤其IGLOO芯片的功能在Sleep mode下功耗只有5uW。这样的功耗用于手机,GPS之类的移动手持设备中能发挥更大的功能应用。另外用FPGA实现ASIC的前期的设计验证,FPGA实现DSP的功能,实现CPU的功能,MCU的功能,内存控制器,用于工业的PWM,SVPWM,Clarke,Park的正逆变换的实现,VGA控制,数据的编解码,解复用,高达上Gbps的信号的处理,协议的转换实现等等等等功能,都是DSP难以胜任的。
DSP内部有很多现成的硬件模块和接口以及控制器,但是需要软件编程设定,可以实现PWM控制,接口控制,UART接口,SPI接口等功能。但是由于受指令集的时钟周期的限制,DSP不能处理太高的信号,至于说上Gbps的信号,LVDS之类的信号就很难以涉及了。所以相应的应用领域会有所限制。但是不同的领域客户的设计方案不同,考虑的侧重点不同,有些领域设计者也是爱好使用DSP的,诸如算法实现,协议的处理等等如果换作FPGA来处理那就得不偿失。
FPGA和DSP的区别还有很多,这里先说一点,希望能起到抛砖引玉的作用。具体的环境和设计方案各有其用武之地,设计者要根据自己的需要来选用。
|