在 FPGA 学习和实际开发过程中,很多人都会遇到一个问题:
资料看了不少,但知识点零散、概念混乱,用的时候还是要重新查。
这篇文章不讲“成功学”,也不走速成路线,而是从工程与学习实践角度,对 FPGA 常见的基础知识点做一次系统整理,方便随时查阅、反复回看,适合作为长期笔记型文章收藏。
一、FPGA 是什么?一句话版本
FPGA(Field Programmable Gate Array,现场可编程门阵列)是一种可重复配置的数字逻辑器件,用户通过硬件描述语言对其内部逻辑资源进行配置,从而实现特定的数字功能。
它的核心特点不是“快”,而是:
硬件并行
结构可定制
靠时序和资源说话
二、FPGA 的基本结构组成
从硬件结构上看,大多数 FPGA 主要由以下几部分构成:
1. 可编程逻辑单元(CLB / Logic Cell)
由LUT(查找表)+ 触发器(FF)组成
LUT 本质是一个小型存储器,用来实现组合逻辑
FF 用于时序逻辑与状态保存
👉 FPGA 的“逻辑能力”,主要就体现在这里。
2. 可编程互连资源
用于连接不同逻辑单元
决定了信号如何在芯片内部流动
与时序收敛、布线延迟密切相关
3. IO 资源
支持多种 IO 标准(LVCMOS、LVDS 等)
需要通过约束文件指定电平、驱动能力、管脚位置
4. 专用硬件资源
不同厂商略有差异,常见包括:
Block RAM(片上存储)
DSP Slice(乘加、滤波等)
PLL / MMCM(时钟管理)
三、FPGA 常用开发语言
1. Verilog / SystemVerilog
工程中使用最广
语法相对简洁,贴近硬件
适合模块化、工程化开发
2. VHDL
语法严谨、强类型
在部分行业和项目中仍有使用
⚠️ 注意:
HDL 不是“高级编程语言”,而是硬件结构描述语言,写的不是“执行流程”,而是“电路连接关系”。
四、组合逻辑与时序逻辑(核心基础)
1. 组合逻辑
输出只与当前输入有关
不依赖时钟
常见:加法器、译码器、逻辑判断
2. 时序逻辑
输出与历史状态有关
依赖时钟和触发器
常见:寄存器、状态机、计数器
📌 工程实践中:
所有复杂系统,最终都是“组合逻辑 + 时序逻辑”的组合。
五、时钟与复位(最容易踩坑的地方)
1. 时钟设计基本原则
一个时钟域,尽量只干一件事
跨时钟域必须处理(FIFO / 打拍 / CDC)
不随意使用门控时钟
2. 复位设计建议
统一复位策略(同步 / 异步)
避免复位信号乱飞
复位不是“万能清零键”,而是设计的一部分
六、状态机(FSM)基础
状态机是 FPGA 设计中的高频结构,常见写法包括:
一段式
两段式
三段式(工程中更清晰)
基本要素:
状态定义
状态跳转条件
状态输出逻辑
👉 本质是:“用寄存器保存状态,用组合逻辑控制跳转”
七、约束文件的重要性(不是“可选项”)
很多新手容易忽略约束,实际工程中:
管脚不约束 → 板子不一定能跑
时钟不约束 → 时序分析毫无意义
IO 标准不约束 → 有风险甚至损坏硬件
📌 约束 ≠ 编译通过
📌 约束 = 工程是否可靠
八、仿真与调试的基本认知
1. 仿真不是“可有可无”
行为仿真:验证逻辑正确性
时序仿真:关注延迟与边界
2. 板级调试常见手段
LED / GPIO 验证
ILA / SignalTap 抓信号
分模块逐步定位问题
九、新手常见误区汇总
把 FPGA 当 MCU 用
不看时序,只看波形
代码能综合 ≠ 设计合理
迷信“高频”“高性能”,忽略稳定性
十、写在最后
FPGA 学习并不存在“一步到位”,
基础知识 + 工程理解 + 反复实践,才是最稳的成长路径。
这篇文章更像是一份长期可用的基础笔记索引,后续无论是做项目、看代码,还是回头查概念,都可以作为参考。
如果你正在系统学习 FPGA,建议把这类基础知识文章当成“工具”而不是“速成教程”。