**这是本文档旧的修订版!**

FPGA是一种可编程的数字逻辑芯片,我们可以通过对其编程实现几乎任何的数字功能。可以说在数字世界里它无所不能,就像乐高的积木一样可以搭建各种不同的功能模块,实现你所希望的各种功能,当然,首先你必须掌握最基本的数字逻辑知识,学会一种用来构建各种功能的工具语言(在这里我们推荐广受欢迎的Verilog),再次你要动脑(考验的是你的逻辑思维是否清晰),一个优秀的建筑师的作品是在脑子里勾画出来的,而不是拿积木碰运气拼凑出来的。

用FPGA做设计的一般工作流程:

  1. 在电脑上通过绘制电路图或者文本文件描述的方式来描述一个你想要实现的“数字功能”
  2. 在电脑上使用FPGA厂商提供的软件来编译你描述的“逻辑功能”,生成一个可以下载到FPGA内的二进制文件
  3. 将你的电脑连接FPGA,将上述生成的二进制文件下载到FPGA中去
  4. 你的FPGA就会执行你设想的“逻辑功能”

记住这些:

  • 你可以任意多次地下载配制FPGA,没有次数限制,每次可以是不同的功能。如果在你的设计中出现了错误,只要修复你的”逻辑功能“,再重新编译,再重现下载就可以。不需要重新设计PCB,不需要重新焊接或更换元器件。
  • 所有的逻辑都是运行在FPGA内部,也就是硅片上,因此相对于用分立元器件搭建的电路板而言,在FPGA上你的设计会运行的更快
  • 每次断电FPGA芯片本身就会失去其功能,必须在下一次加电的时候重新从为FPGA搭配的Flash中下载代码才能让FPGA重新工作

主要厂商

  • Altera是专注于可编程逻辑器件(PLDs)、重配置复杂数字电路的美国公司。该公司于1984年发布器第一款PLD,目前已经是全球最大的PLD供应商,第二大的FPGA供应商,其主要产品线为高端的Stratix,中端Arria以及低端的Cyclone系列FPGA以及MAX系列的CPLDs,其设计软件为Quartus II以及Enpirion 系列的PowerSoC DC-DC电源方案. 2015年12月8日Altera以167亿美元卖给Intel,正式已经成为Intel的一个产品部门 - PSG(可编程系统部)。更多最新信息参见Wikipedia关于Altera的介绍

  • Lattice Semi是一家高性能可编程逻辑器件(FPGAs,CPLD,一季SPLDs)的美国公司,成立于1983年,在全球有大约700名员工,为全球第三的FPGA供应商,全球第二的CPLDs & SPLDs。其主要产品线为高端的ECP系列,中端的MACH系列以及低端的ICE系列,其设计软件为Lattice Diamond。更多最新信息参见Wikipedia关于Lattice Semiconductor公司的介绍

  • Cypress是美国一家在嵌入式系统领域(汽车电子、工业控制、网络平台到高交互消费、移动设备)专注于高性能、高质量解决方案的设计和生产企业。它提供比较宽泛但差异化的产品线,比如NOR Flash存储器、F-RAM™以及SRAM, Traveo™ 微控制器, 业界独特的PSoC® 可编程片上系统, 模拟和PMIC电源管理集成电路, CapSense® 电容触摸感知控制器,以及无线低功耗蓝牙BLE 和USB连接方案。更多最新信息参见Wikipedia关于Cypress Semiconductor公司的介绍

  • Actel已经被Microsemi收购,主要产品为非易失, 低功耗的FPGA,混合信号FPGA以及可编程逻辑方案。其产品线有反熔丝结构的FPGA和基于Flash的FPGA两种,主要用于高可靠性的领域,比如航空航天。MicroSemi也已经被MicroChip收购。更多最新信息参见Wikipedia关于Actel公司的介绍

FPGA和CPLD的区别

FPGA和CPLD是一回事么?不是的,它们都是可编程的数字逻辑芯片,但有着不同的特性。

  • FPGA是细颗粒的器件,意味着它们由非常多(高达10万以上)的微小的由触发器构成的逻辑功能块组成,而CPLD则是粗颗粒的器件,它们由相对较少的(最多几百个)但比较大的由触发器构成的逻辑块组成
  • FPGA是基于RAM的,每次上电的时候需要重新下载配置,而CPLD是基于EEPROM的,上电的时候就开始工作;
  • FPGA有特殊的布线资源已实现有效的运算功能(二进制计数器、加法器、比较器等),CPLD则没有;

总之,FPGA包含比较大的数字设计,CPLD值包含小的设计

FPGA和微控制器的区别

FPGA和微控制器是一回事么?不!

  • FPGAs实现的可编程逻辑单元能够并行执行;
  • 微控制器是基于CPU架构的,以串行的方式执行指令,虽然其片上的外设能够与它们的CPU并行操作,但它们相比起FPGA可编程性更弱。

在进入正式的学习之前,先给大家提供两本基础的英文书,同学们可以下载了进行阅读。


1 数字逻辑、可编程逻辑及FPGA

FPGA(Field Programmable Gate Array)译作中文为:现场可编程门阵列,也就是设计者可以在现场对可定制的数字逻辑进行编程的集成电路,相比于其它的硬件构成,它允许你构建你所需要的硬件而不需要ASIC(专用集成电路),而且比采用微处理器内核更简单、快速、省电。

关于FPGA的大概介绍,参考我们的培训文档:ECBC可编程逻辑基础PPT

1.1 为什么用FPGA?

FPGA的技术优势:灵活的开发周期、更低的设计迭代成本、更低的一次性工程费用(NRE),易于评估和实现的可选设计架构,新产品上市时间快。 相比于ASICMCU来讲,FPGA具有以下优势:

  1. 功能强大,并大量并行处理结构;可以实现数字设计领域几乎所有的功能 - 组合逻辑、时序逻辑、存储、处理器;现今的FPGA芯片集成了更多功能,比如PLL时钟产生、分配、驱动,支持各种高速接口规范的可编程IO,硬核化的SPII2C总线以及ARM内核等,增强的DSP单元,Altera公司(现已被Intel收购)的MAX10甚至集成了串行ADC能够对监测环境的温度。
  2. 开发快,上市时间短,适合原型设计或小批量产品,FPGA高度灵活,设计实现和后续优化的灵活性可以显著影响项目的进度、设计的复杂度,降低项目的风险,便于更改和升级。
  3. 重复编程/配置,灵活、快速
  4. 集成度高,可以通过选用不同规模的器件实现自己所需要的功能,内部功能模块之间的通信和接口的速度、性能都会较多个分立的芯片之间互连有明显的改善,节省板卡空间,便于调试

1.2 FPGA设计需要的技能

FPGA在各个领域都是必不可少的一种硬件工具,掌握并有效使用FPGA对当代的电子设计工程师来讲是非常必要的,要做到较好的FPGA设计需要具备如下的一些技能:

1.2.1 具备自己设计高速数字电路板(PCB)的能力并且掌握[[DSP]]的基础理论
  • PCB硬件与接口设计
  • 逻辑电路设计
  • 硬件仿真
  • 硬件模块调试
  • PCB设计布局
  • 信号完整性及终端匹配
  • DSP算法的硬件实现
  • 功耗与去藕设计
  • 板级引脚分配
  • I/O特性的定义
  • 设计优化权衡
  • FPGA器件和封装选择
1.2.2 还要掌握至少一门硬件描述语言(HDL)
  • HDL语言的设计输入
  • 测试平台的开发
  • 设计约束
  • 脚本实现自动化处理
  • HDL流程文件的配置管理
  • 支持设计复用
1.2.3 从系统高度设计你的系统
  • 处理器需求分析
  • 处理器架构选择
  • 系统级设计的层次结构定义
  • 系统模块的集成与接口测试
  • 数据流的定义
  • 硬件/软件实现的权衡
  • 功能划分和模块化设计
  • 系统级测试、调试和验证
1.2.4 具体实现 - 通过软件/DSP设计
  • 处理器代码模块的定义
  • DSP算法的软件实现
  • 在处理器上运行操作系统
  • 代码的编写和测试
  • 常规的代码调试和验证
  • 代码的配置管理

1.5 FPGA的选型决策原则

  1. 功能/资源:逻辑单元、存储器、处理能力、IO、处理器内核、DSP
  2. 封装:满足管脚数量以及板卡的物理尺寸要求
  3. 功耗:满足系统对供电的限制需求
  4. 开发工具/难度:影响设计难度和开发时间,尽可能选择易于开发、调试的器件架构
  5. 系统成本:包括配置RAM、外供电源、时钟等,除了器件成本之外还要考虑实现成本、支持成本等。
  6. 购买难度:价钱/数量/供货渠道
  7. 灵活性:便于将来的产品修改和升级
  8. 技术支持:供应商是否能够提供良好的技术支持,乃至培训

1.7 FPGA应用中的注意事项

1.7.1 硬件设计
  1. 管脚分配:输入/输出类型,预留功能管脚,方便布线
  2. 时钟:全局时钟 vs 局部时钟,PLL vs DLL,是否驱动
  3. 电源:内核电压/接口电压及其相应电流,上电时序
  4. 编程:JTAG、配置、在线更新
  5. 测试点:关键信号 - 时钟、电源、关键IO
1.7.2 代码开发
  1. 善用IP Core:调用原厂提供的经过验证过的IP内核
  2. 硬件设计概念:并行工作、时延
  3. 充分仿真:功能仿真、时序仿真、TestBench
  4. 调试:使用原厂提供的片上逻辑分析工具

1.8 FPGA学习和使用要借助的资源

  • 工具:开发板、评估板、调试工具、编译/仿真软件
  • IP Cores:原厂/官方提供、开源组织、其他人验证
  • 参考设计: 设计指南、系统应用、视频教程
  • 技术支持:原厂的FAE、第三方设计公司、社区/论坛/QQ群

1.9 IP Cores的有效使用

随着电子系统越来越复杂,我们不可能任何一个设计都从头自己写代码,必须学会站在巨人的肩上,充分利用现有的资源,尽快地完成自己的设计。经过几十年可编程逻辑技术的发展,可以说几乎所有的常见功能都能够找到可以参考甚至可以直接调用的IP内核,获取这些IP、能够争取地使用这些IP就是一种非常重要的能力。到哪里去找到可靠使用的内核呢?推荐如下几个途径:

  • 来自原厂的IP内核:一般已经包含在其编译系统中,其官方网站上也会有很详细的文档介绍,关于该IP内核的功能、结构调用、所支持的器件、所占的系统资源等。
  • 国际知名开源网站上的IP核:比如www.opencores.org,这个网站几乎在全球的FPGA开发者中间家喻户晓,几乎任何重要的逻辑功能模块都能够在这个网站上找到相应的参考。那些经过WBC认证的代码质量会比较高,不过由于每个人的设计场景会稍微不同,直接调用这些IP Cores未必合适,能够参考这些IP核的设计思路也是对自己的设计非常有益的。

  • 我们StepFPGA将来也会围绕我们的小脚丫FPGA平台将用户构建的各种优秀功能模块经验证、审核以后发布出来,也希望通过这么一个开源的平台帮助大家的学习和设计。也希望更多的设计者能够将自己的设计贡献、分享出来。