跳到主要内容

FPGA 从入门到放弃(再到入门)

写在前面

第一次接触 FPGA 的时候,我感觉像回到了 51 单片机时代 —— 啥都得自己写,啥都得自己配。但一旦理解了"硬件描述语言"的本质,会发现它比单片机好玩得多。

这篇文章是我自己折腾 FPGA 一年多的小结,不是教程,更像一份避坑指南

一、FPGA 是什么(一句话版)

FPGA = 现场可编程门阵列

你可以把它想象成:

一堆空白的数字电路积木,你写代码告诉它"怎么把这些积木拼起来",它就变成了一块定制芯片。

和单片机的区别:

  • 单片机是软件驱动硬件(写 C 代码,跑在固定硬件上)
  • FPGA 是软件定义硬件(写 HDL,直接生成电路)

二、为什么学 FPGA

场景为什么 FPGA 更合适
高速并行(图像 / 通信)FPGA 可以并行处理,单片机只能顺序执行
低延迟(电机控制 / 协议)FPGA 纳秒级响应,单片机微秒级
灵活协议(UART / SPI / I2S ...)自己写 IP 核,周期可控
验证 ASIC 设计流片前先用 FPGA 验证逻辑

对我来说,学 FPGA 的最大动机是:理解了它,看任何芯片的数据手册都会快很多

三、硬件描述语言(HDL)选哪个

主流就两个:

语言风格适合
VerilogC 风格,语法宽松工业界主流,上手快
VHDLAda 风格,语法严格军工 / 航空,欧洲多

建议:

  • 初学 → Verilog(资料多、岗位多、好学)
  • 想严谨 → VHDL(但学习曲线更陡)
  • 别纠结 → 两个都了解一下语法,后续主要用 Verilog

个人体感:Verilog 像是写代码,VHDL 像是填表格。

四、开发流程

1. 需求分析(我要实现什么功能)

2. 画框图 / 状态机

3. 写 Verilog 代码

4. 写 testbench(仿真)

5. 功能仿真(modelsim / vivado simulator)

6. 综合(把 HDL 转成门级网表)

7. 布局布线(把电路放到 FPGA 物理资源上)

8. 时序仿真(带延迟的仿真)

9. 烧录 + 上板调试

关键点:

  • 第 4 步 testbench 一定要写,不要直接上板调,会崩溃
  • 第 7 步如果时序不收敛,要回头改代码或换更快的器件

五、入门学习路线(我自己走过的)

阶段一:点灯(1-2 周)

目标:让板子上的 LED 亮起来

  • 学 GPIO 输出
  • 学时钟分频
  • 写一个 LED 闪烁的模块

不要小看点灯,很多复杂项目都是从这开始的。

阶段二:按键 + 数码管(2-3 周)

目标:按键控制 LED / 数码管显示

  • 学按键消抖
  • 学有限状态机(FSM)
  • 写一个简单的计数器

阶段三:UART 通信(3-4 周)

目标:实现串口收发

  • 学波特率生成
  • 学串口协议
  • 写 UART TX / RX 模块

做到这里,基本可以应付电赛 / 课设的大部分需求。

阶段四:综合项目(1-2 月)

推荐练手项目:

  • VGA 显示字符 / 图像
  • I2S 音频播放器
  • 简易示波器 / 信号发生器
  • 数字滤波器(FIR / IIR)

六、推荐开发板

板子厂商特点价格
小梅哥 AC620小梅哥资料多,Altera Cyclone IV¥200
正点原子 ZYNQ正点原子ZYNQ 7020,带 ARM 核¥500
黑金 AX7020黑金同上,资料稍弱¥400
野火 ZYNQ野火配套教程最好¥600+

我的建议:初学选 小梅哥 AC620正点原子 ZYNQ,别买太高端的,资源过剩用不上。

七、必备工具

工具用途
VivadoXilinx 官方,适合 ZYNQ / 7 系列
QuartusAltera 官方,适合 Cyclone 系列
Modelsim仿真工具,工业级
SignalTapVivado 内嵌逻辑分析仪,在线抓信号
Notepad++ / VSCode写代码

避坑:别用 Quartus 较新版本(13.0+),对老器件支持有问题。

八、常见误区

  • 把 Verilog 当 C 写:Verilog 描述的是电路,不是顺序执行的代码
  • 跳过仿真直接上板:95% 的 bug 都能在仿真阶段抓到
  • 追求资源利用率:FPGA 资源没那么贵,代码可读性更重要
  • 死磕时序收敛:有时候换个实现方式比死磕工具链有效

九、学习资料

入门

  • 小梅哥 AC620 配套视频(B 站)
  • 正点原子 ZYNQ 教程(哔哩哔哩)
  • 野火 ZYNQ 教程

进阶

  • 《Verilog 数字系统设计教程》(夏宇闻)
  • 《FPGA 设计实战演练》(吴厚航)
  • 《数字信号处理的 FPGA 实现》(Uwe Meyer-Baese)

社区


我的下一步

接下来打算写:

  • ✅ UART / SPI / I2C 的 FPGA 实现
  • ✅ 简易示波器项目复盘
  • ✅ ZYNQ + ARM 核的双核通信

有什么想看的,评论区留言 ~

FPGA 入门曲线陡,但一旦跨过去,你会打开新世界的大门。