第二章:开发环境搭建——Vivado/Quartus安装、开发板选择、第一个LED灯程序
说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上大半天。我见过不少同学,软件装到一半报错,或者板子连上没反应,心态直接崩了。这一章,咱们就把这些坑一个个填平。
2.1 开发工具的选择:Vivado vs Quartus
目前主流的FPGA厂商就两家:Xilinx(现在叫AMD)和Intel(原Altera)。对应的工具分别是Vivado和Quartus Prime。你选哪个,基本取决于你手头有什么板子。
| 对比项 | Vivado(Xilinx/AMD) | Quartus Prime(Intel) |
|---|---|---|
| 支持的器件 | 7系列、UltraScale、Versal等 | Cyclone、Arria、Stratix等 |
| 安装包大小 | 约40-80GB(WebPack版较小) | 约20-50GB(Lite版免费) |
| 免费版本 | Vivado HLx WebPACK | Quartus Prime Lite |
| 操作系统 | Windows/Linux | Windows/Linux |
| 学习曲线 | 中等偏陡 | 相对平缓 |
我个人习惯:如果做高速接口或复杂SoC设计,我偏向Vivado,它的综合和布局布线能力确实强。但如果是入门学习,Quartus的界面更友好,而且Intel的Cyclone系列板子便宜,适合练手。
2.2 安装Vivado(以2023.1版本为例)
安装过程其实不复杂,但有几个关键点要注意。我建议你下载WebPACK版本,功能完全够用,还免费。
- 下载安装包:去AMD官网注册账号,下载Vivado HLx 2023.1 WebPACK。大概40GB,建议用下载工具,别用浏览器直接下。
- 解压并运行:解压后以管理员身份运行
xsetup.exe。 - 选择版本:勾选“Vivado HL WebPACK”,这是免费版。
- 选择组件:至少勾选“Vivado”和“Vitis”(用于嵌入式开发)。如果你用Zynq,Vitis是必须的。
- 安装路径:比如
D:\Xilinx\Vivado\2023.1,记住不要中文。 - 等待安装:这个过程大概30分钟到1小时,取决于你的电脑配置。去喝杯咖啡吧。
2.3 安装Quartus Prime(以20.1 Lite版本为例)
Quartus的安装相对简单,但要注意版本兼容性。我遇到过Quartus 18.0不支持某些新器件的情况,所以尽量用较新版本。
- 下载:去Intel官网下载Quartus Prime Lite Edition 20.1。
- 运行安装程序:双击
QuartusLiteSetup-20.1.0.711-windows.exe。 - 选择组件:至少勾选“Quartus Prime Lite Edition”和“Device Support”(根据你的板子型号选择,比如Cyclone V)。
- 安装路径:比如
D:\intelFPGA\20.1。 - 等待安装:同样需要一些时间,但比Vivado快不少。
2.4 开发板选择:入门推荐
选板子这件事,说白了就是看预算和需求。我刚开始学的时候用的是Xilinx的Spartan-6,现在早停产了。目前入门推荐以下几款:
- Xilinx/AMD:
- Basys 3(Artix-7芯片):约1200元,适合纯逻辑设计,板载外设丰富。
- Nexys A7(Artix-7芯片):约2000元,资源更多,适合做嵌入式系统。
- Zynq-7020(如PYNQ-Z2):约1500元,带ARM核,适合软硬件协同设计。
- Intel:
- DE10-Lite(MAX 10芯片):约600元,性价比极高,适合入门。
- Cyclone V GX Starter Kit:约1500元,带高速收发器,适合做通信实验。
我的建议:如果你预算有限,DE10-Lite是首选,600块钱就能玩起来。如果以后想做图像处理或深度学习加速,直接上Zynq系列,省得后面换板子。
2.5 第一个LED灯程序(以Vivado + Basys 3为例)
好了,环境装好了,板子也到手了。咱们来点亮第一个LED。这个程序虽然简单,但包含了FPGA开发的完整流程:设计输入→综合→实现→下载。
2.5.1 创建工程
- 打开Vivado,点击“Create Project”。
- 输入工程名,比如
led_test,路径不要有中文。 - 选择“RTL Project”,勾选“Do not specify sources at this time”。
- 选择器件:Basys 3用的是xc7a35tcpg236-1。你可以在“Parts”里搜索。
- 点击Finish。
2.5.2 编写Verilog代码
在工程中新建一个设计源文件(Add Sources → Create File),命名为led_top.v。代码如下:
module led_top(
input wire clk, // 100MHz 板载时钟
input wire rst_n, // 复位按键,低电平有效
output reg [3:0] led // 4个LED
);
// 计数器,用于分频
reg [27:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 28'd0;
else
cnt <= cnt + 1'b1;
end
// 取计数器最高4位驱动LED,实现流水灯效果
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 4'b0001;
else
led <= cnt[27:24];
end
endmodule
这段代码的逻辑很简单:用28位计数器对100MHz时钟分频,然后取高4位驱动LED。因为计数器一直在累加,所以LED会以流水灯的形式闪烁。
2.5.3 添加约束文件
新建一个约束文件(Add Sources → Add or Create Constraints),命名为basys3.xdc。内容如下:
# 时钟引脚
set_property PACKAGE_PIN W5 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
# 复位引脚
set_property PACKAGE_PIN U18 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
# LED引脚
set_property PACKAGE_PIN U16 [get_ports {led[0]}]
set_property PACKAGE_PIN E19 [get_ports {led[1]}]
set_property PACKAGE_PIN U19 [get_ports {led[2]}]
set_property PACKAGE_PIN V19 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[*]}]
这些引脚定义可以从Basys 3的原理图里找到。嗯,这里要注意,不同板子的引脚定义不一样,千万别照抄。
2.5.4 综合、实现、生成比特流
- 点击“Run Synthesis”,等待综合完成。
- 综合完成后,点击“Run Implementation”。
- 实现完成后,点击“Generate Bitstream”。
这个过程可能需要几分钟。如果报错,多半是语法问题或约束文件写错了。检查一下代码里的端口名和约束文件里的get_ports是否一致。
2.5.5 下载到板子
- 用USB线连接Basys 3和电脑。
- 打开“Hardware Manager”,点击“Open Target” → “Auto Connect”。
- 选择生成的
.bit文件,点击“Program”。
如果一切顺利,你会看到板子上的4个LED开始循环闪烁。那一刻,说实话,还是挺有成就感的。
2.6 知识体系总览
下面这张图概括了本章的核心内容,从工具选择到第一个程序跑通,每一步都环环相扣。
你看,整个流程其实就这几步。很多同学卡在综合或实现阶段,其实多半是代码语法问题,或者约束文件写错了。我建议你每写完一段代码,先检查一下有没有拼写错误,比如posedge写成posedage,这种低级错误我犯过不止一次。
好了,到这里你已经成功搭建了开发环境,并且跑通了第一个程序。接下来就可以开始玩更复杂的设计了。