4、FPGA开发环境搭建:Vivado/Quartus安装、仿真工具配置、第一个LED工程
说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上大半天。我见过不少同学,装完软件发现仿真跑不起来,或者下载器死活认不到。嗯,这节课我们就来把这第一步踩实了。
4.1 开发工具的选择:Vivado vs Quartus
目前主流的FPGA厂商就两家:Xilinx(现在叫AMD)和Intel(原Altera)。对应的工具分别是Vivado和Quartus Prime。我个人习惯是,项目用哪家芯片就用哪家工具,没什么好纠结的。
| 对比项 | Vivado | Quartus Prime |
|---|---|---|
| 适用芯片 | Xilinx 7系列及以后 | Intel Cyclone/Arria/Stratix |
| 安装包大小 | 约30-50GB(完整版) | 约15-25GB(标准版) |
| 仿真器集成 | 自带Vivado Simulator | 自带ModelSim Starter |
| 免费版本 | Vivado WebPACK(免费) | Quartus Prime Lite(免费) |
你想想看,如果只是学习,两个工具的免费版都够用了。我在项目中遇到过用Vivado做高速接口的案例,也用过Quartus做工业控制板。工具只是手段,核心还是你对硬件逻辑的理解。
4.2 安装避坑指南
安装过程其实不复杂,但有几个坑我得提前告诉你。
- 路径不要有中文和空格——我曾经因为装了中文用户名,导致编译报错查了两天
- 关闭杀毒软件——安装过程中会写入注册表和系统变量,杀毒软件经常误拦
- 硬盘预留足够空间——Vivado完整安装需要至少60GB空闲,Quartus也需要30GB
- 安装前断网——有些版本联网安装会卡在许可证验证环节
我个人建议,如果你是学生或者个人学习,直接下载WebPACK或Lite版本就行。功能完全够用,而且不用折腾破解。说白了,正版免费它不香吗?
4.3 仿真工具配置
仿真,是FPGA开发中最重要的一环。我刚开始做设计时,总觉得仿真浪费时间,直接上板子调。结果呢?烧一片炸一片,板子都冒烟了。从那以后,我再也不敢跳过仿真了。
Vivado自带仿真器,开箱即用。Quartus则推荐搭配ModelSim。配置方法很简单:
// Vivado中设置仿真器
Tools -> Settings -> Simulation
选择 "Vivado Simulator" 或 "ModelSim"
// Quartus中设置仿真器
Assignments -> Settings -> EDA Tool Settings -> Simulation
指定 ModelSim 安装路径
4.4 第一个LED工程——点亮它!
好了,理论说完了,我们来动手。第一个工程,就是让LED灯闪烁。别小看这个例子,它包含了FPGA开发的完整流程:设计输入→综合→实现→下载。
4.4.1 创建工程
以Vivado为例,新建工程时选择RTL Project,芯片型号根据你的板子来。我手头这块是Artix-7,型号xc7a35tcsg324-1。
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;
// 计数器,每500ms翻转一次
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 25'd0;
else if (cnt == 25'd24_999_999)
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;
else
led <= led;
end
endmodule
代码很简单,就是一个计数器。50MHz时钟下,计数到2500万次就是0.5秒。每次计数满,LED翻转一次。嗯,这里要注意,复位是低有效,很多新手容易搞反。
4.4.3 仿真验证
写完了代码,先别急着下载。写个testbench跑一下仿真:
`timescale 1ns / 1ps
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
仿真波形里,你应该能看到LED信号每0.5秒翻转一次。如果波形不对,先检查计数器有没有溢出,再检查复位逻辑。
4.4.4 引脚约束与下载
仿真通过后,需要告诉工具LED和时钟连在哪个引脚上。新建约束文件.xdc:
set_property PACKAGE_PIN E3 [get_ports clk]
set_property PACKAGE_PIN J15 [get_ports led]
set_property PACKAGE_PIN C12 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
然后点击Generate Bitstream,生成比特流文件。最后用下载器连上板子,点击Program。如果一切顺利,你就能看到LED一闪一闪了。
- 代码编译无错误、无严重警告
- 仿真波形符合预期
- 板子上LED正常闪烁
4.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你对照着看,思路会更清晰。
这张图把整个流程串起来了。你从工具选择开始,一路走到下载验证。每一步都有对应的操作和检查点。说白了,FPGA开发就是个「设计→验证→实现」的循环,别想着一步到位。
4.6 常见问题与解决
- 编译报错:找不到模块——检查文件名和模块名是否一致,Verilog是大小写敏感的
- 仿真波形全是X或Z——多半是复位没拉起来,或者时钟没给
- 下载失败:无法识别设备——检查下载器驱动,或者换根USB线。我遇到过劣质线导致下载失败的情况
- LED不亮——先确认引脚约束对不对,再用万用表量一下板子上的LED有没有供电
好了,环境搭建和第一个工程就讲到这里。你跟着做一遍,遇到问题别慌,先看错误信息,再对照上面的常见问题排查。搞不定的话,多试几次,经验就是这么积累出来的。
公众号:蓝海资料掘金营,微信deep3321