第二章:开发环境搭建——工欲善其事,必先利其器
各位同学,咱们直接进入正题。做FPGA开发,第一步就是把家伙事儿备齐。你想想看,一个木匠没有锯子怎么干活?FPGA工程师也一样,没有趁手的开发环境,再牛的想法也实现不了。
这一章,我带你把Vivado和Quartus装好、配好,再认识一下常见的开发板,最后跑通你的第一个FPGA工程——LED闪烁。嗯,这是每个FPGA工程师的“Hello World”,也是你入行的起点。
2.1 Vivado与Quartus:两大主流IDE的选择
目前市面上主流的FPGA厂商就两家:Xilinx(现在叫AMD Xilinx)和Intel(原Altera)。对应的开发工具分别是Vivado和Quartus Prime。
我个人习惯:如果项目用的是Xilinx的芯片,比如Artix-7、Kintex-7或者Zynq系列,我首选Vivado。如果是Intel的Cyclone、Arria系列,那就用Quartus。说白了,各家的工具对自家芯片支持最好,别混着用。
| 特性 | Vivado | Quartus Prime |
|---|---|---|
| 适用芯片 | Xilinx 7系列及以后 | Intel Cyclone/Arria/Stratix |
| 综合引擎 | Synplify-based | Quartus内置综合 |
| 仿真工具 | Vivado Simulator | ModelSim/Questa |
| 调试方式 | ILA/VIO(逻辑分析仪) | SignalTap II |
| 安装包大小 | 约30-50GB | 约15-25GB |
2.2 安装与配置:别让环境卡住你
安装过程其实不复杂,但有几个关键点要注意。
2.2.1 Vivado安装要点
- 版本选择:我个人推荐Vivado 2019.1或2020.2,这两个版本比较稳定。别追新,新版本有时候bug多。
- 安装路径:不要有中文路径!不要有空格!我见过有人装在“C:\Program Files (x86)\Vivado”下面,结果编译报错找半天原因。
- 许可证:去Xilinx官网申请免费的WebPACK许可证,够你学完整个课程了。
- 磁盘空间:至少预留60GB。嗯,Vivado是个大家伙。
2.2.2 Quartus安装要点
- 版本选择:Quartus Prime Lite版是免费的,功能足够用。
- ModelSim:Quartus自带ModelSim Starter版,但功能受限。我建议单独装一个ModelSim SE或Questa,仿真效率高很多。
- 驱动:如果你用USB Blaster下载器,记得装驱动。我曾经因为驱动没装好,折腾了一下午才发现是这个问题。
2.3 开发板介绍:选对板子,事半功倍
开发板是FPGA工程师的“试验田”。我见过不少初学者一上来就买高端板子,结果吃灰了。其实,入门阶段一块便宜的板子就够了。
这里我列几款常见的开发板,供你参考:
| 开发板型号 | 芯片 | 价格区间 | 适合场景 |
|---|---|---|---|
| Nexys 4 DDR | Artix-7 XC7A100T | 约1500元 | 入门学习、数字逻辑实验 |
| Basys 3 | Artix-7 XC7A35T | 约800元 | 学生党首选,性价比高 |
| DE10-Lite | MAX 10 10M50DAF | 约600元 | Intel系入门,带ADC |
| Zynq-7020 | Zynq-7000 (ARM+FPGA) | 约2000元 | 软核CPU移植、嵌入式系统 |
2.4 第一个FPGA工程:LED闪烁
好了,环境装好了,板子也认识了。咱们来写第一个程序——让LED闪烁。这是FPGA界的“Hello World”,简单但意义重大。
我以Vivado + Basys 3为例,带你把流程走一遍。
2.4.1 创建工程
- 打开Vivado,点击“Create Project”。
- 工程名:led_blink,路径不要有中文。
- 选择RTL Project,勾选“Do not specify sources at this time”。
- 选择芯片:Basys 3用的是xc7a35tcpg236-1。
- 点击Finish,工程创建完成。
2.4.2 编写Verilog代码
在工程中添加一个设计源文件,命名为led_blink.v。代码如下:
module led_blink(
input wire clk, // 100MHz 板载时钟
input wire rst_n, // 复位,低有效
output reg [3:0] led // 4个LED
);
// 分频计数器
reg [26:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 27'd0;
else
cnt <= cnt + 1'b1;
end
// 取最高位作为闪烁控制
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 4'b0000;
else
led <= cnt[26] ? 4'b1111 : 4'b0000;
end
endmodule
代码很简单:用27位计数器对100MHz时钟分频,最高位cnt[26]的翻转频率大约是100MHz / 2^27 ≈ 0.745Hz,也就是大约1.34秒闪一次。
2.4.3 添加约束文件
Basys 3的约束文件(.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]}]
约束文件怎么写?去开发板官网下载原理图,对着原理图一个个找。我当年第一次写约束,把led[0]和led[1]的引脚搞反了,结果LED亮的位置不对。嗯,这种低级错误犯一次就够了。
2.4.4 综合、实现、生成比特流
- 点击“Run Synthesis”,等待综合完成。
- 综合完成后,点击“Run Implementation”。
- 实现完成后,点击“Generate Bitstream”。
- 比特流生成后,点击“Open Hardware Manager”,连接开发板,下载程序。
如果一切顺利,你会看到板子上的4个LED同时闪烁。那一刻,恭喜你——你已经是一个FPGA工程师了。
2.5 硬件描述语言选择:Verilog还是VHDL?
这个问题几乎每个初学者都会问。我的回答很简单:选Verilog。
为什么?
- 市场占有率:目前FPGA行业,Verilog的使用率超过80%。你找工作,十家公司有八家要求Verilog。
- 学习曲线:Verilog语法类似C语言,上手快。VHDL语法严谨但啰嗦,写个计数器都要定义好几行。
- 资源丰富:网上的开源项目、教程、论坛,绝大多数都是Verilog。
当然,VHDL也有它的优势:强类型检查、适合大型项目。但说实话,对于入门和大部分嵌入式应用,Verilog完全够用。
我个人习惯:小项目用Verilog,大项目用SystemVerilog。SystemVerilog是Verilog的升级版,支持面向对象、断言等高级特性。等你学完这门课,可以自己研究一下。
2.6 本章知识体系
为了让你更直观地理解本章的内容结构,我画了一张图:
这张图把本章的知识点串起来了。你跟着这个流程走一遍,环境搭建这块就算拿下了。
好了,这一章的内容就到这里。环境搭好了,第一个工程也跑通了,接下来就可以开始深入学习硬件描述语言了。记住:动手实践是最好的学习方式。别光看,打开Vivado,把代码敲一遍,让LED真正闪起来。
公众号:蓝海资料掘金营,微信deep3321