2、Vivado开发环境搭建:Vivado安装与配置、许可证管理、创建第一个Vivado工程、工程结构解析
好,咱们正式开始动手了。这一章,我带你走一遍Vivado开发环境的搭建流程。说实话,很多初学者卡就卡在安装和配置这一步,不是许可证搞不定,就是工程结构看不懂。别急,我把自己踩过的坑都给你标出来。
2.1 Vivado安装与配置
安装Vivado,说白了就是三步:下载、解压、点下一步。但这里有几个细节,我建议你注意一下。
2.1.1 版本选择
我个人习惯用LTS版本,比如2020.2、2021.1这些。为什么?因为稳定。我在项目中遇到过,用最新版Vivado编译通过的设计,换到老版本就报错。所以,除非你有特殊需求,否则别追新。
| 版本 | 特点 | 推荐场景 |
|---|---|---|
| 2020.2 | 稳定,资料多 | 初学者、项目开发 |
| 2021.1 | 支持新器件 | 使用7系列以上器件 |
| 2022.2 | 最新特性 | 尝鲜、学习新功能 |
2.1.2 安装路径
嗯,这里要注意。安装路径不要有中文,不要有空格。我见过有人把Vivado装在“C:\Program Files (x86)\Xilinx\Vivado 2020.2”下面,结果编译的时候各种路径解析错误。你想想看,一个工程里几百个文件,路径但凡有一个空格,工具就懵了。
C:\Xilinx\Vivado\2020.2
2.1.3 安装选项
安装时,你会看到一堆选项。我建议你只勾选自己需要的。比如你只做Verilog开发,那VHDL的库就可以不装。我刚开始学的时候,全选了,结果装了80多G,很多都用不上。
- Design Tools:必选,包含Vivado IDE、Vivado HLS、Vivado Simulator
- Devices:按需选择,比如你用的是Zynq-7000,就只勾选这个系列
- Install Options:建议勾选“Enable WebTalk”,方便调试
2.2 许可证管理
许可证,这是很多人的噩梦。我记得第一次装Vivado,折腾了一整天许可证。其实没那么复杂,分清楚三种情况就行。
2.2.1 免费许可证
Vivado WebPACK版本是免费的,功能也够用。你只需要去Xilinx官网注册一个账号,下载一个.lic文件就行。我建议你把这个文件放在Vivado安装目录下的licenses文件夹里,方便管理。
2.2.2 节点锁定许可证
如果你在公司用,一般是节点锁定许可证。这种许可证绑定网卡MAC地址。安装时,Vivado会自动检测,你只需要把.lic文件加载进去就行。
# 加载许可证的命令行方式
source /opt/Xilinx/Vivado/2020.2/settings64.sh
vivado -lic_admin
# 在GUI中:Help -> Manage License -> Load License
2.2.3 浮动许可证
浮动许可证需要配置服务器。说白了,就是一台机器装许可证服务器,其他机器通过网络访问。配置起来稍微麻烦点,但好处是多人共享。
vivado -license_check命令验证一下。我习惯每次新建工程前都跑一遍,确保许可证有效。
2.3 创建第一个Vivado工程
好,环境搭好了,许可证也搞定了。咱们来创建第一个工程。这个过程,我带你走一遍,你跟着做就行。
2.3.1 新建工程
打开Vivado,点击“Create Project”。你会看到向导,一步步来。
- Project Name:命名要规范,比如
led_blink,不要用中文 - Project Location:选择一个干净的目录,我习惯在
D:\FPGA_Projects下建子文件夹 - Project Type:选择“RTL Project”,勾选“Do not specify sources at this time”
- Target Language:选Verilog,虽然VHDL也很好,但Verilog更通用
- Part:选择你的开发板型号,比如xc7z020clg484-1
2.3.2 添加源文件
工程建好后,添加源文件。右键“Sources” -> “Add Sources”。我建议你先把顶层模块写好,再添加子模块。
// led_blink.v - 一个简单的LED闪烁模块
module led_blink(
input wire clk, // 50MHz时钟
input wire rst_n, // 复位,低有效
output reg [3:0] led // 4个LED
);
reg [31:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
cnt <= 32'd0;
led <= 4'b0000;
end else begin
cnt <= cnt + 1'b1;
if (cnt == 32'd25_000_000) begin
cnt <= 32'd0;
led <= ~led; // 翻转LED
end
end
end
endmodule
2.3.3 综合与实现
代码写好了,点击“Run Synthesis”。综合完成后,看有没有错误。我刚开始做的时候,经常忘记定义端口方向,综合报错一堆。别慌,看错误信息,Vivado的提示已经很友好了。
综合通过后,点击“Run Implementation”。这一步会做布局布线。如果时序不满足,Vivado会报红色警告。嗯,这时候就要检查你的约束文件了。
2.4 工程结构解析
工程建好了,咱们来看看Vivado到底生成了什么。很多新手打开工程目录,看到一堆文件夹就懵了。我帮你理一理。
2.4.1 工程目录结构
一个典型的Vivado工程目录长这样:
led_blink/
├── led_blink.xpr # 工程文件,双击打开
├── led_blink.srcs/ # 源文件目录
│ ├── sources_1/ # 设计源文件
│ │ ├── new/ # 你添加的.v文件
│ │ └── constrs_1/ # 约束文件
│ └── sim_1/ # 仿真文件
├── led_blink.runs/ # 运行结果
│ ├── synth_1/ # 综合结果
│ └── impl_1/ # 实现结果
├── led_blink.ip_user_files/ # IP核文件
└── led_blink.cache/ # 缓存文件,可删除
我个人习惯,每次工程结束后,只保留.xpr、.srcs和.runs三个文件夹。其他都是临时文件,删了也不影响。
2.4.2 关键文件说明
| 文件/文件夹 | 作用 | 注意事项 |
|---|---|---|
.xpr |
工程配置文件 | 双击打开工程,不要手动编辑 |
.srcs/constrs_1 |
约束文件(.xdc) | 管脚约束、时序约束都在这里 |
.runs/synth_1 |
综合报告 | 查看资源使用、时序报告 |
.runs/impl_1 |
实现报告 | 查看布局布线结果、功耗分析 |
.runs目录下的文件。我曾经手欠改了一个.dcp文件,结果整个工程打不开了。血的教训。
2.4.3 工程结构图
为了让你更直观地理解Vivado工程的结构,我画了一张图。你看,整个流程是线性的,但每个环节都有输入输出。
你看,源文件、IP核、约束文件是三个输入,经过综合生成网表,再经过实现生成布局布线结果,最后生成比特流。这个流程,你以后做任何工程都逃不开。
2.5 避坑指南
最后,我把自己这些年踩过的坑总结一下,你遇到了直接翻出来看。
- 安装失败:检查磁盘空间,至少需要30G。我建议留50G,省得后面装IP核不够用。
- 许可证报错:先检查环境变量
XILINXD_LICENSE_FILE是否指向了正确的.lic文件。我习惯在.bashrc里写死。 - 综合报错:先看语法错误,再看端口匹配。我遇到过最奇葩的错误,是模块例化时端口顺序写反了。
- 时序不满足:先检查约束文件,再看代码风格。我曾经因为一个组合逻辑环路,时序怎么都过不了。
好,这一章就到这里。你跟着走一遍,有问题随时翻回来。下一章,咱们开始写真正的代码。