第三章 开发环境搭建: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

为什么?三个理由:

  1. 语法更像C,上手快。你想想看,学VHDL那套entity/architecture的写法,光记关键字就得花一周。
  2. 国内主流。你去招聘网站看看,10个FPGA岗位里,9个要求Verilog。VHDL更多用在军工、航天领域。
  3. 资源多。网上的开源项目、教程、论坛,Verilog的占比至少80%以上。

当然,VHDL也有它的优势:类型检查严格,适合大型团队协作。但咱们是入门,先学会跑,再学怎么跑得稳。

我的个人经验: 我建议你两个都了解,但先精通一个。我自己是Verilog起家,后来项目需要才补的VHDL。说白了,语言只是工具,核心是数字逻辑设计的思想。

3.4 第一个工程:点亮LED

好,工具装好了,语言选好了,咱们来跑第一个工程。目标很简单:让FPGA板子上的LED闪烁。这是FPGA界的“Hello World”。

我以Vivado为例,Quartus的流程大同小异。

3.4.1 创建工程

  1. 打开Vivado,点击 Create Project
  2. 输入工程名,比如 led_blink。路径别带中文。
  3. 选择 RTL Project,勾选 Do not specify sources at this time(后面再加文件)。
  4. 选择芯片型号。如果你用的是开发板,去官网查型号。如果是自己画板子,选你用的那颗芯片。
  5. 点击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 综合、实现、生成比特流

流程三步走:

  1. Synthesis(综合):把Verilog代码转换成网表。
  2. Implementation(实现):把网表映射到具体的逻辑单元和布线资源。
  3. Generate Bitstream(生成比特流):生成最终下载到FPGA的文件。

每一步都可以直接点 Run。如果报错,看错误信息定位问题。最常见的错误是语法错误和引脚约束不对。

3.4.5 下载到板子

连接好下载器(一般是JTAG),点击 Open Hardware Manager,选择 Program device,选中生成的 .bit 文件,点击下载。

如果一切顺利,你会看到板子上的LED开始闪烁。那一刻,恭喜你,你已经正式踏入FPGA的大门了。

🎯 核心要点回顾:

  • Vivado和Quartus选一个装就行,别贪多。
  • Verilog是入门首选,VHDL可以后面再学。
  • 第一个工程从点亮LED开始,流程是:创建工程 → 写代码 → 加约束 → 综合实现 → 下载。

嗯,这一章的内容就到这里。工具装好了,第一个工程也跑通了,接下来你就可以开始折腾更复杂的设计了。


公众号:蓝海资料掘金营,微信deep3321