2、开发环境搭建:Vivado/Quartus安装指南、工程创建流程、仿真与综合概念、ModelSim/QuestaSim基本使用

说实话,很多初学者一上来就急着写代码,结果连仿真工具怎么打开都不知道。我当年也是这样,拿着书上的例子敲了半天,最后发现连波形都看不到。嗯,今天我们就来把这套环境彻底捋一遍。

2.1 两大主流工具:Vivado vs Quartus

做数字IC设计,你迟早会碰到这两个名字。Vivado是Xilinx家的,Quartus是Intel(原Altera)家的。说白了,它们就是FPGA的编译器加调试器。

我个人习惯:如果做原型验证或者学术项目,Vivado用得更多。Quartus在工业界的老项目里依然很常见。你选哪个?看你手头的开发板是哪家的。

核心区别一览:

特性 Vivado Quartus Prime
厂商 AMD Xilinx Intel Altera
主要语言 Verilog/VHDL + SystemVerilog Verilog/VHDL + SystemVerilog
仿真器 内置XSIM(也可用ModelSim) 内置ModelSim Intel版
免费版 Vivado HL WebPACK Quartus Prime Lite
安装包大小 约40-80GB 约10-30GB

2.2 安装指南:别踩这些坑

Vivado安装:去官网下载WebPACK版就行。注意,安装路径不要有中文,不要有空格。我见过有人装在「D:\我的工具\Vivado」下面,结果编译报错找了一下午——嗯,就是路径惹的祸。

Quartus安装:同样,路径全英文。安装时选「Lite」版本就够了。如果你只是学习Verilog,完全不需要买License。

我曾经踩过的坑:

  • 安装Vivado时选了「全部安装」,结果硬盘爆了。其实你只需要选「Vivado」和「XSIM」就够了。
  • Quartus安装后没装设备库,结果综合时找不到芯片。记得勾选你手头芯片对应的器件库。

2.3 工程创建流程:三步走

不管用哪个工具,流程都差不多。我总结成三步:

  1. 新建工程:给工程起个名字,选好路径。别用中文。
  2. 添加源文件:把你的.v文件加进去。也可以新建一个。
  3. 选择目标器件:选你板子上的FPGA型号。如果只是仿真,随便选一个就行。

举个例子,在Vivado里新建一个计数器工程:

// counter.v
module counter (
    input clk,
    input rst_n,
    output reg [3:0] count
);
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            count <= 4'b0;
        else
            count <= count + 1'b1;
    end
endmodule

把这段代码保存成counter.v,然后在Vivado里点「Add Sources」加进去。就这么简单。

2.4 仿真与综合:两个完全不同的概念

很多新手搞混这两个东西。我打个比方:

  • 仿真:就像你在脑子里跑一遍代码,看看逻辑对不对。不需要真实硬件。
  • 综合:把代码翻译成真实的电路。比如你写了个 assign c = a & b;,综合工具会把它变成一个与门。

为什么先仿真再综合? 因为综合很慢。你想想看,一个几万门的电路,综合可能要跑十几分钟。如果逻辑有错,那不是白等了?所以我的习惯是:先在仿真里把功能调通,再去做综合。

小技巧: 仿真时写testbench,记得加 $display 打印关键信号。我经常用这招快速定位bug,比看波形快多了。

2.5 ModelSim / QuestaSim 基本使用

ModelSim和QuestaSim其实是一家公司的产品。QuestaSim是ModelSim的升级版,支持SystemVerilog和UVM。如果你只是学基础Verilog,ModelSim完全够用。

基本操作流程:

  1. 启动ModelSim,点File → New → Project
  2. 给工程起名,选工作目录
  3. 添加你的.v文件和testbench文件
  4. 点Compile → Compile All,编译所有文件
  5. 在Library里找到你的testbench,右键Simulate
  6. 在wave窗口添加信号,点Run

看,是不是很简单?

下面这张图帮你理清整个开发流程:

Verilog开发环境搭建流程 编写Verilog代码 .v 源文件 仿真验证 ModelSim/QuestaSim 综合 Vivado/Quartus 通过? 失败,修改代码 成功 下载到FPGA 板级验证 核心原则:先仿真,后综合,最后下载到板子

我的习惯: 写testbench时,我会先写一个简单的激励,比如给个时钟和复位,然后看输出波形对不对。如果波形不对,我会在代码里加 $display 打印中间值。这招比盯着波形猜快多了。

2.6 避坑指南

最后分享几个我踩过的坑:

  • 仿真库没编译:如果你用了Xilinx的原语(比如BUFG、DCM),仿真前要先编译对应的库。不然会报一堆莫名其妙的错误。
  • 时间尺度没设:testbench里记得加 `timescale 1ns/1ps。我见过有人没加,结果仿真跑了一整天没出结果——因为时间单位默认是1s。
  • 综合和仿真结果不一致:这通常是因为你写了不可综合的代码。比如用了 #10 延时,或者用了 initial 块。记住:仿真可以用的语法,综合不一定支持。

好了,环境搭建这部分就到这里。工具装好了,下一节我们就可以真正开始写Verilog了。

可可精品资料库