第1章:Vivado开发环境搭建

做FPGA开发,第一步就是把家伙事儿备齐了。Vivado这个工具,说大不大说小不小,装好了能陪你干三年五年,装不好能让你折腾一整天。我这些年换了好几台电脑,每次装Vivado都有新坑踩,今天就把这些经验一股脑倒给你。

1.1 Vivado安装与许可配置

先说说版本选择。Vivado现在更新得挺快,但我个人建议别追最新版。为什么呢?我在项目里吃过亏——新版本刚出来,第三方IP核还没适配好,你辛辛苦苦搭的工程可能就编译不过。

我常用的版本是Vivado 2018.3和2020.2。前者稳定,后者功能全。如果你做K7系列,2018.3完全够用;做Zynq的话,2020.2对AXI总线的支持更好一些。

安装步骤

  1. 下载安装包:去Xilinx官网下载WebPACK版本就行,免费的。别一上来就下Vivado HLx,那个20多个G,你硬盘受得了吗?
  2. 运行安装程序:Windows下右键管理员运行,Linux下记得加执行权限。嗯,这里要注意——路径不要有中文,不要有空格。
  3. 选择组件:勾选Vivado和Vitis(如果你做Zynq)。SDK可以后面再装,别一股脑全选上。
  4. 等待:去泡杯咖啡,大概30分钟到1小时。看你的网速和硬盘速度。
⚠️ 避坑指南
我曾经在Windows上装Vivado 2021.1,结果死活打不开。查了两天才发现是杀毒软件把license文件给隔离了。装之前先把杀毒软件关了,省得闹心。

许可配置

Vivado的许可分两种:Node-Locked(绑定电脑)和Floating(浮动许可)。个人学习用Node-Locked就够了。

配置方法很简单:

  1. 打开Vivado,点击 Help → Manage License
  2. 选择 Load License
  3. 找到你的.lic文件,加载进去

如果你用的是虚拟机,记得把MAC地址固定下来。我有个同事换了网卡,许可就失效了,折腾半天才搞定。

💡 小技巧
许可文件最好放在Vivado安装目录下的license文件夹里,别放桌面。万一重装系统,桌面文件全没了,你还得找Xilinx重新申请。

1.2 开发板选型

选开发板这事儿,说白了就是看你的钱包和需求。市面上主流的Xilinx板子就两类:K7系列和Zynq系列。

特性 K7系列(如KC705) Zynq系列(如ZedBoard)
核心架构 纯FPGA FPGA + ARM Cortex-A9
适合场景 纯硬件加速、高速接口 嵌入式系统、SoC设计
开发难度 中等 较高(需懂ARM)
价格 约2000-5000元 约1000-3000元
学习曲线 平缓 陡峭

我个人建议:如果你是纯做卷积加速器,选K7系列。为什么呢?因为加速器主要用FPGA的逻辑资源,ARM核反而用不上。我见过有人拿Zynq做加速器,结果ARM核闲置着,白白多花了钱。

但如果你以后想做嵌入式AI,比如在摄像头前端做实时处理,那Zynq更合适。ARM核可以跑Linux,管理外设方便得很。

具体板卡推荐

  • 入门级:Nexys Video(Artix-7,约1500元)——便宜,适合学生党
  • 进阶级:KC705(Kintex-7,约5000元)——资源多,适合做复杂加速器
  • 全能型:ZedBoard(Zynq-7020,约2000元)——性价比高,ARM+FPGA都能玩
📌 我的经验
做卷积加速器,至少需要20万以上的逻辑单元(LUT)。Nexys Video只有15万,跑小模型还行,大模型就吃力了。KC705有40万LUT,绰绰有余。

1.3 工程模板创建

每次新建工程都从头配置?太浪费时间了。我习惯做一个模板工程,以后直接复制改改就能用。

创建步骤

  1. 打开Vivado,点击 Create New Project
  2. 输入工程名,比如 conv_accelerator_template
  3. 选择RTL Project,勾选 Do not specify sources at this time
  4. 选择开发板型号(以KC705为例)
  5. 点击Finish

模板工程里,我一般会预置这些东西:

  • 时钟模块:用Clocking Wizard生成200MHz和100MHz时钟
  • 复位模块:异步复位同步释放,避免亚稳态
  • 约束文件:把板子的时钟引脚、LED、按键都约束好
  • 顶层模块:一个空的top.v,带好时钟和复位端口

模板代码示例

// top.v - 卷积加速器顶层模板
module conv_accelerator_top (
    input  wire        sys_clk_p,    // 差分时钟输入(正)
    input  wire        sys_clk_n,    // 差分时钟输入(负)
    input  wire        sys_rst_n,    // 复位按键(低有效)
    output wire [3:0]  led           // 板载LED
);

    // 时钟和复位信号
    wire clk_200m;
    wire clk_100m;
    wire rst_n;
    
    // 实例化时钟模块
    clk_wiz_0 u_clk_gen (
        .clk_in1_p  (sys_clk_p),
        .clk_in1_n  (sys_clk_n),
        .clk_out1   (clk_200m),
        .clk_out2   (clk_100m),
        .resetn     (sys_rst_n),
        .locked     (locked)
    );
    
    // 复位同步器
    reg [1:0] rst_sync;
    always @(posedge clk_100m or negedge sys_rst_n) begin
        if (!sys_rst_n)
            rst_sync <= 2'b0;
        else if (locked)
            rst_sync <= {rst_sync[0], 1'b1};
    end
    assign rst_n = rst_sync[1];
    
    // LED闪烁测试
    reg [31:0] counter;
    always @(posedge clk_100m or negedge rst_n) begin
        if (!rst_n)
            counter <= 32'd0;
        else
            counter <= counter + 1'b1;
    end
    assign led = counter[25:22];
    
endmodule
💡 模板管理技巧
我把模板工程放在 D:/vivado_templates/ 目录下。每次新项目就复制一份,改个名字。这样时钟配置、约束文件都不用重新写,省下至少半小时。

1.4 知识体系总览

这一章的内容,说白了就是三件事:装工具、选板子、建模板。下面这张图帮你理清思路:

Vivado开发环境搭建知识体系 Vivado安装与许可 开发板选型 工程模板创建 版本选择 · 安装步骤 · 许可配置 K7 vs Zynq · 板卡推荐 · 资源评估 时钟模块 · 复位模块 · 约束文件 卷积加速器开发就绪 三个环节环环相扣,缺一不可

你看,从安装工具到选板子,再到建模板,每一步都是为后面的加速器开发打基础。我当年第一次做加速器,就是跳过了模板这一步,结果每次改工程都要重新配时钟,烦得很。

好了,环境搭好了,板子选好了,模板也建好了。接下来你就可以放心大胆地写代码了。记住,好的开始是成功的一半——嗯,这话虽然老套,但在FPGA开发上真不假。

可可精品资料库