第一章 FPGA基础与开发环境搭建
各位同学好,我是你们的FPGA讲师。做硬件设计这行十几年了,从最早的Xilinx Spartan系列玩到现在的Versal,踩过的坑比走过的路还多。今天咱们聊聊FPGA的根儿——基础知识和环境搭建。
说实话,很多新手一上来就急着写代码,结果连芯片里面长啥样都不知道。我当年也犯过这毛病,后来被一个时序问题折磨了三天,才老老实实回去啃手册。嗯,咱们别走弯路,先把地基打牢。
1.1 FPGA发展史:从胶水逻辑到万能芯片
FPGA这玩意儿,说白了就是一堆可以随意连线的逻辑门。1985年Xilinx搞出了第一颗FPGA——XC2064,当时只有64个逻辑块,放在今天连个计数器都嫌寒碜。但那时候可是革命性的,你想啊,以前改电路得重新画PCB、重新流片,现在焊上去还能改,这不就是硬件界的"后悔药"吗?
为什么会发展这么快?我总结了两点:
- 工艺进步:从微米级到现在的7nm、5nm,一颗芯片里能塞下几亿个晶体管
- 应用驱动:通信基站要灵活、数据中心要加速、AI推理要低延迟——FPGA正好全包了
我个人习惯把FPGA发展分成三个阶段:
| 阶段 | 时间 | 代表器件 | 主要用途 |
|---|---|---|---|
| 胶水逻辑时代 | 1985-2000 | XC4000, FLEX10K | 接口转换、简单控制 |
| 片上系统时代 | 2000-2015 | Virtex-II, Cyclone | 嵌入硬核、DSP处理 |
| 异构计算时代 | 2015-至今 | Versal, Agilex | AI加速、自适应计算 |
记得2010年我做通信项目,用Virtex-6做基带处理,那会儿觉得1Gbps的SerDes已经牛得不行了。现在?动不动就100Gbps,时代变了啊。
1.2 FPGA内部结构:拆开看看里面到底有啥
很多同学问我:"FPGA里面是不是就是一堆门电路?" 对,但不全对。咱们拿Xilinx的7系列为例,拆开看看:
核心组成:
- CLB(可配置逻辑块):最基础的单元,里面包含LUT(查找表)和触发器。LUT说白了就是个小RAM,输入4-6个信号,输出一个结果。我习惯把LUT想象成"查字典"——输入什么,就输出对应的值。
- BRAM(块RAM):真正的存储单元,每个块18Kb或36Kb。做FIFO、缓存、查表都靠它。注意啊,BRAM有读写冲突,我曾经在这上面吃过亏——同时读写同一个地址,数据就乱了。
- DSP(数字信号处理单元):专门做乘加运算的硬核。一个DSP48E1可以做到25×18的乘法,还能级联。做滤波器、FFT的时候,这东西比用LUT搭快10倍不止。
- IOB(输入输出块):芯片和外界打交道的接口。支持各种电平标准——LVCMOS、LVDS、HSTL等等。选IO标准的时候要小心,我曾经把3.3V的IO接到1.8V的器件上,结果...嗯,芯片冒烟了。
下面这张图是我自己画的FPGA内部结构示意,你看一眼就明白了:
小技巧:选型的时候,先看DSP数量够不够,再看BRAM容量,最后看逻辑资源。我一般按这个顺序来,因为DSP和BRAM是硬核,省不了;逻辑不够还能用面积换速度。
1.3 主流厂商:Xilinx vs Altera
这两家占了全球90%以上的市场。Xilinx现在叫AMD了,Altera被Intel收了。名字变了,但生态没变。
| 对比项 | Xilinx (AMD) | Altera (Intel) |
|---|---|---|
| 开发工具 | Vivado / ISE | Quartus Prime |
| 编程语言 | Verilog/VHDL/SystemVerilog | Verilog/VHDL/SystemVerilog |
| 高端系列 | Virtex / Kintex / Artix | Stratix / Arria / Cyclone |
| 特色技术 | UltraScale, Versal ACAP | Agilex, Hard Processor System |
| 免费版本 | Vivado WebPACK (有容量限制) | Quartus Lite (有容量限制) |
我个人习惯用Xilinx,因为它的文档写得清楚,社区也活跃。但Altera的Cyclone系列性价比确实高,做小项目很合适。你选哪个?其实都行,关键是把手头的工具用熟。
1.4 开发环境搭建:Vivado与Quartus
安装工具这事儿,说简单也简单,说坑也坑。我见过有人装了一天没装上的,就是因为路径里有中文。嗯,这里必须提醒:
安装注意事项:
- 路径不能有中文!不能有空格!最好全英文
- Vivado需要至少40GB硬盘空间,Quartus少一点,但也得20GB
- 内存建议16GB以上,8GB跑大工程会卡死
- Windows用户注意:Vivado对Win11兼容性一般,建议Win10
创建工程的步骤,我简单列一下:
- 打开Vivado/Quartus,点击"Create New Project"
- 选器件型号——别选错了,我见过有人选了Virtex-7结果板子上是Artix-7
- 添加设计文件(.v或.vhd)和约束文件(.xdc或.sdc)
- 综合、实现、生成比特流——这三步是标准流程
// 一个最简单的Verilog例子——点亮LED
module led_blink (
input wire clk, // 50MHz时钟
input wire rst_n, // 复位,低有效
output reg led // LED输出
);
reg [24:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 25'd0;
else
cnt <= cnt + 1'b1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 1'b0;
else if (cnt == 25'd24_999_999) // 0.5秒翻转一次
led <= ~led;
end
endmodule
1.5 硬件描述语言:Verilog还是VHDL?
这个问题就像问"吃米饭还是吃面条"——各有各的好。我个人的建议是:
- 学Verilog:语法像C,上手快,国内公司90%用这个
- 学VHDL:严谨、类型检查严格,军工和欧洲项目用得多
- 都学:如果你打算吃这碗饭,早晚都得会
我刚开始学的时候用的VHDL,后来转Verilog。说实话,Verilog写起来确实快,但VHDL的强类型检查能帮你抓到很多低级错误。你想想看,一个信号是std_logic还是std_logic_vector,写错了编译器直接报错,多省心。
我的建议:新手先学Verilog,三个月能上手做项目。等做熟了,再回头看看VHDL,你会发现很多设计思想是相通的。
好了,第一章就聊到这儿。环境装好了,语言选定了,下一章咱们就开始写真正的代码——图像采集的接口设计。记住,FPGA这东西,光看书没用,得动手。我当年就是一边看手册一边焊板子,烧坏了好几片芯片才学会的。你也别怕犯错,犯错才是学习最快的方式。