3、开发环境搭建:Vivado/Quartus安装、License配置、第一个点亮LED的程序
说实话,很多从单片机转过来的朋友,第一关就卡在开发环境上。
我见过有人装Vivado装了三天,最后发现是硬盘空间不够。也有人装Quartus时选了所有器件包,结果C盘直接爆红。嗯,这些坑我都踩过。今天咱们就把这事捋清楚。
3.1 两大工具的选择:Vivado vs Quartus
先说说这两个工具的区别。我个人习惯把Vivado和Quartus比作「苹果」和「安卓」——各有拥趸,但都能干活。
| 对比项 | Vivado (Xilinx/AMD) | Quartus (Intel/Altera) |
|---|---|---|
| 适用器件 | Artix、Kintex、Virtex、Zynq等 | Cyclone、Arria、Stratix、MAX等 |
| 安装包大小 | 约40-80GB(全器件包) | 约20-50GB(全器件包) |
| 操作系统 | Windows/Linux | Windows/Linux |
| 免费版本 | Vivado WebPACK(免费) | Quartus Lite(免费) |
| 学习曲线 | 中等偏陡 | 相对平缓 |
怎么选?如果你手头有开发板,那就跟着板子走。没有的话,我个人建议从Xilinx的Artix-7系列开始,因为资料多、社区活跃。我在项目中用过Artix-7做工业相机接口,稳定性确实不错。
3.2 Vivado安装与License配置
先讲Vivado。为什么?因为它的安装过程更「折磨人」,搞定了Vivado,Quartus就是小菜一碟。
3.2.1 下载与安装
去Xilinx官网下载Vivado HLx。注意选版本——我个人建议用2020.1到2022.2之间的版本,太新的版本bug多,太老的版本器件支持少。
- 硬盘空间:至少留100GB空闲。我建议装在D盘或E盘,别放C盘。
- 安装选项:选「Vivado HL WebPACK」就够了。除非你要搞Vitis或PetaLinux,否则别勾「Vitis Platform」。
- 器件支持:只勾你需要的器件系列。比如你用Artix-7,就只勾「7 Series」。全勾的话,安装时间多3小时。
- 安装路径:不要有中文路径!不要有空格!我见过有人把路径写成「D:\FPGA工具\Vivado 2022」,结果编译报错找了一下午。
3.2.2 License配置
Vivado的License分两种:Node-Locked(锁定节点)和Floating(浮动)。个人学习用Node-Locked就够了。
具体步骤:
- 去Xilinx官网注册账号,申请免费License。
- 选择「Vivado WebPACK License」,会发一个.lic文件到邮箱。
- 打开Vivado → Help → Manage License → Load License。
- 选择你下载的.lic文件,搞定。
3.3 Quartus安装与License配置
Quartus的安装比Vivado友好很多。Intel的安装包做得比较「轻量」。
3.3.1 下载与安装
- 去Intel FPGA官网下载Quartus Prime Lite Edition。
- 安装包约2-3GB,解压后直接运行setup.exe。
- 选择器件支持:同样只勾你需要的系列。比如Cyclone IV或Cyclone 10。
- 安装路径同样不要有中文。
Quartus有个好处:它自带USB-Blaster驱动。你插上下载器,Windows会自动识别。Vivado那边有时候还得手动装驱动,麻烦。
3.3.2 License配置
Quartus的免费License不需要申请。安装完就是Lite版,功能完全够用。如果你要用Pro版,才需要去Intel官网申请。
配置方法:Tools → License Setup → 指定License文件路径。
核心区别: Vivado的免费版有器件限制(比如某些高端器件不能用),Quartus Lite版功能限制更少。但两者都能跑通「点亮LED」这种入门实验。
3.4 第一个点亮LED的程序
好了,环境搭好了,咱们来写第一个程序。说白了就是「FPGA版的Hello World」。
3.4.1 硬件连接
假设你用的是最常见的开发板:
- Xilinx:Nexys 4 DDR(Artix-7)或Basys 3
- Intel:DE10-Lite(MAX 10)或DE0-Nano(Cyclone IV)
LED一般接在FPGA的GPIO上,高电平点亮。具体引脚号看开发板原理图。我习惯把原理图打印出来贴在桌上,省得每次查。
3.4.2 Verilog代码
咱们写一个最简单的:让LED每隔1秒闪烁一次。
// led_blink.v
// 功能:LED闪烁,周期1秒
// 适用:Nexys 4 DDR (100MHz时钟)
module led_blink (
input wire clk, // 系统时钟 100MHz
input wire rst_n, // 复位,低有效
output reg led // LED输出
);
// 100MHz = 100,000,000次/秒
// 要产生1秒周期,需要计数到 100,000,000
// 用27位计数器足够(2^27 = 134,217,728)
reg [26:0] cnt;
// 计数器逻辑
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 27'd0;
else if (cnt == 27'd99_999_999)
cnt <= 27'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 == 27'd99_999_999)
led <= ~led;
else
led <= led;
end
endmodule
这段代码看着简单,但有几个关键点:
- 计数器宽度:100MHz时钟,1秒需要计数1亿次。2^27=1.34亿,所以27位够用。
- 复位逻辑:我习惯用异步复位、同步释放。这里为了简单用了异步复位。
- LED翻转:在计数器满的瞬间翻转,而不是持续高电平。这样LED会均匀闪烁。
3.4.3 引脚约束文件
Verilog代码写好了,还得告诉工具:哪个信号对应哪个物理引脚。
Xilinx (Vivado) 的.xdc文件:
# led_blink.xdc
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]
set_property PACKAGE_PIN H17 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]
Intel (Quartus) 的.qsf文件:
# led_blink.qsf
set_location_assignment PIN_E3 -to clk
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to clk
set_location_assignment PIN_C12 -to rst_n
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to rst_n
set_location_assignment PIN_H17 -to led
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to led
引脚号怎么查?打开开发板的原理图PDF,搜索「LED」或「CLK」。比如Nexys 4的时钟在E3,LED在H17。不同板子不一样,别照抄。
3.4.4 编译与下载
流程其实差不多:
- 新建工程,选择器件型号。
- 添加Verilog源文件。
- 添加约束文件。
- 点击「Synthesis」→「Implementation」→「Generate Bitstream」。
- 连接下载器,点击「Program Device」。
Vivado里叫「Generate Bitstream」,Quartus里叫「Assembler」。名字不同,意思一样。
3.5 常见问题与解决
我整理了几个新手最容易碰到的问题:
| 问题 | 原因 | 解决方法 |
|---|---|---|
| Vivado安装卡在80% | 网络问题或硬盘空间不足 | 关闭杀毒软件,检查硬盘空间 |
| License报错「Invalid host」 | 网卡MAC地址变了 | 重新生成License,或禁用虚拟网卡 |
| 下载器识别不到 | 驱动没装好 | 手动安装USB-Blaster或Digilent驱动 |
| LED不亮 | 引脚约束错误或复位没释放 | 检查rst_n是否拉高,检查引脚号 |
说到下载器识别不到,我当年在实验室折腾了一下午。最后发现是USB线的问题——有些线只能充电不能传数据。换根线就好了。嗯,这种低级错误谁都犯过。
3.6 小结
环境搭建这事,说白了就是「一次配置,长期受益」。花点时间把Vivado或Quartus装好、License配好,后面几十章就顺畅了。
点亮LED这个实验虽然简单,但它验证了整个开发流程:代码编写 → 综合 → 布局布线 → 生成比特流 → 下载。每一步都走通了,你就算正式入门了。
下一章咱们会讲Verilog的基本语法。到时候你会发现,FPGA的编程思维和单片机真的不一样。准备好了吗?