第3章 FPGA基础与选型

做伺服驱动这些年,我越来越觉得FPGA是个好东西。DSP负责算法运算,FPGA负责接口和逻辑,这种双核架构在高端伺服里几乎是标配。今天咱们就聊聊FPGA的基础知识和选型要点。

3.1 FPGA芯片概述

FPGA,全称是现场可编程门阵列。说白了,就是一块可以反复配置逻辑功能的芯片。你买回来的时候它啥也不是,你给它烧录一个配置文件,它就变成了你想要的电路。

我刚开始接触FPGA时,总觉得它和单片机差不多。后来发现完全不是一回事。单片机是软件执行,一条一条指令跑;FPGA是硬件并行,所有逻辑同时工作。你想想看,在伺服驱动里,编码器信号处理、电流环控制、PWM生成,这些任务如果都用FPGA做,延迟可以做到纳秒级。

FPGA内部主要由三部分组成:

  • 可编程逻辑块(CLB):实现各种逻辑功能,比如与门、或门、触发器
  • 可编程互连资源:把各个逻辑块连起来,形成复杂电路
  • 输入输出块(IOB):和外部芯片通信的接口

现在的FPGA还集成了很多硬核资源,比如DSP单元、块RAM、高速收发器。这些硬核在伺服驱动里特别有用。DSP单元可以做乘法累加,块RAM可以存波形表,高速收发器可以接绝对值编码器。

核心观点:FPGA不是用来替代DSP的,而是和DSP互补。DSP做复杂算法,FPGA做实时控制和接口扩展。两者配合,才能发挥最大效能。

3.2 Xilinx与Altera系列对比

FPGA市场两大巨头,Xilinx和Altera(现在叫Intel FPGA)。这两家我都用过,各有千秋。

对比项 Xilinx Altera/Intel
开发工具 Vivado / ISE Quartus Prime
主流系列 Spartan、Artix、Kintex、Virtex Cyclone、Arria、Stratix
编程语言 VHDL/Verilog/SystemVerilog VHDL/Verilog/SystemVerilog
IP核生态 非常丰富,有大量免费IP 也很丰富,部分需要付费
适合场景 通信、工业、航空航天 工业、消费电子、汽车

我个人习惯用Xilinx的Artix系列做伺服驱动。为什么?因为性价比高。Artix-7系列有足够的逻辑资源和DSP单元,价格还比较亲民。我在一个项目中用过Spartan-6,资源有点紧张,后来换成Artix-7就舒服多了。

Altera的Cyclone系列也不错,特别是Cyclone V,集成了ARM硬核,适合做SoC方案。不过说实话,在伺服驱动领域,Xilinx的市场份额更大,参考资料也多一些。

我的建议:如果你是初学者,从Xilinx的Artix-7开始。开发工具Vivado功能强大,社区资源丰富,遇到问题容易找到答案。等你有经验了,再根据项目需求选择Altera或者其他品牌。

3.3 FPGA选型要点

选FPGA芯片,不是越贵越好,也不是资源越多越好。关键看你的需求。我总结了几条选型要点:

  1. 逻辑资源够用就行:先估算你的设计需要多少逻辑单元,留出30%的余量。别贪多,资源多了价格翻倍。
  2. DSP单元数量:伺服驱动里要做PID运算、坐标变换,DSP单元越多,并行处理能力越强。我一般选至少20个DSP单元的芯片。
  3. 块RAM大小:用来存波形表、缓存数据。伺服驱动里,至少需要几十KB的块RAM。
  4. IO引脚数量:看你需要接多少外设。编码器、ADC、DAC、PWM输出,这些都要占用IO。我建议选BGA封装的,引脚多,布线也方便。
  5. 速度等级:伺服驱动的主频一般在50MHz到200MHz之间,不用追求最高速度。速度等级高了,功耗和成本都上去了。

避坑指南:我曾经在一个项目中选了资源刚刚好的FPGA,结果后期加功能时发现逻辑单元不够用,只能换芯片,重新画板子。嗯,那次教训让我记住了:选型时一定要留余量,至少30%。

3.4 FPGA最小系统设计

FPGA最小系统,就是让芯片能正常工作的基本电路。包括电源、时钟、复位、配置电路。我画过很多次FPGA最小系统,踩过不少坑,这里分享一些经验。

电源设计:FPGA需要多路电源,核心电压、IO电压、辅助电压。上电顺序有要求,一般是先给核心供电,再给IO供电。我用过TI的电源芯片,比如TPS系列,专门为FPGA设计,带使能引脚,可以控制上电顺序。

时钟电路:FPGA需要一个稳定的时钟源。我习惯用有源晶振,频率50MHz或100MHz。注意时钟信号要短,走线要远离其他信号,避免干扰。

复位电路:FPGA上电后需要复位,让内部寄存器回到初始状态。我用RC复位电路,简单可靠。也可以加一个复位芯片,比如MAX811,带手动复位按钮。

配置电路:FPGA是SRAM结构,掉电就丢失配置。所以需要外挂一个配置芯片,比如Xilinx的Platform Flash或者Altera的EPCS。上电后,FPGA从配置芯片加载程序。

下面是一个典型的FPGA最小系统框图:

FPGA最小系统框图 电源模块 1.2V / 3.3V 时钟模块 50MHz有源晶振 复位模块 RC复位电路 FPGA Artix-7 / Cyclone V 逻辑单元 + DSP + RAM 配置芯片 Platform Flash 外设接口 编码器 / ADC / PWM

经验分享:画FPGA最小系统时,注意去耦电容的布局。每个电源引脚旁边放一个0.1uF的电容,靠近引脚放置。我见过不少板子因为电容放得太远,导致FPGA工作不稳定。

3.5 FPGA开发环境搭建

开发环境这块,Xilinx用Vivado,Altera用Quartus。两个工具我都用过,这里分别说说搭建要点。

Vivado搭建步骤:

  1. 去Xilinx官网下载Vivado WebPACK版本,免费,功能够用
  2. 安装时选择需要的器件系列,比如Artix-7
  3. 安装完成后,打开Vivado,新建工程
  4. 添加设计文件,写Verilog代码
  5. 综合、实现、生成比特流
  6. 下载到FPGA开发板

Quartus搭建步骤:

  1. 去Intel FPGA官网下载Quartus Prime Lite版本,也是免费的
  2. 安装时选择对应的器件系列,比如Cyclone V
  3. 安装完成后,打开Quartus,新建工程
  4. 添加设计文件,写Verilog代码
  5. 编译、布局布线、生成配置文件
  6. 下载到FPGA开发板

我个人习惯用Vivado。为什么?因为Vivado的IP核集成工具很方便,可以直接调用DSP IP、FIFO IP、PLL IP。在伺服驱动里,我经常用PLL IP生成不同频率的时钟,用FIFO IP做数据缓存。

一个小技巧:Vivado的仿真功能很强大。我每次写完代码,都会先做行为仿真,看看波形对不对。没问题了再综合实现。这样可以避免很多低级错误。

搭建开发环境时,注意电脑配置。Vivado和Quartus都比较吃资源,建议至少16GB内存,固态硬盘。我刚开始用8GB内存的电脑跑Vivado,综合一个中等规模的工程要十几分钟,后来升级到32GB,速度快了很多。

避坑指南:我曾经在安装Vivado时选了全部器件系列,结果安装包有几十GB,安装了一下午。后来学乖了,只选自己需要的器件系列,安装速度快很多。

好了,FPGA基础与选型就聊到这里。记住,选型要留余量,最小系统要稳,开发环境要顺手。这些基础打好了,后面做伺服驱动开发才能事半功倍。