3、FPGA开发环境搭建:Vivado/Quartus安装、License配置、第一个LED闪烁工程、仿真环境(ModelSim/VCS)配置
好,咱们正式开始动手了。这一章,说白了就是“磨刀”。
很多初学者一上来就急着写代码,结果环境没配好,折腾半天连个灯都点不亮。我见过太多人卡在License上,一卡就是一下午。所以,咱们先把刀磨利索。
我个人习惯,不管用哪家的芯片,先把开发环境装好,再配个顺手的仿真器。这样后面写代码、调bug,心里才踏实。
3.1 Vivado与Quartus的安装
这两大工具,你至少得会一个。Xilinx用Vivado,Intel用Quartus。我两边都折腾过,说实话,安装流程大同小异。
3.4.1 Vivado安装要点
Vivado现在版本更新很快,我个人建议装最新的LTS版本,稳定。别追新,追新容易踩坑。
- 下载:去Xilinx官网,注册个账号,下载Vivado HLx。文件很大,几十个G,找个好点的网络环境。
- 安装:一路Next就行。但注意,安装路径不要有中文,不要有空格。我习惯装到D盘根目录,比如
D:\Xilinx\Vivado\2024.1。 - 组件选择:如果你是做电子对抗,建议把“Vivado HL System Edition”勾上,里面包含了System Generator,后面做算法验证有用。
3.1.2 Quartus安装要点
Quartus相对轻量一些,但License管理比Vivado麻烦。我用Quartus做项目时,最头疼的就是License过期。
- 下载:Intel官网,下载Quartus Prime。Lite版是免费的,但功能受限。标准版和Pro版需要License。
- 安装:同样,路径不要中文。我习惯装
D:\Intel\Quartus\24.1。 - 设备支持:安装时记得勾选你用的FPGA型号。比如Cyclone V、Arria 10这些。别全选,全选太占空间。
3.2 License配置——避坑指南
License配置,是新手最容易翻车的地方。我曾经因为License没配好,折腾了一整天,最后发现是MAC地址填错了。
3.2.1 Vivado License配置
Vivado的License分两种:Node-Locked(锁定节点)和Floating(浮动)。咱们个人学习,用Node-Locked就够了。
- 获取License文件:去Xilinx官网申请。需要提供你的网卡MAC地址。
- 查看MAC地址:打开命令行,输入
ipconfig /all,找到“物理地址”。注意,不要有横杠,比如00-1A-2B-3C-4D-5E要写成001A2B3C4D5E。 - 配置:打开Vivado,点击
Help → Manage License,加载你的.lic文件。
我曾经踩过的坑: 笔记本有无线网卡和有线网卡,两个MAC地址不一样。Xilinx认的是有线网卡的MAC。如果你用无线网卡申请,License会失效。
3.2.2 Quartus License配置
Quartus的License更“矫情”。它需要设置环境变量。
- 获取License:同样,去Intel官网申请。需要提供网卡MAC。
- 设置环境变量:右键“此电脑” → 属性 → 高级系统设置 → 环境变量。新建一个变量,变量名
LM_LICENSE_FILE,变量值填你的License文件路径,比如D:\Intel\Quartus\license.dat。 - 验证:打开Quartus,如果右上角没有红色警告,说明配好了。
3.3 第一个LED闪烁工程
好了,环境配好了,咱们来点个灯。这是FPGA界的“Hello World”。
我习惯用Vivado演示,Quartus流程几乎一样,只是界面不同。
3.3.1 创建工程
- 打开Vivado,点击
Create Project。 - 输入工程名,比如
led_blink。路径不要有中文。 - 选择RTL Project,勾选
Do not specify sources at this time。 - 选择芯片型号。我用的是Xilinx Artix-7,型号
xc7a35tcsg324-1。
3.3.2 写代码
新建一个Verilog文件,命名为 led_blink.v。代码如下:
module led_blink(
input clk, // 50MHz 时钟
input 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
cnt <= cnt + 1'b1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 1'b0;
else if (cnt == 25'd24_999_999) // 0.5秒翻转一次
led <= ~led;
else
led <= led;
end
endmodule
这段代码很简单。计数器从0数到2500万,然后LED翻转。50MHz时钟下,正好0.5秒闪一次。
3.3.3 添加约束
新建一个XDC文件,命名为 led_blink.xdc。把时钟和LED绑定到具体的管脚上。
set_property PACKAGE_PIN R4 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property PACKAGE_PIN U16 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]
set_property PACKAGE_PIN U18 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
管脚分配要根据你的板子来。我用的这块板子,时钟在R4,LED在U16。
3.3.4 综合、实现、下载
- 点击
Run Synthesis,等它跑完。 - 点击
Run Implementation,等它跑完。 - 点击
Generate Bitstream,生成比特流文件。 - 连接下载器,点击
Open Hardware Manager,选择Program Device。
如果一切顺利,板子上的LED应该开始闪烁了。嗯,0.5秒一次,很有节奏感。
3.4 仿真环境配置(ModelSim / VCS)
写FPGA不仿真,等于裸奔。我见过太多人直接下板子调,结果烧坏了好几个芯片。仿真,是保护你板子的最好方式。
3.4.1 ModelSim配置
ModelSim是Mentor的工具,现在叫Siemens EDA。Vivado自带了一个精简版,叫Vivado Simulator。但说实话,我用不惯,还是ModelSim顺手。
- 安装:如果你装了Quartus,里面自带ModelSim。单独装的话,去官网下载。
- 关联Vivado:在Vivado里,点击
Tools → Settings → Tool Settings → 3rd Party Simulators,把ModelSim的路径填进去。比如C:\modeltech64_2024.1\win64。 - 编译库:第一次用ModelSim仿真Xilinx的IP,需要先编译库。在Vivado里点击
Tools → Compile Simulation Libraries,选择ModelSim,指定输出路径。这个过程有点慢,喝杯咖啡等一等。
3.4.2 VCS配置
VCS是Synopsys的工具,主要用于ASIC验证。做FPGA的人用得少,但如果你做大型电子对抗系统,VCS的仿真速度比ModelSim快很多。
- 安装:VCS安装比较麻烦,需要配置环境变量。我建议用CentOS或者Ubuntu系统。
- 环境变量:在
.bashrc里添加:
export VCS_HOME=/opt/synopsys/vcs/R-2024.12
export PATH=$VCS_HOME/bin:$PATH
export LM_LICENSE_FILE=27000@license_server_ip
- 编译Xilinx库:VCS也需要编译Xilinx的仿真库。Vivado里同样有
Compile Simulation Libraries选项,选择VCS即可。
我个人建议,初学者先用ModelSim。等后面做复杂系统了,再考虑VCS。别一上来就搞VCS,容易劝退。
3.4.3 写个简单的Testbench
咱们给LED闪烁工程写个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时钟,周期20ns
initial begin
#50000000; // 仿真50ms
$stop;
end
endmodule
在Vivado里,把Testbench设为顶层,然后点击 Run Simulation。你会看到LED信号在0.5秒后开始翻转。嗯,完美。
我的经验: 仿真时,时间尺度别设太大。先跑个几毫秒,看看波形对不对。确认无误后,再跑长时间仿真。否则,仿真器会卡死。
好了,环境搭好了,灯也亮了,仿真也跑了。你可以正式开始FPGA之旅了。下一章,咱们聊聊Verilog语法,那些你真正用得上的东西。