第二章:开发环境搭建——工欲善其事,必先利其器

各位同学,咱们直接进入正题。做FPGA开发,第一步就是把家伙事儿备齐。你想想看,一个木匠没有锯子怎么干活?FPGA工程师也一样,没有趁手的开发环境,再牛的想法也实现不了。

这一章,我带你把Vivado和Quartus装好、配好,再认识一下常见的开发板,最后跑通你的第一个FPGA工程——LED闪烁。嗯,这是每个FPGA工程师的“Hello World”,也是你入行的起点。

2.1 Vivado与Quartus:两大主流IDE的选择

目前市面上主流的FPGA厂商就两家:Xilinx(现在叫AMD Xilinx)和Intel(原Altera)。对应的开发工具分别是Vivado和Quartus Prime。

我个人习惯:如果项目用的是Xilinx的芯片,比如Artix-7、Kintex-7或者Zynq系列,我首选Vivado。如果是Intel的Cyclone、Arria系列,那就用Quartus。说白了,各家的工具对自家芯片支持最好,别混着用。

特性 Vivado Quartus Prime
适用芯片 Xilinx 7系列及以后 Intel Cyclone/Arria/Stratix
综合引擎 Synplify-based Quartus内置综合
仿真工具 Vivado Simulator ModelSim/Questa
调试方式 ILA/VIO(逻辑分析仪) SignalTap II
安装包大小 约30-50GB 约15-25GB
小提示: 如果你刚开始学,我建议从Vivado入手。因为Xilinx的文档和社区资源更丰富,遇到问题容易找到答案。我在项目中遇到过不少坑,最后都是靠Xilinx的官方论坛解决的。

2.2 安装与配置:别让环境卡住你

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

2.2.1 Vivado安装要点

  • 版本选择:我个人推荐Vivado 2019.1或2020.2,这两个版本比较稳定。别追新,新版本有时候bug多。
  • 安装路径:不要有中文路径!不要有空格!我见过有人装在“C:\Program Files (x86)\Vivado”下面,结果编译报错找半天原因。
  • 许可证:去Xilinx官网申请免费的WebPACK许可证,够你学完整个课程了。
  • 磁盘空间:至少预留60GB。嗯,Vivado是个大家伙。

2.2.2 Quartus安装要点

  • 版本选择:Quartus Prime Lite版是免费的,功能足够用。
  • ModelSim:Quartus自带ModelSim Starter版,但功能受限。我建议单独装一个ModelSim SE或Questa,仿真效率高很多。
  • 驱动:如果你用USB Blaster下载器,记得装驱动。我曾经因为驱动没装好,折腾了一下午才发现是这个问题。
避坑指南: 我曾经在Win10上装Vivado 2018.3,结果安装过程中蓝屏了三次。后来发现是杀毒软件在后台扫描安装包。解决办法:安装前关掉杀毒软件,断网安装。

2.3 开发板介绍:选对板子,事半功倍

开发板是FPGA工程师的“试验田”。我见过不少初学者一上来就买高端板子,结果吃灰了。其实,入门阶段一块便宜的板子就够了。

这里我列几款常见的开发板,供你参考:

开发板型号 芯片 价格区间 适合场景
Nexys 4 DDR Artix-7 XC7A100T 约1500元 入门学习、数字逻辑实验
Basys 3 Artix-7 XC7A35T 约800元 学生党首选,性价比高
DE10-Lite MAX 10 10M50DAF 约600元 Intel系入门,带ADC
Zynq-7020 Zynq-7000 (ARM+FPGA) 约2000元 软核CPU移植、嵌入式系统
我的建议: 如果你预算有限,Basys 3或DE10-Lite足够了。等学到软核CPU移植那部分,再考虑Zynq系列。别一上来就买贵的,先把手头的板子玩透。

2.4 第一个FPGA工程:LED闪烁

好了,环境装好了,板子也认识了。咱们来写第一个程序——让LED闪烁。这是FPGA界的“Hello World”,简单但意义重大。

我以Vivado + Basys 3为例,带你把流程走一遍。

2.4.1 创建工程

  1. 打开Vivado,点击“Create Project”。
  2. 工程名:led_blink,路径不要有中文。
  3. 选择RTL Project,勾选“Do not specify sources at this time”。
  4. 选择芯片:Basys 3用的是xc7a35tcpg236-1。
  5. 点击Finish,工程创建完成。

2.4.2 编写Verilog代码

在工程中添加一个设计源文件,命名为led_blink.v。代码如下:

module led_blink(
    input   wire        clk,        // 100MHz 板载时钟
    input   wire        rst_n,      // 复位,低有效
    output  reg  [3:0]  led         // 4个LED
);

// 分频计数器
reg [26:0] cnt;

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

// 取最高位作为闪烁控制
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        led <= 4'b0000;
    else
        led <= cnt[26] ? 4'b1111 : 4'b0000;
end

endmodule

代码很简单:用27位计数器对100MHz时钟分频,最高位cnt[26]的翻转频率大约是100MHz / 2^27 ≈ 0.745Hz,也就是大约1.34秒闪一次。

注意: 这里的rst_n是低有效复位。我刚开始学的时候总搞反,结果仿真没问题,上板子就不工作。后来养成习惯:先看原理图,确认复位电平。

2.4.3 添加约束文件

Basys 3的约束文件(.xdc)需要定义引脚映射。部分内容如下:

# 时钟引脚
set_property PACKAGE_PIN W5 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]

# 复位引脚
set_property PACKAGE_PIN U18 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]

# LED引脚
set_property PACKAGE_PIN U16 [get_ports {led[0]}]
set_property PACKAGE_PIN E19 [get_ports {led[1]}]
set_property PACKAGE_PIN U19 [get_ports {led[2]}]
set_property PACKAGE_PIN V19 [get_ports {led[3]}]

约束文件怎么写?去开发板官网下载原理图,对着原理图一个个找。我当年第一次写约束,把led[0]和led[1]的引脚搞反了,结果LED亮的位置不对。嗯,这种低级错误犯一次就够了。

2.4.4 综合、实现、生成比特流

  1. 点击“Run Synthesis”,等待综合完成。
  2. 综合完成后,点击“Run Implementation”。
  3. 实现完成后,点击“Generate Bitstream”。
  4. 比特流生成后,点击“Open Hardware Manager”,连接开发板,下载程序。

如果一切顺利,你会看到板子上的4个LED同时闪烁。那一刻,恭喜你——你已经是一个FPGA工程师了。

常见问题: 下载时提示“No cable connected”?检查USB驱动是否安装,或者换一根数据线。我遇到过一根只能充电不能传数据的线,折腾了半小时才发现。

2.5 硬件描述语言选择:Verilog还是VHDL?

这个问题几乎每个初学者都会问。我的回答很简单:选Verilog

为什么?

  • 市场占有率:目前FPGA行业,Verilog的使用率超过80%。你找工作,十家公司有八家要求Verilog。
  • 学习曲线:Verilog语法类似C语言,上手快。VHDL语法严谨但啰嗦,写个计数器都要定义好几行。
  • 资源丰富:网上的开源项目、教程、论坛,绝大多数都是Verilog。

当然,VHDL也有它的优势:强类型检查、适合大型项目。但说实话,对于入门和大部分嵌入式应用,Verilog完全够用。

我个人习惯:小项目用Verilog,大项目用SystemVerilog。SystemVerilog是Verilog的升级版,支持面向对象、断言等高级特性。等你学完这门课,可以自己研究一下。

一句话总结: 别纠结,选Verilog。先把基础打牢,以后想学VHDL随时可以转。语言只是工具,思想才是核心。

2.6 本章知识体系

为了让你更直观地理解本章的内容结构,我画了一张图:

第二章:开发环境搭建 IDE选择 安装与配置 开发板介绍 第一个FPGA工程 Vivado Quartus Prime 许可证/驱动 路径/磁盘空间 Basys 3 / Nexys 4 DE10-Lite / Zynq LED闪烁代码 约束文件 综合/实现/下载 核心目标:搭建开发环境 → 跑通第一个工程 → 掌握基本流程 语言选择:Verilog(推荐) vs VHDL —— 从零开始,一步步成为FPGA工程师 ——

这张图把本章的知识点串起来了。你跟着这个流程走一遍,环境搭建这块就算拿下了。


好了,这一章的内容就到这里。环境搭好了,第一个工程也跑通了,接下来就可以开始深入学习硬件描述语言了。记住:动手实践是最好的学习方式。别光看,打开Vivado,把代码敲一遍,让LED真正闪起来。

最后说一句: 遇到问题别慌。FPGA开发就是这样,99%的时间在调试,1%的时间在庆祝。我当年第一个LED闪烁工程,从创建工程到看到灯亮,花了整整一个下午。但当你看到那盏灯亮起来的瞬间,一切都值了。

公众号:蓝海资料掘金营,微信deep3321