2. 开发环境搭建:Vivado/Quartus安装、ModelSim/QuestaSim仿真器、第一个Hello World工程

说实话,很多初学者一上来就急着写代码,结果装工具装到崩溃。我当年也是这么过来的——下载Vivado花了三个小时,安装又卡在许可证上,折腾了一整天。嗯,今天咱们就把这事一次性捋清楚。

2.1 主流EDA工具的选择

做数字IC设计,你绕不开这几家公司的工具。我个人的建议是:学校或公司用什么,你就用什么。但如果你想自己学,下面这张表可以帮你快速决策。

工具 适用场景 我的评价
Vivado Xilinx FPGA开发 功能最全,但安装包巨大(约30GB)
Quartus Prime Intel FPGA开发 轻量一些,Lite版免费够用
ModelSim 仿真验证 老牌工具,上手快
QuestaSim 高级仿真验证 ModelSim的升级版,支持SystemVerilog
小提示:如果你只是学习Verilog语法,其实用ModelSim就够了。Vivado和Quartus更多是用于综合和实现,前期仿真阶段用不到它们。

2.2 Vivado安装要点

Vivado的安装,说白了就是「耐心活」。我记得第一次装的时候,进度条卡在45%不动了,我还以为电脑死机了。其实它是在解压一些大文件,等就完了。

安装步骤:

  1. 去Xilinx官网下载Vivado HLx安装包(建议选WebPACK版,免费)
  2. 双击运行安装程序,选择「Vivado HL WebPACK」
  3. 勾选「Design Tools」和「Devices」——别全选,只勾你需要的器件型号
  4. 安装路径不要有中文和空格,我习惯用 C:\Xilinx\Vivado
  5. 等待... 大概30分钟到1小时,取决于你的网速和硬盘
注意:安装过程中如果提示缺少VC++运行库,别慌。去微软官网下载「Visual C++ Redistributable」装一下就行。我曾经因为这个卡了半小时,后来发现是Win7系统太老的问题。

2.3 Quartus Prime安装要点

Quartus比Vivado友好不少。Intel的Quartus Prime Lite版完全免费,而且安装包只有Vivado的一半大。我个人觉得,初学者用Quartus入门会更顺畅。

安装步骤:

  1. 从Intel官网下载Quartus Prime Lite Edition
  2. 运行安装程序,选择「Quartus Prime (includes Nios II EDS)」
  3. 器件支持包(Device Support)建议只勾你需要的系列,比如Cyclone V
  4. 安装路径同样不要有中文
  5. 装完后需要注册一个Intel账号,免费获取许可证

避坑指南:Quartus的许可证文件(.dat文件)需要放在安装目录的 licenses 文件夹下。我曾经把许可证放桌面上,结果软件一直报错「License not found」,折腾了半天才发现是路径问题。

2.4 ModelSim与QuestaSim仿真器

仿真器才是我们写Verilog时最常用的工具。你想想看,写代码不仿真,就像做饭不尝味道——你敢直接上菜吗?

ModelSim vs QuestaSim:

  • ModelSim:轻量、稳定,适合Verilog/VHDL仿真。我入行前三年一直用它。
  • QuestaSim:ModelSim的升级版,支持SystemVerilog、UVM等高级特性。现在大公司基本都用这个。

安装其实很简单:下载安装包 -> 一路Next -> 配置环境变量。这里我重点说一个容易忽略的点:仿真库的编译

如果你用Vivado或Quartus自带的仿真器,库是预编译好的。但如果你单独装ModelSim,需要手动编译器件库。具体操作是:

# 在ModelSim命令窗口执行
vlib work
vmap work work
vlog -work work C:/Xilinx/Vivado/2023.1/data/verilog/src/glbl.v

嗯,这一步很多人会跳过,结果仿真时报错「Module not found」。我当年也犯过这个错,后来老老实实把库编译了一遍。

2.5 第一个Hello World工程

好了,工具装完了,咱们来写第一个Verilog程序。说白了就是让一个LED灯闪烁——这是数字IC界的「Hello World」。

步骤一:创建工程

以Vivado为例:

  1. 打开Vivado,点击「Create Project」
  2. 输入工程名:led_blink
  3. 选择RTL Project,勾选「Do not specify sources at this time」
  4. 选择器件型号(随便选一个,比如xc7a35ticsg324-1L)
  5. 点击Finish

步骤二:编写Verilog代码

点击「Add Sources」->「Create File」,新建一个名为 led_blink.v 的文件。然后写入以下代码:

module led_blink (
    input  wire       clk,      // 50MHz时钟输入
    input  wire       rst_n,    // 复位信号,低电平有效
    output reg        led       // LED输出
);

    // 计数器,用于分频
    reg [24:0] cnt;

    // 计数器逻辑
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            cnt <= 25'd0;
        else if (cnt == 25'd24_999_999)
            cnt <= 25'd0;
        else
            cnt <= cnt + 1'b1;
    end

    // LED输出:每0.5秒翻转一次
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            led <= 1'b0;
        else if (cnt == 25'd24_999_999)
            led <= ~led;
        else
            led <= led;
    end

endmodule
解释一下:50MHz时钟周期是20ns,计数25_000_000次就是0.5秒。每次计数满就翻转LED,这样就实现了0.5Hz的闪烁频率。这个思路我在很多项目里都用过,比如控制电机转速、产生PWM波等等。

步骤三:编写仿真测试文件

新建一个 tb_led_blink.v 文件:

`timescale 1ns / 1ps

module tb_led_blink;

    reg  clk;
    reg  rst_n;
    wire led;

    // 实例化待测模块
    led_blink uut (
        .clk   (clk),
        .rst_n (rst_n),
        .led   (led)
    );

    // 生成时钟:周期20ns
    initial begin
        clk = 0;
        forever #10 clk = ~clk;
    end

    // 复位和仿真过程
    initial begin
        rst_n = 0;
        #100;
        rst_n = 1;
        #5000;  // 仿真5us
        $finish;
    end

    // 打印LED状态变化
    always @(posedge led or negedge led) begin
        $display("Time = %t, LED = %b", $time, led);
    end

endmodule

步骤四:运行仿真

在Vivado的Flow Navigator中点击「Run Simulation」->「Run Behavioral Simulation」。你会看到LED信号每0.5秒翻转一次——恭喜,你的第一个Verilog工程跑起来了!

我的经验:第一次仿真看到波形时,说实话挺激动的。虽然只是一个LED闪烁,但这是你从「看教程」到「真正动手」的跨越。很多同事后来问我怎么学Verilog,我都说:先让一个灯闪起来,其他的慢慢来。

2.6 本章知识体系

下面这张图帮你梳理了开发环境搭建的核心逻辑。说白了就是三件事:选工具、装工具、跑通第一个工程。

开发环境搭建知识体系 工具选择 安装配置 Hello World Vivado vs Quartus ModelSim vs Questa 许可证配置 仿真库编译 RTL代码编写 仿真验证 核心目标:跑通第一个仿真波形 工具只是手段,动手才是关键

嗯,到这里开发环境就搭建好了。你可能会觉得装工具很麻烦,但相信我——这一步跨过去,后面写代码、做仿真就会顺畅很多。工具装好了,咱们下一章就开始正式写Verilog代码了。


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