标题：CPLD与FPGA
FPGA
（Field－Programmable Gate Array），即现场可编程门阵列，它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路（ASIC）领域中的一种半定制电路而出现的，既解决了定制电路的不足，又克服了原有可编程器件门电路数有限的缺点。目前以硬件描述语言（Verilog 或 VHDL）所完成的电路设计，可以经过简
      单的综合与布局，快速的烧录至 FPGA 上进行测试，是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路（比如AND、OR、XOR、NOT）或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面，这些可编辑的元件里也包含记忆元件例如触发器（Flip－flop）或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来，就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变，所以FPGA可以完成所需要的逻辑功能。
FPGA一般来说比ASIC（专用集成芯片）的速度要慢，无法完成复杂的设计，而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品，可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力，所以这些设计的开发是在普通的FPGA上完成的，然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD（复杂可编程逻辑器件备）。
CPLD与FPGA
二者关系早在1980年代中期，FPGA已经在PLD设备中扎根。CPLD和FPGA包括了一些相对大数量的可以编辑逻辑单元。CPLD逻辑门的密度在几千到几万个逻辑单元之间，而FPGA通常是在几万到几百万。
CPLD和FPGA的主要区别是他们的系统结构。CPLD是一个有点限制性的结构。这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。这样的结果是缺乏编辑灵活性，但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而FPGA却是有很多的连接单元，这样虽然让它可以更加灵活的编辑，但是结构却复杂的多。
CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块（比如加法器和乘法器）和内置的记忆体。一个因此有关的重要区别是很多新的FPGA支持完全的或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。

FPGA的工作原理FPGA采用了逻辑单元阵列LCA（Logic Cell Array）这样一个概念，内部包括可配置逻辑模块CLB（Configurable Logic Block）、输出输入模块IOB（Input Output Block）和内部连线（Interconnect）三个部分。
FPGA的基本特点1）采用FPGA设计ASIC电路(特定用途集成电路)，用户不需要投片生产，就能得到合用的芯片。
2）FPGA可做其它全定制或半定制ASIC电路的中试样片。
3）FPGA内部有丰富的触发器和I/O引脚。
4）FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5) FPGA采用高速CHMOS工艺，功耗低，可以与CMOS、TTL电平兼容。
可以说，FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。
FPGA是由存放在片内RAM中的程序来设置其工作状态的，因此，工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式，采用不同的编程方式。
加电时，FPGA芯片将EPROM中数据读入片内编程RAM中，配置完成后，FPGA进入工作状态。掉电后，FPGA恢复成白片，内部逻辑关系消失，因此，FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器，只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时，只需换一片EPROM即可。这样，同一片FPGA，不同的编程数据，可以产生不同的电路功能。因此，FPGA的使用非常灵活。
FPGA的配置模式FPGA有多种配置模式：并行主模式为一片FPGA加一片EPROM的方式；主从模式可以支持一片PROM编程多片FPGA；串行模式可以采用串行PROM编程FPGA；外设模式可以将FPGA作为微处理器的外设，由微处理器对其编程。
如何实现快速的时序收敛、降低功耗和成本、优化时钟管理并降低FPGA与PCB并行设计的复杂性等问题，一直是采用FPGA的系统设计工程师需要考虑的关键问题。如今，随着FPGA向更高密度、更大容量、更低功耗和集成更多IP的方向发展，系统设计工程师在从这些优异性能获益的同时，不得不面对由于FPGA前所未有的性能和能力水平而带来的新的设计挑战。
例如，领先FPGA厂商Xilinx最近推出的Virtex-5系列采用65nm工艺，可提供高达33万个逻辑单元、1,200个I/O和大量硬IP块。超大容量和密度使复杂的布线变得更加不可预测，由此带来更严重的时序收敛问题。此外，针对不同应用而集成的更多数量的逻辑功能、DSP、嵌入式处理和接口模块，也让时钟管理和电压分配问题变得更加困难。
幸运地是，FPGA厂商、EDA工具供应商正在通力合作解决65nm FPGA独特的设计挑战。不久以前，Synplicity与Xilinx宣布成立超大容量时序收敛联合工作小组，旨在最大程度地帮助系统设计工程师以更快、更高效的方式应用65nm FPGA器件。设计软件供应商Magma推出的综合工具Blast FPGA能帮助建立优化的布局，加快时序的收敛。
最近FPGA的配置方式已经多元化！

FPGA主要生产厂商
1、Altera 
2、Xilinx 
3、Actel 
4、Lattice 
其中Altera和Xilinx主要生产一般用途FPGA，其主要产品采用RAM工艺。Actel主要提供非易失性FPGA，产品主要基于反熔丝工艺和FLASH工艺。


FPGA设计注意事项
不管你是一名逻辑设计师、硬件工程师或系统工程师，甚或拥有所有这些头衔，只要你在任何一种高速和多协议的复杂系统中使用了FPGA，你就很可能需要努力解决好器件配置、电源管理、IP集成、信号完整性和其他的一些关键设计问题。不过，你不必独自面对这些挑战，因为在当前业内领先的FPGA公司里工作的应用工程师每天都会面对这些问题，而且他们已经提出了一些将令你的设计工作变得更轻松的设计指导原则和解决方案。
I/O信号分配可提供最多的多功能引脚、I/O标准、端接方案和差分对的FPGA在信号分配方面也具有最复杂的设计指导原则。尽管Altera的FPGA器件没有设计指导原则(因为它实现起来比较容易)，但赛灵思的FPGA设计指导原则却很复杂。但不管是哪一种情况，在为I/O引脚分配信号时，都有一些需要牢记的共同步骤：
1. 使用一个电子数据表列出所有计划的信号分配，以及它们的重要属性，例如I/O标准、电压、需要的端接方法和相关的时钟。
2. 检查制造商的块/区域兼容性准则。
3. 考虑使用第二个电子数据表制订FPGA的布局，以确定哪些管脚是通用的、哪些是专用的、哪些支持差分信号对和全局及局部时钟、哪些需要参考电压。
4. 利用以上两个电子数据表的信息和区域兼容性准则，先分配受限制程度最大的信号到引脚上，最后分配受限制最小的。例如，你可能需要先分配串行总线和时钟信号，因为它们通常只分配到一些特定引脚。
5. 按照受限制程度重新分配信号总线。在这个阶段，可能需要仔细权衡同时开关输出(SSO)和不兼容I/O标准等设计问题，尤其是当你具有很多个高速输出或使用了好几个不同的I/O标准时。如果你的设计需要局部/区域时钟，你将可能需要使用高速总线附近的管脚，最好提前记住这个要求，以免最后无法为其安排最合适的引脚。如果某个特定块所选择的I/O标准需要参考电压信号，记住先不要分配这些引脚。差分信号的分配始终要先于单端信号。如果某个FPGA提供了片内端接，那么它也可能适用于其他兼容性规则。
6. 在合适的地方分配剩余的信号。
在这个阶段，考虑写一个只包含端口分配的HDL文件。然后通过使用供应商提供的工具或使用一个文本编辑器手动创建一个限制文件，为I/O标准和SSO等增加必要的支持信息。准备好这些基本文件后，你可以运行布局布线工具来确认是否忽视了一些准则或者做了一个错误的分配。
这将使你在设计的初始阶段就和布局工程师一起工作，共同规划PCB的走线、冗余规划、散热问题和信号完整性。FPGA工具可能可以在这些方面提供帮助，并协助你解决这些问题，因此你必须确保了解你的工具包的功能。
你咨询一位布局专家的时间越晚，你就越有可能需要去处理一些复杂的问题和设计反复，而这些可能可以通过一些前期分析加以避免。一旦你实现了满意的信号分配，你就要用限制文件锁定它们。
------------------- 
基于CMOS的设计主要消耗三类功率：内部的（短路）、漏电的（静态的）以及开关的（电容）。当门电路瞬变时，VDD与地之间短路连接消耗内部功率。漏电功耗是CMOS工艺普遍存在的寄生效应引起的。而开关功耗则是自负载电容,放电造成的。开关功耗与短路功耗合在一起称为动态功耗。下面介绍降低静态功耗和动态功耗的设计技巧。
降低静态功耗简介
虽然静态电流与动态电流相比可以忽略不计，然而对电池供电的手持设备就显得十分重要，在设备通电而不工作时更是如此。静态电流的因素众多，包括处于没有完全关断或接通的状态下的I/O以及内部晶体管的工作电流、内部连线的电阻、输入与三态电驱动器上的拉或下拉电阻。在易失性技术中，保持编程信息也需一定的静态功率。抗熔断是一种非易失性技术，因此信息存储不消耗静态电流。
几种降低静态功耗的设计方法
·驱动输入应有充分的电压电平，因而所有晶体管都是完全通导或关闭的。
·由于I/O线上的上拉或下拉电阻要消耗一定的电流，因此尽量避免使用这些电阻。
·少用驱动电阻或双极晶体管，这些器件需维持一个恒定电流，从而增加了静态电流。
·将时钟引脚按参数表推荐条件连接至低电平。悬空的时钟输入会大大增加静态电流。
·在将设计划分为多个器件时，减少器件间I/O的使用。
eX器件LP方式引脚的使用
Actel eX系列设计了特殊的低功率“休眠”模式。在该引脚驱动至高电平800ns后，器件进入极低功率待机模式，待机电流小于100μA。在低功率模式下，所有I/O（除时钟输入外）都处于三态，而内核全部断电。由于内核被断电，触发器中存储的信息会丢失，在进入工作模式（在引脚驱动至低平200ms后）时，用户需再次对器件初始化。同样，用户也应关闭所有通过CLKA、CLKB以及HCLK输入的时钟。然而这些时钟并不处于三态，时钟就可进入器件，从而增加功耗，因此在低功率模式下，时钟输入必须处于逻辑0或逻辑1。
有时用户很难阻止时钟进入器件。在此场合，用户可使用与CLKA或CLKA相邻的正常输入引脚并在设计中加进CLKINT。这样，时钟将通过靠近时钟引脚的正常输入进入器件，再通过CLKINT向器件提供时钟资源。
采用这种输入电路后，由于常规I/O是三态的，因此用户不必担心时钟进入器件。当然，增加一级门电路会产生0.6ns的较大时钟延时，幸好这在多数低功率设计中是可以接受的。注意应将与CLKINT缓冲器相关的CLKA或CLKB引脚接地。
此外还要注意，CLKINT只可用作连线时钟，HCLK并不具备将内部走线网连接到HCLK的能力，因而HCLK资源不能被常规输入驱动。换句话说，如果使用LP引脚就不能使用HCLK；使用HCLK时就应在外部截断时钟信号。
降低动态功耗动态功耗是在时钟工作且输入正在开关时的功耗。对CMOS电路，动态功耗基本上确定了总功耗。动态功耗包括几个成分，主要是电容负载充电与放电（内部与I/O）以及短路电流。多数动态功率是内部或外部电容向器件充、放电消耗的。如果器件驱动多个I/O负载，大量的动态电流构成总功耗的主要部分。
对设计中给定的驱动器，动态功耗由下式计算
p=CL×V 2 DD×f 
式中，CL是电容负载，VDD是电源电压，f则是开关频率。总功耗是每个驱动器功耗之总和。
由于VDD是固定的，降低内部功耗就要降低平均逻辑开关频率，减少每个时钟沿处的逻辑开关总数、减少连线网络，特别是高频信号连线网络中的电容值。对低功率设计，需要从系统至工艺的每个设计级别中采取相应预防措施，级别越高，效果越好。
FPGA与CPLD的辨别和分类
FPGA与CPLD的辨别和分类主要是根据其结构特点和工作原理。通常的分类方法是：
将以乘积项结构方式构成逻辑行为的器件称为CPLD，如Lattice的ispLSI系列、Xilinx的XC9500系列、Altera的MAX7000S系列和Lattice(原Vantis)的Mach系列等。
将以查表法结构方式构成逻辑行为的器件称为FPGA，如Xilinx的SPARTAN系列、Altera的FLEX10K或ACEX1K系列等。
尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点: 
①CPLD更适合完成各种算法和组合逻辑,FP GA更适合于完成时序逻辑。换句话说,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大,且集成度越高越明显。

FPGA的应用
1．电路设计中FPGA的应用
连接逻辑，控制逻辑是FPGA早期发挥作用比较大的领域也是FPGA应用的基石．事实上在电路设计中应用FPGA的难度还是比较大的这要求开发者要具备相应的硬件知识（电路知识）和软件应用能力（开发工具）这方面的人才总是紧缺的，往往都从事新技术，新产品的开发成功的产品将变成市场主流基础产品供产品设计者应用在不远的将来，通用和专用IP的设计将成为一个热门行业！搞电路设计的前提是必须要具备一定的硬件知识．在这个层面，干重于学，当然，快速入门是很重要的，越好的位子越不等人电路开发是黄金饭碗．
2．产品设计
把相对成熟的技术应用到某些特定领域如通讯，视频，信息处理等等开发出满足行业需要并能被行业客户接受的产品这方面主要是FPGA技术和专业技术的结合问题，另外还有就是与专业客户的界面问题产品设计还包括专业工具类产品及民用产品，前者重点在性能，后者对价格敏感产品设计以实现产品功能为主要目的，FPGA技术是一个实现手段在这个领域，FPGA因为具备接口，控制，功能IP，内嵌CPU等特点有条件实现一个构造简单，固化程度高，功能全面的系统产品设计将是FPGA技术应用最广大的市场，具有极大的爆发性的需求空间产品设计对技术人员的要求比较高，路途也比较漫长不过现在整个行业正处在组建"首发团队"的状态，只要加入，前途光明产品设计是一种职业发展方向定位，不是简单的爱好就能做到的！产品设计领域会造就大量的企业和企业家，是一个近期的发展热点和机遇
3．系统级应用
系统级的应用是FPGA与传统的计算机技术结合，实现一种FPGA版的计算机系统如用Xilinx　V-4, V-5系列的FPGA，实现内嵌POWER　PC　CPU, 然后再配合各种外围功能，实现一个基本环境，在这个平台上跑LINUX等系统这个系统也就支持各种标准外设和功能接口（如图象接口）了这对于快速构成FPGA大型系统来讲是很有帮助的。这种"山寨"味很浓的系统早期优势不一定很明显，类似ARM系统的境况但若能慢慢发挥出FPGA的优势，逐渐实现一些特色系统也是一种发展方向。若在系统级应用中，开发人员不具备系统的扩充开发能力，只是搞搞编程是没什么意义的，当然设备驱动程序的开发是另一种情况，搞系统级应用看似起点高，但不具备深层开发能力，很可能会变成爱好者，就如很多人会做网页但不能称做会编程类似以上是几点个人开发，希望能帮助想学FPGA但很茫然无措的人理一理思路。这是一个不错的行业，有很好的个人成功机会。但也肯定是一个竞争很激烈的行业，关键看的就是速度和深度当然还有市场适应能力。