早在1980年代中期,fpga已经在pld设备中扎根。cpld和fpga包括了一些相对大数量的可以编辑逻辑单元。cpld逻辑门的密度在几千到几万个逻辑单元之间,而fpga通常是在几万到几百万。
cpld和fpga的主要区别是他们的系统结构。cpld是一个有点限制性的结构。这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而fpga却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。
cpld和fpga另外一个区别是大多数的fpga含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。一个因此有关的重要区别是很多新的fpga支持完全的或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些fpga可以让设备的一部分重新编辑而其他部分继续正常运行。
尽管fpga和cpld都是可编程asic器件,有很多共同特点,但由于cpld和fpga结构上的差异,具有各自的特点:
① cpld更适合完成各种算法和组合逻辑,fpga更适合于完成时序逻辑。换句话说,fpga更适合于触发器丰富的结构,而cpld更适合于触发器有限而乘积项丰富的结构。
② cpld的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而fpga的分段式布线结构决定了其延迟的不可预测性。
③ 在编程上fpga比cpld具有更大的灵活性。cpld通过修改具有固定内连电路的逻辑功能来编程,fpga主要通过改变内部连线的布线来编程;fp ga可在逻辑门下编程,而cpld是在逻辑块下编程。
④ fpga的集成度比cpld高,具有更复杂的布线结构和逻辑实现。
⑤ cpld比fpga使用起来更方便。cpld的编程采用e2prom或fastflash技术,无需外部存储器芯片,使用简单。而fpga的编程信息需存放在外部存储器上,使用方法复杂。
⑥ cpld的速度比fpga快,并且具有较大的时间可预测性。这是由于fpga是门级编程,并且clb之间采用分布式互联,而cpld是逻辑块级编程,并且其逻辑块之间的互联是集总式的。
⑦ 在编程方式上,cpld主要是基于e2prom或flash存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。cpld又可分为在编程器上编程和在系统编程两类。fpga大部分是基于sram编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入sram中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。
⑧ cpld保密性好,fpga保密性差。
⑨ 一般情况下,cpld的功耗要比fpga大,且集成度越高越明显。