2、FPGA开发环境搭建:Vivado/Quartus安装、工程创建流程、仿真环境配置、硬件调试工具链

做FPGA开发,第一步就是把家伙事儿备齐了。说白了,开发环境就是你的工作台。工欲善其事,必先利其器嘛。我个人习惯先把环境搭得干干净净,后面写代码、调时序才不闹心。

这一章,我带你走一遍Vivado和Quartus的安装、工程创建、仿真配置,还有硬件调试那点事儿。嗯,都是实打实的干货。

2.1 开发工具选型:Vivado vs Quartus

先说说选哪个。这其实取决于你手头的芯片。

  • Vivado:Xilinx家的,现在叫AMD Xilinx。7系列及以上的FPGA,比如Artix-7、Kintex-7、Virtex-7,还有Zynq,都用它。
  • Quartus Prime:Intel家的,以前叫Altera。Cyclone、Arria、Stratix系列,都用这个。

我在项目中遇到过不少新手,上来就问哪个好。其实没有好坏之分,只有合不合适。你公司用哪家的片子,你就装哪家的工具。两个都装也行,但硬盘得够大——一个Vivado装下来,轻松吃掉50GB。

注意: 千万别装到C盘。我吃过这个亏,有一次C盘爆了,工程死活编译不过去。后来全挪到D盘,世界清净了。

2.2 Vivado安装与工程创建

2.2.1 安装流程

去官网下载Vivado WebPACK版,免费的,功能足够你用。安装时选对版本——我建议用最新的稳定版,别追beta。

  1. 双击安装包,一路Next。
  2. 选择安装路径。记住,别放C盘。
  3. 勾选你要安装的器件系列。如果你只做Artix-7,就别把Virtex的库也装上,省点空间。
  4. 等。大概半小时到一小时,取决于你的电脑。

安装完,桌面上会出现Vivado 20xx.x的图标。双击打开,你会看到启动界面。第一次启动会慢一些,它要生成一些缓存文件。

2.2.2 创建工程

打开Vivado后,点Create Project。我习惯给工程起个有意义的名字,比如uart_loopback,别叫test1、final_final这种,你想想看,过两个月你自己都分不清。

工程名:key_debounce
工程路径:D:/FPGA_Projects/key_debounce
器件型号:xc7a35tcsg324-1(Artix-7)

选器件的时候,如果你不确定型号,可以按封装、速度等级筛选。我一般直接搜型号,快一些。

创建完成后,你会看到Vivado的界面。左边是Flow Navigator,所有操作都从这儿进。右边是工作区。嗯,这个布局很清晰,用几次就熟了。

小技巧: 我个人习惯把工程目录结构整理一下:src放源码,sim放仿真文件,constrs放约束文件。这样找东西不费劲。

2.3 Quartus Prime安装与工程创建

2.3.1 安装流程

Quartus的安装跟Vivado差不多,但有一点不同——它需要单独安装器件库。你可以在安装时选择,也可以后面再装。

  1. 下载Quartus Prime Lite版,免费的。
  2. 运行安装程序,选好路径。
  3. 安装过程中会问你要不要装器件库。选你需要的,比如Cyclone IV、Cyclone V。
  4. 安装完成后,还需要装一个ModelSim Starter版,用来仿真。

我曾经在Quartus安装上栽过跟头——没装器件库,结果打开工程发现器件列表是空的。嗯,从那以后我每次都仔细看安装选项。

2.3.2 创建工程

打开Quartus,点New Project Wizard。流程跟Vivado类似,但有些细节不同。

工程名:key_debounce
工程路径:D:/FPGA_Projects/key_debounce
器件型号:EP4CE6F17C8(Cyclone IV E)

Quartus的界面跟Vivado不太一样。它的Project Navigator在左边,Tasks窗口在下面。刚开始可能觉得乱,但用习惯了也挺顺手。

核心区别: Vivado用Tcl脚本管理工程,Quartus用.qpf文件。如果你要做自动化编译,Vivado的Tcl支持更好一些。

2.4 仿真环境配置

仿真,说白了就是让你的代码在电脑上先跑一遍。我见过不少同学,写完代码直接上板子,结果灯不亮、串口没反应,然后一脸懵。其实仿真能帮你发现90%的问题。

2.4.1 Vivado仿真配置

Vivado自带仿真器,叫xsim。够用,但功能不如ModelSim强大。我个人习惯用ModelSim,但如果你只是做简单仿真,xsim完全OK。

配置步骤:

  1. 在Flow Navigator里点Simulation → Simulation Settings。
  2. 选择仿真器。默认是xsim,你也可以改成ModelSim。
  3. 设置仿真时间。我一般设成10ms,够看一个按键消抖的过程了。
  4. 添加仿真源文件。就是你的testbench。
// 一个简单的testbench示例
module tb_key_debounce();
    reg clk;
    reg key_in;
    wire key_out;

    key_debounce uut (
        .clk(clk),
        .key_in(key_in),
        .key_out(key_out)
    );

    initial begin
        clk = 0;
        forever #10 clk = ~clk;  // 50MHz时钟
    end

    initial begin
        key_in = 1;
        #100 key_in = 0;  // 模拟按键按下
        #20 key_in = 1;   // 模拟抖动
        #15 key_in = 0;
        #5000 key_in = 1; // 按键释放
        #100 $finish;
    end
endmodule

写testbench的时候,我习惯把激励写得细一些。比如按键抖动,我会随机生成几个毛刺,看看消抖模块能不能扛住。

2.4.2 Quartus仿真配置

Quartus不自带仿真器,你得装ModelSim。安装ModelSim的时候,记得选Altera版本,它带了Altera的库。

配置步骤:

  1. 在Quartus里点Assignments → Settings。
  2. 找到EDA Tool Settings → Simulation。
  3. 选择ModelSim-Altera作为仿真工具。
  4. 设置仿真格式。我一般选Verilog。

然后你就可以在Quartus里直接启动ModelSim了。点Tools → Run Simulation Tool → RTL Simulation。

注意: ModelSim启动后,记得在Transcript窗口里输入run -all,不然仿真不会自动跑完。我第一次用的时候愣是等了五分钟,以为死机了。

2.5 硬件调试工具链

仿真过了,就该上板子了。但上板子之后,问题往往更隐蔽。这时候就需要硬件调试工具了。

2.5.1 Vivado的ILA

ILA,全称Integrated Logic Analyzer,就是Vivado里的逻辑分析仪。它可以在FPGA内部抓信号,就像用示波器测引脚一样。

使用步骤:

  1. 在代码里实例化ILA IP核。
  2. 设置要抓取的信号和触发条件。
  3. 综合、实现、生成bitstream。
  4. 下载到FPGA,打开Hardware Manager。
  5. 设置触发,然后点Run。

我举个例子。你要抓按键消抖后的输出信号,可以这样配ILA:

// 在顶层模块中实例化ILA
ila_0 your_ila (
    .clk(clk),
    .probe0(key_in),    // 原始按键信号
    .probe1(key_out),   // 消抖后信号
    .probe2(state)      // 状态机状态
);

抓到的波形会显示在Vivado的波形窗口里。你可以放大、缩小、测量时间。嗯,这个功能真的很强大。

经验之谈: ILA的深度不要设太大,1024就够了。设太深会占用大量BRAM,导致你的设计放不下。我曾经设了16384,结果综合报错说资源不够。

2.5.2 Quartus的Signal Tap

Quartus对应的工具叫Signal Tap Logic Analyzer。功能跟ILA类似,但用法略有不同。

使用步骤:

  1. 在Quartus里点Tools → Signal Tap Logic Analyzer。
  2. 选择要抓取的信号。
  3. 设置时钟和触发条件。
  4. 重新综合并下载。
  5. 在Signal Tap窗口里点Run。

Signal Tap的界面比ILA稍微复杂一些,但核心逻辑是一样的。你选好信号,设好触发,然后看波形。

调试心得: 不管是ILA还是Signal Tap,触发条件一定要设对。我一般先设一个简单的触发,比如信号上升沿,等抓到波形了再慢慢调。别一上来就设复杂的条件,容易把自己绕晕。

2.6 本章小结

这一章我们聊了Vivado和Quartus的安装、工程创建、仿真配置,还有硬件调试工具。说白了,就是把你做FPGA开发需要的所有工具都备齐了,并且知道怎么用。

我个人觉得,环境搭建这一步虽然枯燥,但特别重要。你想想看,如果工具没装好,后面写再好的代码也跑不起来。所以,花点时间把环境整利索了,后面会省很多事。

嗯,下一章我们就要开始写代码了。到时候我会带你从零开始写一个按键消抖模块,然后仿真、上板、调试,一条龙走下来。准备好了吗?

最后提醒: 如果你在安装过程中遇到问题,别慌。去官网查文档,或者去论坛搜一下。99%的问题别人都遇到过。我曾经卡在一个驱动问题上三天,最后发现是USB线没插紧。嗯,这种事谁没遇到过呢?

可可精品资料库