2. 开发环境搭建:Vivado与Vitis安装配置、SDK环境初始化、硬件平台构建流程
说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上好几个星期。我见过太多人把时间浪费在版本不匹配、license失效、路径带中文这些坑里。这一章,咱们就把Zynq开发环境从头捋一遍。
你想想看,Zynq开发跟普通单片机不一样。它既要管PS(处理器系统)的软件,又要管PL(可编程逻辑)的硬件。所以工具链也分两套:Vivado管硬件,Vitis管软件。这两兄弟得配合好才行。
2.1 Vivado安装与配置
Vivado是Xilinx的统一设计套件。它负责硬件设计、综合、布局布线、生成比特流。我个人习惯用WebPACK版本,免费且够用。除非你要用Vivado HLS或者System Generator,那才需要付费版。
安装步骤:
- 下载安装包 – 从Xilinx官网下载Vivado HLx安装程序。注意选对操作系统,Windows和Linux的包不一样。
- 运行安装向导 – 选择“Vivado HL WebPACK”或“Vivado HL Design Edition”。我建议选WebPACK,省空间。
- 选择组件 – 必须勾选“Vivado”和“Vitis”。其他如“DocNav”可选,但“Xilinx SDK”已经合并到Vitis里了,不用单独装。
- 设置安装路径 – 路径不能有中文!不能有空格! 我见过有人装在“D:\开发工具\Vivado”下,结果综合报错找不到库。改成“D:\Xilinx\Vivado”就好了。
- 获取License – 申请免费WebPACK license,或者用node-locked license。把.lic文件放到“C:\Xilinx\licenses”下。
2.2 Vitis统一软件平台
Vitis是Xilinx在2019年推出的统一软件平台。它替代了老旧的SDK。说白了,Vitis = SDK + 一些新功能。它支持C/C++开发,也支持Python和OpenCL。
Vitis安装要点:
- Vitis通常随Vivado一起安装。如果你单独装Vitis,记得版本号要跟Vivado一致。
- 安装后需要设置环境变量。Windows下一般自动配好,Linux下要手动source settings脚本。
- Vitis工作空间(workspace)路径也不能有中文。我习惯用“D:\Zynq_Workspace”。
| 组件 | 功能 | 备注 |
|---|---|---|
| Vivado | 硬件设计、综合、布局布线 | 生成.xsa硬件描述文件 |
| Vitis | 软件编译、调试、裸机/Linux应用 | 替代老SDK,支持多语言 |
| DocNav | 文档浏览器 | 可选,但查手册方便 |
2.3 SDK环境初始化
虽然Vitis替代了SDK,但很多人还是习惯叫“SDK环境”。其实就是Vitis里新建一个平台工程(Platform Project),然后导入硬件描述文件(.xsa)。
初始化流程:
- 启动Vitis – 选择工作空间路径。我建议每个项目单独一个workspace,方便管理。
- 创建平台工程 – File → New → Platform Project。输入名字,比如“zynq_platform”。
- 导入硬件描述 – 在Platform Settings里,点击“Import from XSA”,选择Vivado导出的.xsa文件。
- 选择处理器 – 如果是Zynq-7000,选“ps7_cortexa9_0”。如果是Zynq UltraScale+,选“psu_cortexa53_0”。
- 生成BSP – Board Support Package。Vitis会自动生成驱动库和链接脚本。
2.4 硬件平台构建流程
硬件平台构建是Zynq开发的核心。它决定了PS和PL怎么连接、外设怎么配置、中断怎么路由。我画了一张流程图,帮你理清整体脉络。
嗯,这张图把流程串起来了。下面我拆开细说每个步骤。
2.4.1 创建Vivado工程
打开Vivado,点击“Create Project”。选择RTL Project,勾选“Do not specify sources at this time”。这样会生成一个空工程,后面再添加IP。我习惯把工程放在“D:\Zynq_Projects\”下,路径短好找。
2.4.2 添加Zynq IP核
在IP Integrator里,点击“Add IP”,搜索“Zynq”。选择“Zynq-7000 Processing System”。双击打开配置界面。这里要设置DDR型号、时钟频率、外设使能等。如果你用的是官方开发板,可以直接加载板级预设(Board Preset)。
2.4.3 配置PS与PL接口
这是最关键的步骤。你需要决定PS和PL之间怎么通信。常用的接口有:
- AXI_GP – 通用目的接口,32位数据位宽,适合控制类通信。
- AXI_HP – 高性能接口,64位数据位宽,适合大数据量传输。
- AXI_ACP – 加速器一致性端口,可以缓存一致性。
- EMIO – 扩展MIO,把PS的引脚扩展到PL。
我一般把控制通路走AXI_GP,数据通路走AXI_HP。这样不会互相干扰。
2.4.4 综合、布局布线
配置完成后,右键点击Block Design,选择“Generate Output Products”。然后“Create HDL Wrapper”。最后点击“Generate Bitstream”。这个过程根据工程复杂度,可能几分钟到几小时不等。
2.4.5 导出硬件描述
比特流生成成功后,点击“File → Export → Export Hardware”。勾选“Include bitstream”。这样会生成一个.xsa文件。这个文件包含了硬件配置信息,Vitis要靠它来生成BSP和驱动。
导出后,你就可以关闭Vivado,打开Vitis开始写软件了。不过别急着关,有时候硬件需要微调,来回切换是常态。
2.5 环境验证:跑一个Hello World
环境搭没搭好,跑个Hello World就知道了。在Vitis里新建一个Application Project,选择“Hello World”模板。编译下载到开发板,串口能看到打印信息,说明环境OK。
// 简单的Hello World验证代码
#include <stdio.h>
#include "platform.h"
int main() {
init_platform();
print("Hello Zynq!\n\r");
print("Environment setup successful!\n\r");
cleanup_platform();
return 0;
}
如果串口没输出,先检查波特率对不对(通常是115200),再检查MIO配置是否正确。我遇到过好几次,都是因为MIO引脚没配成UART功能。