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

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

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

来,正式开始宏大的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.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.4 主要供应商

  • 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两种,主要用于高可靠性的领域,比如航空航天。更多最新信息参见Wikipedia关于Actel公司的介绍

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

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

1.9 IP Cores的有效使用

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

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

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

在我们的学习系统中我们选用了Lattice Semiconductor公司的MachXO2系列FPGA,主要出于以下几方面的考虑:

  • Lattice Semiconductor公司的FPGA学习和使用门槛最低,易学易用
  • 性价比高,除了适合入门级的学习之用,还能够满足80%以上的企业应用
  • 非常适合于高校教学实验及创新实践

本节我们来看看我们选用的这个系列的FPGA有哪些特点以及应用领域。

2.1 特性

  • 灵活的逻辑架构,256-6864个查找表(LUTs),18-334个输入输出管脚(PIOs)
  • 超低功耗 - 采用先进的65nm低功耗工艺,等待状态时功耗低至22μW,具有可编程、低摆动的差分I/O
  • 最高达256Kbits的用户Flash存储器及最高达240Kbits sysMEM™ 内嵌块RAM,高达54Kbits的分布式RAM,有专用的FIFO控制逻辑
  • 最高达334个hot-socketable输入/输出管脚避免额外的泄漏
  • 可以通过JTAG, SPI, I2C或Wishbone总线进行编程
  • TransFR特性允许在现场设计更新而不干扰设备的运行
  • 可编程sysIO™ 支持LVCMOS, LVTTL, PCI, LVDS, BLVDS, MLVDS, RSDS, LVPECL, SSTL, HSTL以及更多中接口,可编程上拉、下拉模式
  • 灵活的片上时钟处理 - 8个主时钟输入管脚、支持高速I/O的双沿时钟、每个器件内有2个模拟PLL、外部时钟输入时频率范围从7MHz到400MHz
  • 芯片内硬化了SPII2C以及定时器/计数器功能
  • 芯片内有5.5%精度的片上振荡器
  • 每颗芯片都有TraceID进行追踪
  • 最小封装为2.5mmx2.5mm

2.2 结构

MachXO2内部结构功能

可编程部分:

  • FPGA的核心部分是由逻辑门(Logic Gate)、寄存器(Register)以及连线(Wire)构成的可编程的逻辑块,也即此图中的PFUs(Programmable Function Units with Distributed RAM - 带分布式存储器的可编程功能单元),这些逻辑块的规模由两个重要指标表示LUTs和Slices
  • 可编程输入输出管脚PIOs:分成多个Bank的sysIO,每个Bank可以有单独的供电电压Vccio,以支持不同电平的数据传输协议,这些输入输出管脚可以自由分配,并可以通过编程、配置支持多种数据传输协议(不同电平、差分等),IO管脚的输入输出电阻也可以编程、配置
  • 块RAM:在这里称为sysMEM Embedded Block RAM(EBR)

硬核部分: 当今的FPGA除了可编程的逻辑和IO之外,还提供了一系列常用的功能模块,以硬核的方式内嵌在芯片以内,即便用户在设计中不用这些功能,这些资源也存在于系统中。硬核化的优势在于速度快、功耗低,且这些硬核一般为常用的功能块。在MachXO2中内嵌的硬核功能主要有:

  • 嵌入式功能块:Embedded Function Blocks(EFB)- MachXO2主要的EFB包括一个SPI、两个I2C、和一个定时器
  • 程序Flash:On-chip Configuration Flash Memory
  • 用户Flash:User Flash Memory(UFM)
  • PLL/DLL: sysPLL

MachXO2内部的可编程功能单元构成示意图

MachXO2的Slice构成示意图

MachXO2内部的嵌入式功能模块

2.3 资源

上面我们介绍了MachXO2内部的结构,XO2系列不同的型号内部结构是相同的,但资源的多少则取决于所选择的型号,在设计中我们需要根据资源的需求来选用合适的器件,了解到这些器件的资源配置对于我们设计也是有帮助的,可以充分利用器件内部的资源简化外围电路的设计,同时也要知道器件内部的局限性,在外围进行扩展。在我们小脚丫2.0版本中我们选用了XO2-4000的型号(参见MachXO2选型表),它具有如下资源:

  • 4320个查找表
  • 10个嵌入式RAM块,攻击92kbits的容量
  • 34kbits的分布式SRAM
  • 96Kbits的用户Flash存储器
  • 内部有两个PLL和两个DLL
  • 支持DDR/DDR2/LPDDR存储器接口
  • 内部具有配置用的Flash
  • 支持双启动模式
  • 内部有一个SPI模块,2个I2C模块以及一个定时器模块

MachXO2 选型表

O2-256 XO2-640 XO2-640U XO2-1200 XO2-1200U XO2-2000 XO2-2000U XO2-4000 XO2-7000
查找表(LUTs)的密度 256 640 640 1280 1280 2112 2112 4320 6864
EBR RAM块(9 Kbits/block) 0 2 7 7 8 8 10 10 26
EBR SRAM(Kbits) 0 18 64 64 74 74 92 92 240
Dist. SRAM (Kbits) 2 5 5 10 10 16 16 34 54
用户Flash存储(Kbits) 0 24 64 64 80 80 96 96 256
PLL + DLL 0 0 1 + 2 1 + 2 1 + 2 1 + 2 2 + 2 2 + 2 2 + 2
支持DDR/DDR2/LPDDR存储器- - Yes Yes Yes Yes Yes Yes Yes
配置存储器 内部Flash
双启动 Yes Yes Yes Yes Yes Yes Yes Yes Yes
内嵌功能块 I2C (2), SPI (1), Timer (1)
内核电压Vcc 1.2 V ZE ZE - ZE - ZE & HE HE ZE & HE ZE & HE
内核电压Vcc 2.5 - 3.3 V HC HC HC HC HC HC HC HC HC

2.4 管脚分配

2.5 主要应用领域

2.5.1 微处理器的接口扩展
  • 为低成本的微控制器增加通用IO以节省成本
  • 为系统控制处理器增加SPI和I2C接口
  • 快速添加高性能的DDR SRAM和Flash存储器接口
  • 通过采用PLD配置为系统状态寄存器简化系统管理

2.5.2 提高实时性要求较高的功能的性能
  • 在系统上电时通过快速启动逻辑精确地控制信号
  • 可以配置PWM功能以精确产生照明和马达控制所需要的模拟电压
  • 构建传感器缓冲器以及智能中断以保证实时世界的事件能够被捕捉
  • 采用硬件UART克服采用软件实现UART的性能限制

2.5.3 通过硬件加速提高系统的性能
  • 通过基于逻辑的信令过滤机制降低处理器的负荷
  • 可以通过最小的处理器消耗实现图像的旋转、缩放以及合并

2.6 相关设计文档

3.1 Lattice Diamond集成化开发环境

  1. Diamond安装及配置,包括软件的下载、License的申请以及软件的安装整个过程。
  2. Lattice Diamond的使用,以最简单的点亮LED灯为例,简单介绍了一下该软件从编辑输入开始到最终的bitstream下载到FPGA。

3.2 硬件描述语言

在设计FPGA逻辑中有两种硬件设计语言(HDL)可以选择,一种是Verilog HDL,还有一种是VHDL,在我们的设计中选用普及率更广,更容易上手的Verilog,具体如何使用,可以参考如下的几个PPT教程:

3.3 代码规范

规范的代码风格一方面能体现你足够专业,另一方面也是最重要的一方面,代码的规范性有利于开发交流,让代码的可读性大大增强,也有利于降低代码的出错率。


4.1 简介

小脚丫FPGA学习平台是摩尔吧孵化器/斯德普科技公司专门针对FPGA初学者打造的一款性价比最高、学习门槛最低的学习模块系列。系列中所有板子的大小兼容标准的DIP40封装,尺寸只有52mm x 18mm,非常便于携带;并通过MicroUSB端口进行供电和下载,板上选用的芯片兼具了FPGA和CPLD的优点,瞬时上电启动,无需外部重新配置FPGA,是学习数字逻辑绝佳的选择。而且能够直接插在面包板上或以模块的方式放置在其它电路板上以即插即用的方式,大大简化系统的设计。

小脚丫系列产品:

  • STEP-MXO2第一代采用Lattice的MachXO2-1200器件,模块上没有编程功能,有6Pin的JTAG连接器,配合STEP-FT232H编程器一起使用,该模块已经批量生产并被大量使用,初期针对高校数字电路教学的扩展平台也是基于这个版本设计的。
  • STEP-MXO2第二代采用了Lattice的MachXO2-4000器件,更大的逻辑容量能够支持更多的功能,模块本身集成了编程器,不需要外置的编程模块就可以直接使用。另外该模块上增加了更多的输入和输出、LED、数码管显示灯,单个模块完全可以满足高校数字电路教学实验
  • STEP-MAX10采用Altera的MAX10芯片
  • STEP_WIFI采用Altera的MAX10 + Particle针对物联网/云计算的Wifi模块,可以支持更强大的网络连接功能
  • STEP-Baseboard:针对高校数字电路教学设计的扩展学习平台
  • STEP-FT232H:支持小脚丫STEP-MXO2第一代的USB编程器

4.2 特色

  1. 小巧——是目前市场上最小的FPGA开发板,只有一根食指大小。兼容DIP40封装,尺寸52mm*18mm,即插即用;
  2. 方便——MicroUSB供电,携带方便;
  3. 易学——容易上手,只需花1到2个小时就能上手开始设计;
  4. 强大——精心挑选的FPGA芯片,兼具CPLD和FPGA优点,瞬时上电无需外接配置Flash。是性价比最高最适合的FPGA芯片;
  5. 灵活——既可作学习数字逻辑的FPGA开饭,也可作核心功能模块使用,适合各种DIY和原型设计;
  6. 资源——丰富的实例、代码支持;

4.3 扩展应用

小脚丫FPGA模块是兼容标准DIP40封装的功能主板,但该板的功能有限,只是支持一些简单的按键和开关输入、LED/数码管输出,因此更多的功能可以通过扩展来实现,扩展的方式主要有以下三种:

  • 层叠扩展模块: 对于一些简易、单一的功能,比如DDS信号合成、测试测量、红外遥控、传感器等小脚丫FPGA模块上有5V-3.3V的LDO,可以给层叠的功能板提供3.3V电压,400mA以上的电流,如果层叠的功能板需要其它电源,比如+/-5V模拟电压、+1.2V的数字供电电压,可以在层叠的功能板上通过提供的3.3V直流电压进行变换,要注意功能板上的电路总功耗。

    可以层叠扩展的模块示例

  • 学习平台:如果需要更多的功能,一个DIP40大小的板子很难实现,可以做一个比较大的母板,小脚丫FPGA模块可以当成是核心器件/主控芯片来即插即用。由于小脚丫模块采用了DIP40的封装,能够用到的IO管脚只有20多个,因此如果扩展板上需要的IO管脚超过模块能够提供的管脚数量的话,我们采用一些方法对这些管脚进行复用,或者进行串变并的扩展
  • 面包板: 小脚丫FPGA板可以当成一颗功能灵活的IC直接插在面包板上,不需要制作电路板就可以实现一些简单的功能,做一些基础的实验。

5.1 基础实验

  1. 点亮LED灯: 也叫“心跳灯”,软件编程从“Hello world”开始,FPGA编程从点亮LED灯开始,通过这个最基本的功能掌握LED工作原理和了解Verilog程序基本结构
  2. 译码器: 掌握组合逻辑的设计
  3. 乘法器:掌握乘法器的设计
  4. 流水灯:掌握时钟分频、时序控制
  5. 序列检测器:掌握有限状态机的设计
  6. 7段数码管:掌握数码管的驱动显示

5.2 进阶实验

  1. 按键消抖:掌握按键去抖动的设计
  2. 脉冲发生器:掌握PWM波形发生的设计
  3. 呼吸灯:通过PWM来控制LED灯的亮度
  4. 三色灯颜色和亮度控制:通过控制RGB三个灯的亮度可以得到不同颜色和亮度的灯光效果
  5. 旋转编码器控制:通过相位检测
  6. LCD显示:掌握LCD液晶显示驱动的设计

5.3 高阶实验

  1. 带计时功能交通灯:
  2. 简易电子琴:
  3. 数字时钟:
  4. 任意波形产生:通过[DDS]从内建的波形表中按照相位控制字获取相应相位的波形幅度值,再通过DAC得到模拟的任意频率的信号,改变波形表中的信号波形,即可得到不同的模拟波形输出。
  5. 直流电压测量:通过SPI串行总线的低速模数变换器ADC将被测量的直流电压变换为数字量,在LED(8个)上通过点亮不同的LED显示其电压幅度,也可以通过4个7段发光数码管显示其电压值,或在LCD上以数字量的方式显示实际的电压值,将0-255的数字量转变为0-3.3V的直流电压值。

5.4 常用功能verilog代码参考

  • 三八译码
  • 通用分频
  • 数字比较器
  • PWM波形产生
  • FIFO存储器
  1. LED点阵显示屏
  2. 超声波测距
  3. 通用红外遥控
  4. 数字频率计

XO2-4000内部有足够的逻辑功能构成MCU中的ALU,内部的块RAM可以构成MCU需要的内部存储寄存器,另外XO2系列有硬化的SPII2C以及定时器功能,可以构成各种8位、32位的微处理器MCU,Lattice Diamond系统自带支持Wishbone总线的8位单片机MICO8单片机内核以及32位的MICO32处理器内核。据说这两个内核都是来自于著名的开源硬件网站www.opencores.org,在这个网站上可以看到各种经过工程师验证过的内核,比如8051OpenRiscAVRMIPS32,有兴趣的同学可以移植到我们的小脚丫平台上。

FPGA大神Adam Taylor向FPGA开发者推荐的20个资源网站