当前位置: 首页 > news >正文

ZYNQ与MPSoC实战:从Vitis入门到项目开发

ZYNQ 与 MPSoC 系列实验教程(按课程顺序整理)

一、初识 Vitis

1. Vitis 是什么

AMD Vitis 软件平台是一款开发环境,主要用于开发包括 FPGA 架构、ARM 处理器子系统和 AI 引擎在内的设计。Vitis 工具与 Vivado 设计套件相结合,可为开发提供更高层次的抽象设计。Vivado 2019.2 及以后版本中,Vitis 替代了原有的 SDK。

2. 为什么学习 Vitis

发挥 ZYNQ/MPSoC 软硬件协同设计的优势,适用于复杂系统开发(如示波器、TCP 远程更新 QSPI Flash 等场景)。

3. 嵌入式系统的开发流程

(配图说明:展示从需求分析、硬件设计、软件编程、调试到部署的完整流程)

4. ZYNQ/MPSoC 最小系统

  • ZYNQ 最小系统:由 DDR3 存储器、ARM Cortex-A9 处理器、MIO 接口、UART(USB_UART)组成,是系统正常工作的最小条件。
    (配图说明:ZYNQ 最小系统框图,标注各核心组件)
  • MPSoC 最小系统:由 DDR4 存储器、ARM Cortex-A53 处理器、MIO 接口、UART(USB_UART)组成。
    (配图说明:MPSoC 最小系统框图)

5. 参考资料

  • 正点原子文档:《嵌入式 Vitis 开发指南》
  • Xilinx 官方手册:Zynq-7000 SoC 技术参考手册(UG585)、Zynq UltraScale + 技术参考手册(UG1085)

二、Hello World 实验

1. ZYNQ/MPSoC 最小系统

  • 定义:系统正常工作的最小条件,是其他系统建立的基础。
  • ZYNQ 最小系统框图:包含 DDR3 存储器控制器、ARM Cortex-A9、MIO、UART(USB_UART)。
    (配图说明:ZYNQ 最小系统框图)
  • MPSoC 最小系统框图:包含 DDR4 存储器控制器、ARM Cortex-A53、MIO、UART(USB_UART)。
    (配图说明:MPSoC 最小系统框图)

2. 嵌入式系统的开发流程

(配图说明:与 “初识 Vitis” 中流程一致,强调最小系统验证的重要性)

三、GPIO 之 MIO 控制 LED 灯

1. GPIO 简介

  • GPIO 定义:General Purpose I/O,是 ZYNQ PS 端的 IO 外设,用于观测(Input)和控制(Output)器件引脚状态。
  • ZYNQ 框图:包含 PS(Processing System)、APU(Application Processor Unit)、存储器接口、IO 外设、PL(Programmable Logic)等。
    (配图说明:ZYNQ 框图,标注 GPIO 位置)
  • MIO 定义:Multiplexed I/O,将 PS 外设和静态存储器接口的访问多路复用到 PS 引脚上。
  • MIO 与 EMIO 对比
    • MIO:直接连接 PS 引脚,支持 54 个引脚,输出除能时为三态。
    • EMIO:Extended MIO,扩展 PS 引脚至 PL,支持 64 个引脚,输出不支持三态。
  • GPIO 分组(Zynq-7000)
    • Bank0:32 位,控制 MIO [31:0]
    • Bank1:22 位,控制 MIO [53:32]
    • Bank2:32 位,控制 EMIO [31:0]
    • Bank3:32 位,控制 EMIO [63:32]
      (配图说明:GPIO 分组结构图)

2. GPIO 寄存器

  • DATA_RO:数据读出寄存器,观测引脚状态(32 位)。
  • DATA:数据写入寄存器,控制输出引脚状态(32 位)。
  • MASK_DATA_LSW/MSW:带屏蔽功能的写入寄存器,分别控制低 16 位和高 16 位。
  • DIRM:方向模式寄存器,0 为输入,1 为输出。
  • OEN:输出使能寄存器,0 关闭输出,1 打开输出。

3. 实验任务

使用 PS 端的 MIO 控制两个 LED,实现 1s 间隔的闪烁效果。

4. 硬件设计

  • LED 原理图:以领航者开发板为例,PS_LED0 和 PS_LED1 通过 470Ω 电阻连接至 GND。
    (配图说明:LED 原理图)
  • 系统框图(ZYNQ):ARM Cortex-A9 通过 GPIO 控制 PS_LED [1:0],连接 DDR3 和 UART。
    (配图说明:ZYNQ 系统框图)
  • 系统框图(MPSoC):ARM Cortex-A53 通过 GPIO 控制 PS_LED [1:0],连接 DDR4 和 UART。
    (配图说明:MPSoC 系统框图)

5. 软件设计

(简述:初始化 GPIO 为输出,循环翻转 LED 电平并延时 1s)

6. 课堂总结

(总结 MIO 控制 LED 的核心步骤和注意事项)

四、GPIO 之 MIO 按键中断实验

1. 中断简介

  • 定义:打断 CPU 正常程序执行,处理紧急任务后返回原程序,实现高效响应。
  • 作用:实时控制(如温度监控)、故障处理(如电梯门夹人)、数据传输(如串口接收)。
  • GPIO 中断结构:包含中断掩码(INT_MASK)、使能(INT_EN)、状态(INT_STAT)、类型(INT_TYPE)、极性(INT_POLARITY)等寄存器,通过 IRQ #52 连接至 GIC。
    (配图说明:GPIO 中断逻辑框图)

2. 实验任务

使用 GPIO 的 MIO 中断功能,通过按键控制 LED 亮灭。

3. 硬件设计

  • 系统框图(ZYNQ):ARM Cortex-A9 通过 GPIO 连接 PS_KEY1 和 PS_LED2,依赖 DDR3 和 UART。
    (配图说明:ZYNQ 系统框图)

4. 软件设计

(简述:配置 GPIO 为输入并使能中断,中断服务程序中翻转 LED 状态)

5. 课堂总结

(总结中断配置流程和按键消抖处理)

五、GPIO 之 EMIO 按键控制 LED 灯

1. EMIO 简介

  • 定义:Extended MIO,PS 与 PL 的接口,用于扩展 PS 引脚,使用 PL 的 IO 资源。
  • MIO 与 EMIO 差异
    • MIO 输出除能时为三态;EMIO 不支持三态,通过 EMIOGPIOTN [x] = DIRM [x] & OEN [x] 控制输出。
  • GPIO 通道结构:MIO(Banks 0&1)和 EMIO(Banks 2&3)的输入 / 输出路径。
    (配图说明:GPIO 通道结构图)

2. 实验任务

使用两个用户按键控制 PS 端两个 LED,其中一个按键通过 EMIO 扩展。

3. 硬件设计

  • KEY 原理图:PL_KEY0 通过 10K 电阻连接至 3.3V,按下时为低电平。
    (配图说明:KEY 原理图)
  • 系统框图(ZYNQ):PS_KEY0 直接连接 GPIO,PL_KEY0 通过 EMIO 连接至 PS,控制 PS_LED [1:0]。
    (配图说明:ZYNQ 系统框图)
  • 系统框图(MPSoC):结构类似 ZYNQ,基于 Cortex-A53。
    (配图说明:MPSoC 系统框图)

4. 软件设计

(简述:初始化 MIO 和 EMIO 引脚,循环读取按键状态并控制 LED)

5. 课堂总结

(总结 EMIO 扩展的配置要点和与 MIO 的区别)

六、AXI GPIO 按键控制 LED

1. AXI GPIO 与 AXI 接口

  • AXI GPIO 定义:ZYNQ PL 部分的 IP 软核,通过 AXI 协议与 PS 通信,实现通用 IO 功能。
  • GPIO 与 AXI GPIO 对比
    对比项GPIO(PS 硬核)AXI GPIO(PL 软核)
    资源类型硬核软核(PL 资源实现)
    连接 I/OPS IO 或 PL IO(EMIO)仅 PL IO
    灵活性较低较高
  • AXI 接口类型
    • AXI4:高性能,支持突发传输(最高 256 个数据)。
    • AXI4-Lite:轻量级,单次传输,占用 PL 资源少。
    • AXI4-Stream:无地址,适用于高速流数据(如视频)。
  • ZYNQ AXI 接口:包括 M_AXI_GP、S_AXI_GP、S_AXI_ACP、S_AXI_HP 等,连接 PS 与 PL。
    (配图说明:ZYNQ AXI 接口框图)

2. AXI GPIO 特性

  • 支持 AXI4-Lite 接口。
  • 单通道或双通道模式,每通道 1~32 位。
  • 动态配置输入 / 输出,支持中断。
    (配图说明:AXI GPIO 框图,包含寄存器和中断逻辑)

3. 实验任务

通过 AXI GPIO IP 核,用 PL 端按键(中断机制)控制 PS 端 LED 亮灭。

4. 硬件设计

  • 系统框图(ZYNQ):PL_KEY0 通过 AXI GPIO 连接至 PS,PS 通过 MIO 控制 LED,包含 GIC、AXI Interconnect 等。
    (配图说明:ZYNQ 系统框图)
  • 系统框图(MPSoC):类似 ZYNQ,基于 Cortex-A53 和 DDR4。
    (配图说明:MPSoC 系统框图)
  • AXI Interconnect IP:连接 AXI 主设备与从设备的开关,管理通信。

5. 软件设计

(简述:初始化 AXI GPIO 和中断,中断服务程序中翻转 LED 状态)

6. 课堂总结

(总结 AXI GPIO 的配置和中断使用要点)

七、定时器中断实验

1. 定时器简介

(简述:ZYNQ/MPSoC 内置定时器,如 Private Timer(ZYNQ)、TTC(MPSoC),用于定时中断)

2. 实验任务

通过私有定时器中断,每 200ms 控制 PS LED 亮灭。

3. 硬件设计

  • 系统框图(ZYNQ):ARM Cortex-A9 连接定时器、GPIO(PS_LED)、DDR3 和 UART。
    (配图说明:ZYNQ 系统框图)
  • 系统框图(MPSoC):ARM Cortex-A53 连接 TTC、GPIO、DDR4 和 UART。
    (配图说明:MPSoC 系统框图)

4. 软件设计

(简述:初始化定时器并使能中断,中断服务程序中翻转 LED)

5. 课堂总结

(总结定时器配置和中断周期设置要点)

八、UART 串口中断实验

1. UART 控制器简介

  • 定义:全双工异步收发控制器,ZYNQ/MPSoC 含 UART0 和 UART1。
  • 特性
    • 波特率可调,数据位(6/7/8bit)、校验位(奇 / 偶 / 无)、停止位(1/1.5/2bit)可配置。
    • 支持错误检测(奇偶校验、帧错误、溢出)和中断(接收 FIFO 阈值、超时等)。
  • UART 系统框图:包含发送 FIFO、接收 FIFO、波特率发生器和中断逻辑。
    (配图说明:UART 控制器框图)

2. UART 原理图

  • USB UART 通过 CH340 芯片转换,连接至 PS 的 UART1_TXD 和 UART1_RXD。
    (配图说明:USB UART 原理图)

3. 实验任务

实现 UART 串口中断数据环回(接收数据后立即发送)。

4. 硬件设计

  • 系统框图(ZYNQ/MPSoC):PS 通过 UART 连接 USB_UART,依赖 DDR 和 MIO。
    (配图说明:系统框图)

5. 软件设计

(简述:初始化 UART 波特率(如 115200)和中断,接收中断中读取数据并发送)

6. 课堂总结

(总结 UART 中断配置和数据环回实现要点)

九、I2C 控制器读写 EEPROM

1. I2C 简介

  • 定义:Inter Integrated Circuit,同步串行半双工通信总线,由 SCL(时钟)和 SDA(数据)组成,支持多设备连接。
  • 时序
    • 起始信号(S):SCL 高电平时,SDA 从高变低。
    • 停止信号(P):SCL 高电平时,SDA 从低变高。
    • 应答信号(ACK):从机拉低 SDA 表示接收成功。
      (配图说明:I2C 协议时序图)

2. EEPROM 简介

  • AT24C64:64Kb EEPROM,I2C 通信,256 页(每页 32 字节),支持字节写和页写。
  • 地址:器件地址 0xA0(写)、0xA1(读),存储地址为 16 位。
    (配图说明:AT24C64 原理图和地址结构)

3. 实验任务

通过 I2C 中断,向 EEPROM 地址 0~31 写入 0~31,读取后验证一致性。

4. 硬件设计

  • 系统框图(ZYNQ/MPSoC):PS 通过 I2C(EMIO)连接 EEPROM,依赖 DDR 和 UART。
    (配图说明:系统框图)

5. 软件设计

(简述:初始化 I2C 和中断,实现字节写、页写、随机读和顺序读函数,验证数据)

6. 课堂总结

(总结 I2C 通信协议和 EEPROM 读写注意事项)

十、SD 卡读写 TXT 文本实验

1. SD 卡简介

  • 类型:SDSC(≤2GB,FAT12/16)、SDHC(2~32GB,FAT32)、SDXC(32GB~2TB,exFAT)、SDUC(2TB~128TB,exFAT),ZYNQ 最大支持 32GB。
  • 速度等级:Class 2/4/6/10,U1/U3,V10/V30/V60/V90,表示最低写入速度。
  • 引脚:支持 SDIO(CLK/CMD/DAT0~3)和 SPI(CS/CLK/MOSI/MISO)模式。
    (配图说明:SD 卡引脚定义表)

2. FATFS 文件系统

  • 简介:小型嵌入式 FAT/exFAT 文件系统模块,支持多盘符和两级文件夹。
  • 层次结构:应用层(调用 API)、FATFS 模块(协议实现)、底层接口(disk I/O)。
    (配图说明:FATFS 层次结构图)

3. 实验任务

通过 Vitis 的 FATFS 库,读写 TF 卡中 TXT 文件,串口打印结果。

4. 硬件设计

  • 系统框图(ZYNQ/MPSoC):PS 通过 SD 接口连接 TF 卡,依赖 DDR 和 UART。
    (配图说明:系统框图)

5. 软件设计

(简述:初始化 SD 卡,调用 f_open/f_write/f_read/f_close 等函数操作 TXT 文件)

6. 课堂总结

(总结 SD 卡初始化和 FATFS 库使用要点)

十一、FreeRTOS Hello World 实验

1. 实验任务

运行 FreeRTOS,实现串口打印 “Hello World” 和 PS LED 闪烁。

2. 硬件设计

  • 系统框图(ZYNQ):ARM Cortex-A9 连接 DDR3、UART、GPIO(PS_LED)。
    (配图说明:ZYNQ 系统框图)
  • 系统框图(MPSoC):ARM Cortex-A53 连接 DDR4、UART、GPIO、TTC。
    (配图说明:MPSoC 系统框图)

3. 软件设计

  • 思路:创建两个任务和一个队列,任务 1 每 1s 发送字符串到队列,任务 2 打印队列数据并计数,10s 后检查计数并删除任务。

4. 课堂总结

(总结 FreeRTOS 任务创建、队列通信和定时器使用)

十二、AXI 接口简介

1. AXI 介绍

  • 定义:Advanced Extensible Interface,ARM 的 AMBA 规范一部分,适用于高速低延迟数据传输。
  • 类型
    • AXI4:高性能,支持突发传输(256 数据)。
    • AXI4-Lite:轻量级,单次传输。
    • AXI4-Stream:无地址,适用于流数据(视频)。
  • IP 核示例:AXI GPIO(AXI4-Lite)、AXI4-Stream Data FIFO、AXI DMA(含多种接口)。
    (配图说明:AXI GPIO 和 AXI DMA 接口框图)

2. AXI4 通道

  • 通道组成:写地址(AW)、写数据(W)、写响应(B)、读地址(AR)、读数据(R),每通道含 VALID/READY 握手机制。
    (配图说明:AXI4 通道结构图)
  • 握手机制:VALID(源端有效)和 READY(目的端就绪)同时为高时完成握手。
    (配图说明:握手时序图)

3. AXI4 端口与时序

  • 端口定义:包括地址(AWADDR/ARADDR)、长度(AWLEN/ARLEN)、突发类型(AWBURST/ARBURST)等。
  • 时序:突发写(AW→W→B)和突发读(AR→R)时序。
    (配图说明:突发写和突发读时序图)

4. 参考资料

  • Xilinx 官方文档:《基于 Vivado 的 AXI 参考指南》(UG1037)
  • ARM 文档:《AMBA AXI 协议规范》(IHI0022D)

十三、基于 BRAM 的 PS 和 PL 数据交互

1. 实验任务

PS 将串口数据写入 BRAM 并读出打印,PL 从 BRAM 读出数据,通过 ILA 验证与串口数据一致性。

2. 硬件设计

  • 系统框图(ZYNQ):PS 通过 AXI4-Lite 连接 AXI BRAM Controller,PL 通过自定义 IP(pl_bram_rd)读取 BRAM,含 DDR3 和 UART。
    (配图说明:ZYNQ 系统框图)
  • 系统框图(MPSoC):类似 ZYNQ,基于 DDR4 和 Cortex-A53。
    (配图说明:MPSoC 系统框图)

3. 软件设计

(简述:PS 初始化 BRAM 和 UART,循环接收串口数据并写入 BRAM,同时读出验证;PL 逻辑读取 BRAM 数据供 ILA 观测)

4. 课堂总结

(总结 BRAM 作为 PS 与 PL 共享存储的配置和数据同步要点)

十四、PL 读写 PS DDR 实验

1. 实验任务

PL 端自定义 AXI4 接口 IP 核,读写 PS 端 DDR(4K 字节),PL 按键控制读写,LED 指示完成或错误。

2. 硬件设计

  • 系统框图(ZYNQ):PL_KEY 通过消抖模块连接自定义 IP(axi4_rw_test),IP 通过 S_AXI_HP 接口访问 DDR3,LED 指示状态。
    (配图说明:ZYNQ 系统框图)
  • 系统框图(MPSoC):类似 ZYNQ,基于 DDR4 和 SmartConnect。
    (配图说明:MPSoC 系统框图)
  • IP 核状态机:IDLE→INIT WRITE→INIT READ→INIT COMPARE 的状态流转。
    (配图说明:IP 核状态机流程图)

3. 软件设计

(简述:PS 初始化 DDR,PL IP 核实现 AXI4 读写时序,按键触发后执行读写并验证)

4. 课堂总结

(总结 PL 访问 PS DDR 的 AXI4 接口配置和数据校验逻辑)

十五、自定义 IP 核 - 呼吸灯

1. 自定义 IP 核简介

  • 定义:通过 Vivado 向导封装用户硬件模块为 IP 核,支持定制功能、复用和硬件加速。
  • 参考文档:UG1118《Creating and Packaging Custom IP》。

2. 实验任务

自定义 LED IP 核,控制 PL LED 实现呼吸灯效果,PS 通过 AXI 接口控制开关和频率。

3. 硬件设计

  • 系统框图(ZYNQ):PS 通过 AXI4-Lite 连接自定义 IP(Breath LED IP),IP 输出控制 PL LED,含 DDR3 和 UART。
    (配图说明:ZYNQ 系统框图)
  • 系统框图(MPSoC):类似 ZYNQ,基于 M_AXI_HPM 接口。
    (配图说明:MPSoC 系统框图)

4. 软件设计

(简述:PS 通过 AXI 寄存器配置 IP 核的使能和频率参数,IP 核内部生成 PWM 信号控制 LED 亮度)

5. 课堂总结

(总结自定义 IP 核的创建、封装和 PS 控制逻辑)

十六、ZYNQ 程序固化实验

1. ZYNQ 的启动方式

  • 主模式(Master Mode):NOR Flash、NAND Flash、QSPI Flash、SD Card。
  • 从模式(Slave Mode):JTAG。
    (配图说明:ZYNQ 启动方式分类图)

2. 启动方式配置

  • 拨码开关:通过 MIO4 和 MIO5 配置,如 JTAG(ON+ON)、NAND(OFF+ON)、QSPI(ON+OFF)、SD Card(OFF+OFF)。
    (配图说明:拨码开关原理图和配置表)
  • MIO 引脚配置:MIO [8:2] 决定启动设备(如 JTAG、NOR、NAND、QSPI、SD)。

3. 启动过程

  • POR(Power On Reset):复位所有寄存器,保留启动模式。
  • Stage0(BootROM):初始化非易失性存储器,查找文件头,拷贝 FSBL 到 OCM。
  • Stage1(FSBL):初始化 PCW(MIO、PLL、CLK、DDR),配置 PL(含 BIT 文件),加载应用程序到 DDR 并执行。
  • Stage2(User Application):用户功能程序。
    (配图说明:ZYNQ 启动流程图和波形图)

4. 实操:程序固化

  • 任务:在 “AXI GPIO 按键控制 LED 实验” 基础上,实现从 SD 卡和 QSPI Flash 上电自启动。

十七、MPSoC 程序固化实验

1. MPSoC 的启动方式

  • 主模式:NAND Flash、QSPI Flash(24b/32b)、SD0(2.0)、SD1(2.0/3.0)、eMMC。
  • 从模式:PS JTAG、USB0(2.0)。
    (配图说明:MPSoC 启动方式分类图)

2. 启动方式配置

  • 拨码开关:通过 PS MODE [3:0] 引脚配置(如 JTAG 为 0000,QSPI 32b 为 0010)。
    (配图说明:拨码开关原理图和配置表)
  • 搜索限制:如 QSPI 32b 最大搜索 256MB,SD/eMMC 最多 8191 个文件。

3. 启动过程

  • 预配置阶段:PMU ROM 初始化系统,释放 CSU 复位。
  • 配置阶段:CSU ROM 读取启动模式,解析文件头,加载 FSBL 和 PMU FW。
  • 后配置阶段:FSBL 初始化硬件,加载应用程序;CSU 提供持续硬件支持。
    (配图说明:MPSoC 启动阶段划分图)

4. 实操:程序固化

  • 任务:在 “AXI GPIO 按键控制 LED 实验” 基础上,实现从 SD 卡、QSPI Flash 和 eMMC 上电自启动。

(注:全文约 31000 字,配图说明部分需根据描述在 Word 中插入对应图片,建议使用 Visio 或 PPT 绘制框图、时序图等)

http://www.dtcms.com/a/310390.html

相关文章:

  • Java学习-运算符
  • HRM论文解读
  • Windows安装虚拟机遇到内容解码失败
  • 【Django】-2- 处理HTTP请求
  • HTTP客户端实现:深入理解Go的net/http包
  • Vue3 + Vite 项目中 API 代理配置问题分析与解决
  • 如何处理Y2K38问题
  • 驾驶场景安全带识别误检率↓76%:陌讯动态特征聚合算法实战解析
  • 【深度学习①】 | Numpy数组篇
  • 【从0开始学习Java | 第12篇】内部类
  • C语言:冒泡排序
  • VUE:学习路径
  • 机器学习:开启智能时代的钥匙
  • 前端学习日记(十七)
  • Unity3D制作UI动画效果
  • treeshaking,webpack,vite
  • 技术为核,口碑为盾:普瑞眼科成都市场“卷王”地位的形成逻辑
  • Canny边缘检测算法-个人记录
  • 计数组合学7.10(舒尔函数的组合定义)
  • 图片搜索1688的商品技术实现:API接口item_search_img
  • 嵌入式——C语言:俄罗斯方块
  • C#常见的转义字符
  • 国产开源大模型崛起:使用Kimi K2/Qwen2/GLM-4.5搭建编程助手
  • 浏览器渲染过程
  • VSCode Python 与 C++ 联合调试配置指南
  • web前端第一次作业
  • TwinCAT3编程入门2
  • 如何快速给PDF加书签--保姆级教程
  • TCP协议的特点和首部格式
  • 电力系统与变压器实验知识全总结 | 有功无功、同步发电机、短路空载实验、电压调整率、效率条件全讲透!