第三章 开发环境搭建:Vivado/Quartus安装指南,硬件描述语言选择(Verilog vs VHDL),第一个工程创建流程
好,咱们直接进入正题。这一章,我带你搞定三件事:装好工具、选对语言、跑通第一个工程。别小看这一步,我见过太多新手卡在环境上,一卡就是半天,心态直接崩了。
3.1 开发环境选择:Vivado vs Quartus
先说结论:用Xilinx的片子,就装Vivado;用Intel(原Altera)的片子,就装Quartus Prime。这两家占了FPGA市场的绝大部分份额,你迟早都得接触。
我个人习惯是电脑里两个都装。为啥?因为项目需求会变。有一次客户临时换了芯片型号,我要是现装工具,黄花菜都凉了。
| 对比项 | Vivado (Xilinx) | Quartus Prime (Intel) |
|---|---|---|
| 支持的器件 | 7系列、UltraScale、Versal等 | Cyclone、Arria、Stratix等 |
| 安装包大小 | 约40-80GB(全功能) | 约20-50GB(全功能) |
| 免费版本 | Vivado HL WebPACK(免费) | Quartus Prime Lite(免费) |
| 综合引擎 | Synplify + 自研 | 自研 + Synplify |
| 仿真器 | 自带XSIM | 自带ModelSim OEM |
嗯,这里要注意:千万别装全功能版。你刚开始学,用免费版完全够用。全功能版里一堆IP核和器件库,你根本用不上,还占硬盘空间。我当年第一次装Vivado,选了“全部安装”,结果C盘直接红了……
3.2 安装避坑指南
安装过程其实不复杂,但有几个坑我得提前告诉你。
- 路径不能有中文! 这是铁律。Vivado和Quartus对中文路径的支持极差,报错信息会让你怀疑人生。
- 关闭杀毒软件。 安装过程中会写注册表、解压大量文件,杀毒软件会误判,导致安装失败。
- 预留至少60GB空间。 别问我怎么知道的,问就是血的教训。
我曾经有一次装Quartus,装到一半蓝屏了。重启后安装程序说“检测到不完整安装,请先卸载”。结果卸载也报错……最后只能手动删注册表,折腾了一下午。所以,安装前确保系统稳定,别开太多程序。
3.3 硬件描述语言:Verilog vs VHDL
这是个老生常谈的问题。我的建议很简单:选Verilog。
为什么?三个理由:
- 语法更像C,上手快。你想想看,学VHDL那套entity/architecture的写法,光记关键字就得花一周。
- 国内主流。你去招聘网站看看,10个FPGA岗位里,9个要求Verilog。VHDL更多用在军工、航天领域。
- 资源多。网上的开源项目、教程、论坛,Verilog的占比至少80%以上。
当然,VHDL也有它的优势:类型检查严格,适合大型团队协作。但咱们是入门,先学会跑,再学怎么跑得稳。
我的个人经验: 我建议你两个都了解,但先精通一个。我自己是Verilog起家,后来项目需要才补的VHDL。说白了,语言只是工具,核心是数字逻辑设计的思想。
3.4 第一个工程:点亮LED
好,工具装好了,语言选好了,咱们来跑第一个工程。目标很简单:让FPGA板子上的LED闪烁。这是FPGA界的“Hello World”。
我以Vivado为例,Quartus的流程大同小异。
3.4.1 创建工程
- 打开Vivado,点击 Create Project。
- 输入工程名,比如
led_blink。路径别带中文。 - 选择 RTL Project,勾选 Do not specify sources at this time(后面再加文件)。
- 选择芯片型号。如果你用的是开发板,去官网查型号。如果是自己画板子,选你用的那颗芯片。
- 点击Finish,工程创建完成。
3.4.2 编写Verilog代码
在工程里新建一个设计文件(Design Sources),命名为 led_blink.v。输入以下代码:
module led_blink(
input wire clk, // 系统时钟,50MHz
input wire rst_n, // 复位,低有效
output reg led // LED输出
);
// 分频计数器
reg [23:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 24'd0;
else
cnt <= cnt + 1'b1;
end
// 取最高位作为LED输出,实现闪烁
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 1'b0;
else
led <= cnt[23];
end
endmodule
这段代码很简单:一个计数器不断累加,取最高位驱动LED。因为最高位变化频率是时钟的2^24分之一,所以人眼就能看到闪烁了。
💡 小技巧: 如果你板子上的LED是低电平点亮,就把 led <= cnt[23] 改成 led <= ~cnt[23]。我刚开始就犯过这个错,焊好板子发现灯不亮,查了半天才发现是极性反了。
3.4.3 添加约束文件
代码写好了,但FPGA不知道哪个引脚接时钟,哪个引脚接LED。所以需要约束文件(XDC文件)。
新建一个约束文件 led_blink.xdc,写入:
# 时钟引脚
set_property PACKAGE_PIN U18 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
# 复位引脚
set_property PACKAGE_PIN R17 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
# LED引脚
set_property PACKAGE_PIN T22 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]
引脚编号你得查开发板的原理图。每个板子都不一样,千万别照抄我的。
3.4.4 综合、实现、生成比特流
流程三步走:
- Synthesis(综合):把Verilog代码转换成网表。
- Implementation(实现):把网表映射到具体的逻辑单元和布线资源。
- Generate Bitstream(生成比特流):生成最终下载到FPGA的文件。
每一步都可以直接点 Run。如果报错,看错误信息定位问题。最常见的错误是语法错误和引脚约束不对。
3.4.5 下载到板子
连接好下载器(一般是JTAG),点击 Open Hardware Manager,选择 Program device,选中生成的 .bit 文件,点击下载。
如果一切顺利,你会看到板子上的LED开始闪烁。那一刻,恭喜你,你已经正式踏入FPGA的大门了。
🎯 核心要点回顾:
- Vivado和Quartus选一个装就行,别贪多。
- Verilog是入门首选,VHDL可以后面再学。
- 第一个工程从点亮LED开始,流程是:创建工程 → 写代码 → 加约束 → 综合实现 → 下载。
嗯,这一章的内容就到这里。工具装好了,第一个工程也跑通了,接下来你就可以开始折腾更复杂的设计了。
公众号:蓝海资料掘金营,微信deep3321