3、开发环境搭建:Vivado/Quartus安装与配置、仿真工具ModelSim/VCS、版本管理Git、第一个LED工程

说实话,很多初学者一上来就急着写代码,结果环境没配好,折腾半天连个灯都点不亮。我见过太多人卡在安装这一步了。今天咱们就把这事一次性搞定。

3.1 开发工具选型:Vivado vs Quartus

做FPGA开发,选对工具是第一步。目前主流就两家:Xilinx的Vivado和Intel的Quartus。我个人习惯是看项目需求来选,没有绝对的谁好谁坏。

对比项 Vivado Quartus Prime
适用芯片 Xilinx全系列(7系列起) Intel/Altera全系列
综合引擎 Synplify-based,优化能力强 自家引擎,对Altera芯片优化好
仿真集成 自带XSim,可外接ModelSim 自带ModelSim Starter
IP管理 IP Integrator,图形化方便 Qsys/Platform Designer
学习曲线 稍陡,功能多 相对平缓

嗯,这里有个坑要注意:Vivado从2019.1开始不再支持Windows 7了。我曾经帮一个客户远程调试,他装了半天装不上,最后发现是系统版本问题。所以安装前一定先看官方Release Notes。

3.2 Vivado安装与配置

安装Vivado其实不复杂,但有几个关键点要注意。我建议你下载WebPACK版本,免费的,功能足够学习用了。

安装步骤:

  1. 去Xilinx官网注册账号,下载Vivado HLx WebPACK
  2. 运行安装程序,选择Vivado HL WebPACK
  3. 勾选需要的器件支持(建议全选,省得后面麻烦)
  4. 安装路径不要有中文和空格
  5. 等待...大概需要20-30分钟

注意:安装路径不要有中文!不要有空格!我见过有人把路径写成「D:\FPGA项目\Vivado」,结果综合时报错找不到文件,折腾了两天才发现是中文路径的问题。

安装完成后,记得配置一下环境变量。我个人习惯把Vivado的bin目录加到PATH里,这样在命令行里可以直接调用xvlog、xelab这些工具。

3.3 Quartus安装要点

Quartus的安装相对简单一些。Intel的Quartus Prime Lite Edition也是免费的,功能足够入门。

安装时注意选择正确的器件系列。如果你用的是Cyclone IV或MAX 10,记得勾选对应的器件包。我刚开始用Quartus时,装完发现找不到我的Cyclone IV芯片,后来才发现是器件包没装全。

小技巧:Quartus安装时可以选择「单独下载器件包」,这样安装包会小很多。但记得后面要手动安装器件包,不然打开工程会报错。

3.4 仿真工具:ModelSim与VCS

仿真这一步,说白了就是验证你的代码逻辑对不对。我见过太多人写完代码直接上板子,结果点不亮灯就慌了。其实先仿真一下,很多问题都能提前发现。

ModelSim是Mentor的产品,业界用得最多。Vivado和Quartus都支持集成ModelSim。我个人习惯用ModelSim做功能仿真,用Vivado自带的XSim做时序仿真。

VCS是Synopsys的,主要用于大型项目。说实话,初学者用ModelSim就够了,VCS的学习成本比较高。

ModelSim快速上手:

  1. 新建工程,添加设计文件和测试文件
  2. 编译所有文件(vlog命令)
  3. 启动仿真(vsim命令)
  4. 添加波形信号,运行仿真

嗯,这里有个经验:仿真时一定要加足够的测试激励。我曾经写过一个SPI控制器,仿真时只测了正常读写,结果上板后发现时序有问题,折腾了一周才发现是仿真没覆盖边界情况。

3.5 版本管理:Git入门

做FPGA开发,版本管理太重要了。你想想看,一个项目几十个文件,改来改去,没有Git的话根本没法回溯。我见过有人用「final_v1.v」、「final_v2.v」、「最终版.v」这种命名方式,结果自己都分不清哪个是哪个。

Git的基本流程很简单:

# 初始化仓库
git init

# 添加文件到暂存区
git add *.v *.xdc

# 提交到本地仓库
git commit -m "初始版本:LED工程"

# 查看状态
git status

# 查看历史
git log --oneline

建议:每个FPGA工程都建一个Git仓库。.gitignore文件里要排除编译生成的临时文件,比如Vivado的.runs、.cache目录,Quartus的db、incremental_db目录。这些文件每次编译都会变,没必要提交。

3.6 第一个LED工程

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

先看代码:

// led_top.v
module led_top (
    input  wire       clk,      // 50MHz时钟
    input  wire       rst_n,    // 复位,低有效
    output reg [3:0]  led       // 4个LED
);

    reg [31:0] cnt;

    // 计数器,每0.5秒翻转一次
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            cnt <= 32'd0;
        else if (cnt == 32'd24_999_999)
            cnt <= 32'd0;
        else
            cnt <= cnt + 1'b1;
    end

    // LED控制
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            led <= 4'b0000;
        else if (cnt == 32'd24_999_999)
            led <= ~led;  // 翻转LED状态
    end

endmodule

这段代码实现了一个流水灯效果。50MHz时钟,计数到2500万次(0.5秒)就翻转一次LED状态。4个LED会同时闪烁。

接下来是约束文件:

# led_top.xdc
set_property PACKAGE_PIN U18 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]

set_property PACKAGE_PIN L17 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]

set_property PACKAGE_PIN J15 [get_ports {led[0]}]
set_property PACKAGE_PIN J14 [get_ports {led[1]}]
set_property PACKAGE_PIN H15 [get_ports {led[2]}]
set_property PACKAGE_PIN H14 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[*]}]

嗯,这里要注意:约束文件里的管脚号要根据你的开发板来改。我用的是Xilinx Artix-7开发板,如果你用其他板子,一定要查原理图确认管脚。

综合、实现、生成比特流,然后下载到板子上。如果一切顺利,你会看到4个LED同时闪烁。如果没亮,别急,先检查这几个地方:

  • 时钟是否接对了?
  • 复位信号是高有效还是低有效?
  • LED是共阳极还是共阴极?

避坑指南:我曾经犯过一个低级错误——把复位信号接反了。代码里写的是低有效复位,但板子上的复位按键输出的是高电平。结果上电后LED死活不亮,查了半天才发现是复位极性搞反了。

3.7 本章知识体系

下面这张图帮你梳理一下本章的核心逻辑:

开发环境搭建知识体系 FPGA开发环境 工具选型:Vivado vs Quartus 安装配置:路径、器件包、环境变量 仿真工具:ModelSim / VCS 版本管理:Git入门与.gitignore 第一个LED工程:代码→约束→下载 避坑要点 • 路径不要有中文 • 器件包要装全 • 复位极性要确认 • 仿真要覆盖边界

这张图把本章的知识点串起来了。从工具选型开始,到安装配置,再到仿真和版本管理,最后用LED工程验证整个流程。每一步都是环环相扣的。

好了,环境搭建就到这里。记住,工具只是手段,真正重要的是你对FPGA设计本身的理解。下一章咱们开始讲Verilog语法,到时候我会分享一些写代码的小技巧。


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