2. 开发环境搭建:Vivado/Quartus安装,仿真工具Modelsim配置,第一个LED灯实验

说实话,很多初学者一上来就急着写代码,结果环境没配好,折腾半天连个灯都点不亮。我当年刚入行时也犯过这毛病——装完Vivado就开干,结果仿真跑不起来,查了半天发现是库没编译。嗯,这节课咱们就把这些坑提前填上。

2.1 开发工具选型:Vivado还是Quartus?

做FPGA开发,你首先得选个趁手的兵器。目前主流就两家:

  • Xilinx(现属AMD):对应工具是Vivado,主打高端系列(Virtex、Kintex、Artix)
  • Intel(原Altera):对应工具是Quartus Prime,主打Cyclone、Arria、Stratix系列

我个人习惯是:做图像处理项目优先选Xilinx,因为它的IP核生态更丰富,尤其是MIPI、HDMI这些接口IP,用起来顺手。但如果你做工业控制或者成本敏感的项目,Intel的Cyclone系列性价比确实高。

小建议:初学者别纠结选哪个。两个工具流程大同小异,学会一个另一个自然上手。我建议你先根据手头开发板来定——手上有啥板子就用啥工具。

2.2 Vivado安装实战

咱们以Vivado 2023.1为例,讲几个关键点。

安装前准备:

  • 硬盘至少留80GB空间(完整安装要60GB+)
  • 内存建议16GB以上,8GB也能跑但会卡
  • Windows系统路径不要有中文!不要有空格!

安装步骤:

  1. 从官网下载Vivado HLx Installer
  2. 运行安装程序,选择「Vivado HL WebPACK」或「Vivado HL Design Edition」
  3. 勾选组件时,至少选上:
    • Vivado Design Suite
    • Vivado Simulator(内置仿真器)
    • Devices(根据你的芯片型号选,比如Artix-7)
  4. 安装路径我建议用默认的 C:\Xilinx,别乱改
  5. 等待...大概1-2小时,可以去喝杯咖啡
注意:安装过程中如果报错「无法安装VC++运行库」,手动装一下Visual C++ Redistributable就行。我曾经在这卡了半小时,后来发现是系统缺了2015-2022的运行库。

2.3 Quartus Prime安装要点

Quartus的安装相对轻量一些。以Quartus Prime 22.1 Lite版为例:

  • Lite版免费,功能足够初学者用
  • 安装时记得勾选「ModelSim Intel FPGA Edition」——这个就是内置的仿真器
  • 设备支持包按需选,别全勾,不然硬盘受不了

安装完成后,我建议你做一件事:打开Tools → Options,把「Default temporary file directory」改到一个空间大的盘。Quartus编译时会产生大量临时文件,默认在C盘容易爆。

2.4 Modelsim配置——仿真环境的核心

Modelsim是FPGA仿真的标配工具。虽然Vivado和Quartus都自带仿真器,但说实话,Modelsim的调试体验更好。我在项目中遇到复杂时序问题时,最后还是靠Modelsim的波形对比功能找到的bug。

Modelsim与Vivado的关联配置:

  1. 安装Modelsim(推荐Modelsim SE-64 2020.4以上版本)
  2. 在Vivado中设置:Tools → Settings → Tool Settings → 3rd Party Simulators
  3. 把Modelsim的安装路径填进去,比如 C:\modeltech64_2020.4\win64
  4. 编译Xilinx库:在Vivado Tcl Console里运行:
    compile_simlib -simulator modelsim -family all -language all -dir {C:\modelsim_lib}
    这个过程大概要20分钟,耐心等。
关键一步:库编译完成后,在Modelsim里执行 vmap 命令映射库路径。不然仿真时会报错「找不到unisim库」。我见过太多新手在这栽跟头了。

Modelsim与Quartus的关联配置:

  1. Quartus自带Modelsim Intel版,路径一般在 C:\intelFPGA_lite\22.1\modelsim_ase\win32aloem
  2. 在Quartus中:Assignments → Settings → EDA Tool Settings → Simulation
  3. Tool name选「ModelSim」,Format选「Verilog HDL」
  4. 勾选「Compile test bench」并指定你的testbench文件

2.5 第一个LED灯实验——点亮你的FPGA

环境搭好了,咱们来点实际的。让FPGA控制一个LED闪烁,这是硬件工程师的「Hello World」。

硬件连接:

以Xilinx Artix-7开发板为例,LED通常接在FPGA的普通GPIO上。比如板子上有个叫「LD0」的LED,对应FPGA引脚 P17。

Verilog代码:

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 if (cnt == 25'd24_999_999)  // 50MHz分频到1Hz
        cnt <= 25'd0;
    else
        cnt <= cnt + 1'b1;
end

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

endmodule

约束文件(XDC):

set_property PACKAGE_PIN P17 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]

set_property PACKAGE_PIN E3 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]

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

仿真测试:

写个简单的testbench验证一下:

module tb_led_blink();

reg clk;
reg rst_n;
wire led;

led_blink uut (
    .clk(clk),
    .rst_n(rst_n),
    .led(led)
);

initial begin
    clk = 0;
    rst_n = 0;
    #100 rst_n = 1;
end

always #10 clk = ~clk;  // 50MHz时钟

endmodule
调试技巧:仿真时把分频系数改小,比如改成 25'd4,这样LED每5个时钟周期翻转一次,波形看起来更直观。等仿真通过后再改回真实值去烧录。

2.6 知识体系总览

下面这张图把本章的核心逻辑串起来了。你想想看,从工具安装到代码编写,再到仿真验证,其实是一条完整的链路:

开发环境搭建与LED实验知识体系 工具选型 环境安装 仿真配置 Vivado vs Quartus 根据芯片选工具 IP核生态差异 安装与配置 磁盘空间80GB+ 路径不能有中文 Modelsim配置 库编译与映射 第三方工具关联 第一个LED灯实验 LED闪烁验证成功 ✓

说白了,整个流程就是:选好工具 → 装好环境 → 配好仿真 → 写代码验证。每一步都有坑,但踩过一次就记住了。

2.7 常见问题与避坑指南

最后分享几个我实际遇到过的问题:

  • 问题1:Vivado编译库时报错「Permission denied」
    我曾经遇到过,原因是安装路径有权限限制。用管理员身份运行Vivado就解决了。
  • 问题2:Modelsim仿真报错「vsim failed to load library」
    八成是库没映射对。检查一下 modelsim.ini 文件里的库路径,手动改一下就行。
  • 问题3:LED不亮
    先检查约束文件里的引脚号对不对。我有个同事折腾了两天,结果是板子上的LED焊反了...嗯,硬件问题有时候就是这么坑。
核心要点:环境搭建别图快,每一步做完都验证一下。Vivado装完跑个自带的example,Modelsim配完跑个简单的counter仿真,确认没问题再往下走。省得后面出问题不知道是代码的锅还是环境的锅。

好了,环境搭好、第一个LED也点亮了,你已经迈出了FPGA开发的第一步。后面咱们就要开始正经搞图像处理了——从像素点的读写开始。

可可精品资料库