第一章:FPGA基础与开发环境搭建

1.1 FPGA发展史:从胶水逻辑到计算核心

FPGA这东西,说白了就是一块可以无限次重新配置的芯片。我第一次接触FPGA是在2008年,那时候它还主要被用来做「胶水逻辑」——就是把几个不同芯片粘在一起用的。现在想想,真是小瞧它了。

FPGA的历史其实不算长。1985年,Xilinx公司推出了世界上第一款FPGA——XC2064。那时候它只有64个逻辑块,放在今天连个计数器都嫌不够用。但就是这个不起眼的芯片,开启了一个全新的时代。

为什么会发展这么快?我个人的理解是:ASIC太贵了,CPU又不够快。FPGA正好卡在中间——比CPU快,比ASIC灵活。你想想看,做一颗28nm的ASIC,光掩膜版就要几百万美元。而FPGA呢?买一块开发板,几千块就能开始干活。

关键里程碑:

  • 1985年:Xilinx推出首款FPGA,64个逻辑单元
  • 1990年代:FPGA进入通信领域,做协议转换
  • 2000年代:内嵌DSP、Block RAM,开始做数字信号处理
  • 2010年代:集成ARM硬核,SoC FPGA诞生
  • 2020年代:AI推理、数据中心加速,FPGA成为计算主力

我记得2015年做第一个图像加速项目时,用的还是Virtex-6。那时候为了把720p的视频做到实时处理,折腾了整整三个月。现在随便一块Artix-7都能轻松搞定1080p。技术进步就是这么实在。

1.2 FPGA应用场景:图像加速是重头戏

FPGA能干什么?我列几个最常见的场景:

  • 通信基站:协议处理、信道编解码
  • 工业控制:电机驱动、PLC、运动控制
  • 医疗影像:CT、MRI图像重建
  • 航空航天:卫星通信、雷达信号处理
  • 图像加速:实时视频处理、AI推理

这里面,图像加速是我最熟悉的领域。为什么FPGA适合做图像处理?原因有三:

  1. 流水线架构:图像处理本质上是像素流,FPGA的硬件流水线天然匹配
  2. 并行计算:一个时钟周期处理多个像素,GPU能做的FPGA也能做
  3. 低延迟:没有操作系统调度,从输入到输出就是几个时钟周期的事

我的经验:做图像加速时,别一上来就想用HLS。我踩过这个坑——HLS生成的代码效率往往不如手写Verilog。特别是做卷积、滤波这类操作,手写RTL能控制每一个时钟周期,性能差距很明显。

下面这张图是我自己整理的FPGA图像加速知识体系,你可以看看整体脉络:

FPGA图像加速知识体系 FPGA基础与开发环境 FPGA硬件架构 Verilog/VHDL基础 时序约束 图像传感器接口 色彩空间转换 帧缓存与DDR 流水线设计 图像滤波/卷积 边缘检测 图像缩放/旋转 AI推理加速 实战项目:实时视频处理系统

1.3 Vivado/Vitis开发环境安装与配置

好了,理论说完了,咱们来点实际的。安装Vivado和Vitis,我踩过的坑比走过的路还多。下面是我的经验总结:

1.3.1 版本选择

我个人建议:不要追新。Vivado每年出一个版本,但并不是越新越好。2023.2版本我用了半年,发现有些IP核的bug还没修好。反而2022.2版本稳定得多。

版本 推荐指数 说明
Vivado 2022.2 ⭐⭐⭐⭐⭐ 最稳定,适合初学者
Vivado 2023.1 ⭐⭐⭐⭐ 功能完整,偶有小bug
Vivado 2023.2 ⭐⭐⭐ 新功能多,但稳定性一般
Vitis 2022.2 ⭐⭐⭐⭐⭐ 与Vivado配套使用

1.3.2 安装步骤

安装其实不复杂,但有几个关键点要注意:

  1. 下载安装包:去Xilinx官网下载,大约80GB。建议用下载工具,别用浏览器直接下——我试过,断了三次。
  2. 选择安装组件:如果你只做图像加速,选「Vivado」就够了。Vitis是给SoC用的,纯FPGA用不上。
  3. 安装路径:不要有中文路径!不要有空格!我见过有人装在「D:\FPGA工具\Vivado」下面,结果编译报错找了一下午。
  4. License配置:申请免费WebPack License就够了,够用。除非你要用Virtex系列,才需要买付费License。

避坑指南:我曾经在Windows上安装Vivado 2023.1,结果安装到一半蓝屏了。后来发现是杀毒软件在后台扫描安装包。建议安装前关掉杀毒软件,断网安装最稳。

1.3.3 环境验证

装完之后,怎么知道装好了?打开Vivado,新建一个工程,写个最简单的LED闪烁程序:

module led_blink(
    input  clk,
    input  rst_n,
    output reg led
);

reg [23:0] cnt;

always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        cnt <= 24'd0;
    else
        cnt <= cnt + 1'b1;
end

always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        led <= 1'b0;
    else if (cnt == 24'd5000000)
        led <= ~led;
end

endmodule

能综合、能仿真、能下载到板子上看到LED闪烁——恭喜你,环境搭好了。

小技巧:第一次跑综合可能会很慢,别急。Vivado在第一次编译时会生成很多缓存文件,后面就快了。我一般第一次综合时去泡杯咖啡,回来刚好。

1.3.4 常用快捷键

最后分享几个我常用的Vivado快捷键,能省不少时间:

  • F6:运行综合
  • F7:运行实现
  • Ctrl+Shift+B:生成比特流
  • Ctrl+E:打开IP Catalog
  • Ctrl+W:关闭当前文件

嗯,第一章就到这里。环境搭好了,后面才能动手干活。记住一句话:工欲善其事,必先利其器。Vivado装好了,咱们第二章见真章。


可可精品资料库