4. 开发环境搭建:Vivado/Quartus安装、许可证配置、第一个LED闪烁工程的完整流程

好,咱们正式开始动手了。这一章我带你走一遍开发环境的搭建流程。说实话,很多初学者卡在这一步——不是装不上,就是许可证搞不定,折腾半天连个灯都没点亮。我当年也踩过这些坑,所以这一章我会把关键点都给你点出来。

4.1 开发工具选型:Vivado vs Quartus

做FPGA开发,两大主流工具就是Xilinx的Vivado和Intel的Quartus。选哪个?说白了,看你用什么芯片。

对比项 Vivado (Xilinx) Quartus (Intel)
支持的芯片 Xilinx全系列(7系列起) Intel/Altera全系列
综合引擎 Synplify-based Quartus内置综合
仿真工具 Vivado Simulator ModelSim/Questa
免费版本 Vivado HL WebPACK Quartus Prime Lite
安装包大小 约30-50GB 约15-25GB

我个人习惯用Vivado多一些,因为Xilinx的生态更成熟,文档也全。但如果你用的是Intel的Cyclone系列,那Quartus就是唯一选择。嗯,这里要注意:两个工具不要混着装在同一台机器上,环境变量会打架,我吃过这个亏。

4.2 Vivado安装与许可证配置

4.2.1 下载与安装

去Xilinx官网下载Vivado HL WebPACK版本,这是免费的。安装步骤其实很简单,但有几个坑你得避开:

  1. 路径不要有中文——这个老生常谈了,但总有人犯
  2. 安装目录不要用C盘——装完几十个G,C盘直接爆红
  3. 选择安装组件时——如果你只是做数字逻辑,勾选"Vivado"和"Vivado Simulator"就够了,不用全选
我曾经在安装时勾选了所有组件,结果装了整整6个小时,最后发现90%的功能根本用不上。建议只选你需要的。

4.2.2 许可证配置

许可证这块,很多人搞不明白。Vivado WebPACK是免费的,但需要申请一个许可证文件。流程如下:

  1. 注册Xilinx账号(用公司邮箱或个人邮箱都行)
  2. 登录后进入"Licensing"页面
  3. 选择"Generate Node-Locked License"
  4. 输入你的网卡MAC地址(这个别填错了)
  5. 下载.lic文件,放到安装目录下的licenses文件夹

配置好之后,打开Vivado,在Help -> Manage License里能看到状态。如果显示"Valid",那就OK了。

小技巧:如果你用的是虚拟机,MAC地址每次重启可能会变。建议在虚拟机设置里固定MAC地址,否则许可证会失效。

4.3 Quartus安装与许可证配置

Quartus Prime Lite版本也是免费的,安装过程比Vivado简单不少。下载地址在Intel官网,选择对应操作系统的版本就行。

安装时注意:Quartus对Windows 11的兼容性不太好,我遇到过安装后打不开的情况。解决办法是右键图标 -> 属性 -> 兼容性 -> 勾选"以Windows 8模式运行"。

许可证方面,Quartus Lite不需要单独的许可证文件,安装完就能用。但如果你要用ModelSim仿真,需要额外配置一下:

# 在Quartus安装目录下找到modelsim.ini
# 添加以下内容(具体路径根据你的安装位置调整)
[Library]
work = $MODEL_TECH/../modelsim_lib/work

4.4 第一个LED闪烁工程

好了,环境搭好了,咱们来点个灯。这是FPGA界的"Hello World",虽然简单,但能验证你的整个开发流程是否通畅。

4.4.1 创建工程(以Vivado为例)

  1. 打开Vivado,点击"Create Project"
  2. 工程名:led_blink,路径不要有中文
  3. 选择RTL Project,勾选"Do not specify sources at this time"
  4. 选择芯片型号:比如我用的Xilinx Artix-7 XC7A35T
  5. 点击Finish,工程创建完成

4.4.2 编写Verilog代码

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

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) begin
        cnt <= 25'd0;
        led <= 1'b0;
    end else begin
        if (cnt == 25'd24_999_999) begin
            cnt <= 25'd0;
            led <= ~led;  // 翻转LED
        end else begin
            cnt <= cnt + 1'b1;
        end
    end
end

endmodule

这段代码的逻辑很简单:用计数器对50MHz时钟进行分频,每计数到2500万次(也就是0.5秒),翻转一次LED。这样LED就会以1Hz的频率闪烁。

为什么是25'd24_999_999? 因为计数器从0开始计数,到24_999_999正好是2500万个时钟周期。50MHz时钟下,2500万周期 = 0.5秒。

4.4.3 添加约束文件

约束文件告诉工具,你的时钟和LED对应芯片的哪个引脚。创建一个.xdc文件:

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

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

# LED引脚
set_property PACKAGE_PIN T8 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]

注意:引脚编号取决于你的开发板。我用的是Nexys 4 DDR,如果你用其他板子,记得查原理图。

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

在Vivado的Flow Navigator中,按顺序点击:

  1. Synthesis -> Run Synthesis(综合,检查语法和逻辑)
  2. Implementation -> Run Implementation(布局布线)
  3. Generate Bitstream(生成下载文件)

每一步完成后,记得看有没有错误或警告。我见过有人综合通过了,但实现时报错,原因是约束文件写错了引脚。

注意:如果综合或实现报错,先看第一条错误信息。很多时候后面的错误都是连锁反应,解决第一个问题,后面的就自动消失了。

4.4.5 下载到FPGA

连接好下载器(一般是JTAG),点击"Open Hardware Manager" -> "Auto Connect"。识别到芯片后,右键点击芯片,选择"Program Device",选择刚才生成的.bit文件,点击Program。

如果一切顺利,你就能看到LED开始闪烁了。嗯,第一次点亮LED的感觉,说实话挺有成就感的。

4.5 常见问题与避坑指南

  • 下载器识别不到:检查驱动是否安装。Vivado自带驱动,但有时需要手动安装。去设备管理器里看看有没有黄色感叹号。
  • 综合报错"cannot find module":检查文件名和模块名是否一致。Verilog要求文件名和模块名相同。
  • LED不亮:先检查约束文件里的引脚号对不对。我遇到过把LED引脚写成了按键引脚,结果按了按键灯才亮。
  • 许可证过期:WebPACK许可证每年更新一次,记得去官网重新申请。
我的习惯:每次新建工程,我都会先跑一个LED闪烁程序,确认环境没问题。这就像写软件时的"Hello World",能帮你快速定位问题是出在环境还是代码上。

好了,这一章的内容就到这。环境搭好了,灯也亮了,接下来就可以开始真正的内容了。记住,开发环境是基础,基础打牢了,后面才能走得稳。


专注资料整理