第一章 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内部结构示意,你看一眼就明白了:

FPGA内部结构示意图 CLB 可配置逻辑块 CLB 可配置逻辑块 CLB 可配置逻辑块 CLB 可配置逻辑块 BRAM 块RAM DSP 数字信号处理 IOB 可编程 互连网络

小技巧:选型的时候,先看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

创建工程的步骤,我简单列一下:

  1. 打开Vivado/Quartus,点击"Create New Project"
  2. 选器件型号——别选错了,我见过有人选了Virtex-7结果板子上是Artix-7
  3. 添加设计文件(.v或.vhd)和约束文件(.xdc或.sdc)
  4. 综合、实现、生成比特流——这三步是标准流程
// 一个最简单的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这东西,光看书没用,得动手。我当年就是一边看手册一边焊板子,烧坏了好几片芯片才学会的。你也别怕犯错,犯错才是学习最快的方式。


可可精品资料库