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版本,免费的,功能足够学习用了。
安装步骤:
- 去Xilinx官网注册账号,下载Vivado HLx WebPACK
- 运行安装程序,选择Vivado HL WebPACK
- 勾选需要的器件支持(建议全选,省得后面麻烦)
- 安装路径不要有中文和空格
- 等待...大概需要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快速上手:
- 新建工程,添加设计文件和测试文件
- 编译所有文件(vlog命令)
- 启动仿真(vsim命令)
- 添加波形信号,运行仿真
嗯,这里有个经验:仿真时一定要加足够的测试激励。我曾经写过一个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 本章知识体系
下面这张图帮你梳理一下本章的核心逻辑:
这张图把本章的知识点串起来了。从工具选型开始,到安装配置,再到仿真和版本管理,最后用LED工程验证整个流程。每一步都是环环相扣的。
好了,环境搭建就到这里。记住,工具只是手段,真正重要的是你对FPGA设计本身的理解。下一章咱们开始讲Verilog语法,到时候我会分享一些写代码的小技巧。
公众号:蓝海资料掘金营,微信deep3321