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

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

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

记住这些:

都有哪些FPGA厂商?

FPGA和CPLD FPGA和CPLD是一回事么?不是的。 Both are programmable digital logic chips and are made by the same companies. But they have different characteristics.

In general, FPGAs can contain large digital designs, while CPLDs can contain small designs only.

FPGA和微控制器: Are FPGAs and microcontrollers the same thing? No

Microcontrollers have on-chip peripherals that also execute in parallel with their CPU. But they are still much less configurable than FPGAs.

在进入正式的学习之前,先给大家提供两本基础的英文书,同学们可以下载了进行阅读(在无法上网和流量将用尽的时候最好、最让自己不内疚的消遣方式)

同时建议大家能够大量阅读维基百科上面关于FPGA的词条信息,访问维基百科不需要翻墙,但同学们一定要阅读英文的资料,而不是中文的。

来,正式开始宏大的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]]的基础理论
1.2.2 还要掌握至少一门硬件描述语言(HDL)
1.2.3 从系统高度设计你的系统
1.2.4 具体实现 - 通过软件/DSP设计

1.3 PLD/FPGA的结构

1.3.1 FPGA基本功能

FPGA结构

组成数字电路的三个基本部分为:门、寄存器以及将这些门(Gate)、寄存器(Register)连接起来的连线(Wire)。

FPGA逻辑单元构成举例

1.3.2 FPGA增强功能
  1. 内置处理器:软核 & 硬核 & DSP
  2. 时钟及管理:PLLDLL、驱动/分配
  3. IO:多种高速收发、DDR存储器访问、可编程数控阻抗
  4. 嵌入MAC单元 - 高效浮点运算
  5. 各种内置存储器:双口RAMFIFO
  6. 各种常用接口:I2CSPI
  7. 系统监控:内置ADCs

1.5 FPGA的选型决策原则

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

1.6 设计流程及工具

当前FPGA的设计最常用的都是通过硬件描述语言(HDL),主要有两种 - Verilog HDL或VHDL语言。

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学习和使用要借助的资源

1.9 IP Cores的有效使用

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