ZYNQ架构下的AXI_Lite 总线详解(1)

ZYNQ架构的介绍

一颗芯片里面,同时塞进去一套完整 ARM 计算机(PS)+ 一块 FPGA(PL),芯片内部通过硬件线路把两者紧紧连在一起,合二为一,名字叫 All‑Programmable SoC,全可编程片上系统。

PS Processing System 处理系统(ARM 侧,硬核固化)

PS 内部包含 4 大块硬件资源:

  1. APU 处理器单元:例如,双核 Cortex‑A9 ARM CPU,我们写的 C 语言裸机代码、Linux 系统,就在这里执行。
  2. 内存控制器(DDR 控制器):DDR3或者DDR4,程序、数据都放在 DDR。
  3. 一堆硬件外设(硬核):UART 串口、网口、SD 卡、I2C、SPI、CAN、USB、GPIO (MIO)、XADC,全部硬件做好,不需要 FPGA 逻辑。
  4. PS 内部互联总线(AXI):CPU、DDR、各个外设,内部互相通信。

PL(Programmable Logic,可编程逻辑)------FPGA 部分

就像一块空白的电路板,你写 Verilog 代码,编译生成 bit 文件,烧写进去,就能搭出自定义硬件电路。

PL 里面有什么硬件资源:

  1. CLB(LUT、触发器):做普通逻辑电路;
  2. BRAM(Block RAM 块 RAM):片上 RAM 存储器
  3. DSP 切片:做高速乘法、数字运算;
  4. IO 引脚:芯片外部引脚,可以接 LED、摄像头等外部器件。

Vivado 的 Block Design(BD 框图),添加的 AXI‑GPIO、AXI‑BRAM‑Controller 这些 IP,全部是部署在 PL 里面的硬件电路。

PS与PL之间的通信

AXI 高速总线通道

芯片硬件已经做好,PS 与 PL 之间的高速数据线全部是 AXI 协议,分为三类端口:

关键点:

  • PS 访问 PL 的 IP(AXI‑GPIO、AXI‑BRAM‑Controller):走GP 端口;
  • PL 要直接读写 DDR 内存(DMA、摄像头 VDMA):走HP 端口。

所有挂在 AXI 总线上的 PL 端 IP(AXI‑BRAM 控制器、AXI‑DMA),本质上是 PL 里的硬件,通过芯片这几根 AXI 物理导线和 PS 对话。 BRAM 本身只是 PL 内部的存储,BRAM 不直接连 PS,必须经过 AXI‑BRAM 控制器再接 AXI 总线。

普通离散信号线(不走 AXI,只是电平 / 脉冲信号)

1、EMIO 扩展 IO PS 内部 GPIO 控制器,可以拉出最多 64 根普通的 0/1 电平信号线,连接到 PL。PS 软件可以读写这些电平;PL 逻辑也可以驱动这些电平。

2、PL→PS 中断信号 PL 内部逻辑产生脉冲信号,直接送给 PS 的 GIC 中断控制器。

PL端的几种与PS端连接的IP说明

AXI Interconnect(AXI 互联 IP,总线交换机)

类比:路由器 / 多路开关矩阵

作用:AXI 总线的路由、仲裁、地址译码

  • 一边接 1 个或者多个 AXI Master(主机,比如 PS 的 AXI GP 口)
  • 另一边接多个 AXI Slave(从机:AXI-GPIO、AXI-BRAM-CTRL 等)
  • 当多个主机同时发总线请求时,它做仲裁,防止总线冲突;同时给每个从设备分配一段独立地址空间。

AXI GPIO

类比:可被 AXI 总线控制的扩展 IO 口

  • 接口:AXI4-Lite(寄存器型低速总线)
  • 作用:PS 通过读写 AXI 寄存器,控制 PL 上引出的 GPIO 引脚:输出高低电平(点灯)、读取按键输入、支持引脚中断AMD
  • 区分:
    • PS 端 MIO/EMIO GPIO:是 PS 硬核自带;
    • AXI GPIO:PL 里搭出来的软 IP GPIO,引脚数量可以灵活扩展,走 AXI 总线访问。

AXI DMA / AXI VDMA

DMA = Direct Memory Access,直接内存访问

核心思想:搬运数据不用 CPU(A9)反复介入,减轻 ARM 负担,高速搬大块数据

  • AXI DMA:通用 DMA 负责 DDR 内存 ↔ AXI4-Stream 数据流之间传输;适合 AD 采样、高速串口、普通数据流,一维连续数据搬运。
  • AXI VDMA(Video DMA):视频专用 DMA 是 DMA 的增强版,专门针对图像 / 视频;支持帧缓存、多帧乒乓缓存、行 / 列二维图像地址、帧同步信号,摄像头采集、HDMI 显示必用它AMD
  • 共同点:
    • 控制寄存器用 AXI-Lite(PS 配置参数、查状态)
    • 数据通路是 AXI4-Stream 高速流接口

AXI BRAM Controller(AXI BRAM 控制器)

类比:BRAM 的 "翻译官"

  • BRAM 是 FPGA 片内块 RAM(Block Memory Generator IP 生成),BRAM 本身是简单的读写地址 / 数据端口,不认 AXI 协议
  • 这个 IP 的功能:把 AXI 总线协议,翻译成 BRAM 原生读写信号
  • PS 可以通过 AXI 总线,像访问外设寄存器一样读写 PL 内部 BRAM,用来放查找表、缓存小批量数据。

几个问题

1、ZYNQ架构分为几代产品?

2、ARM核是什么意思?

ARM 是一家英国公司的名字,同时也代表它设计的 CPU 内核架构。ARM 公司自己不生产芯片,只画 CPU 内核图纸,把图纸授权卖给芯片厂商(Xilinx、高通、苹果、STM 意法半导体)。

Xilinx 拿到 ARM 图纸,把 ARM CPU 内核做到 ZYNQ 芯片里面;

ARM 公司:卖 CPU 内核设计图纸的公司。

ARM 内核:CPU 的设计方案,比如 Cortex‑A9、Cortex‑A53、Cortex‑R5,这些全都是 ARM 公司设计出来不同型号的 CPU 内核。

Cortex‑A9 就是 ARM 公司设计的其中一款 CPU 内核型号。

  • A 系列:面向高性能应用(跑 Linux、裸机系统,ZYNQ‑7000 用的就是 Cortex‑A9)
  • R 系列:实时内核(ZU MPSoC 里面 R5,做高实时控制)
  • M 系列:单片机内核(STM32 用 Cortex‑M3/M4,小单片机)

3、什么是Linux系统?

Linux 是一款开源的操作系统,它的核心叫 Linux 内核,由大量 C 语言代码构成,专门用来管理 CPU、内存、外设,给上层程序提供一套统一使用硬件的接口。

Cortex‑A9 这类 ARM CPU 硬件本身只认识 ARM 指令,它天生不自带 Linux,也不强制跑 Linux。你可以选择不装 Linux,直接跑裸机程序;也可以配置、编译一份适配这块板子的 Linux 镜像,让 CPU 运行它。

没有操作系统(裸机):CPU 上只有你写的那一份 C 代码。所有硬件操作,DDR 初始化、串口收发、网口、PL 侧 AXI 寄存器读写,全部要你自己代码实现。硬件资源没有统一管理,一次只能跑一套主程序。 装上 Linux 之后,Linux 内核就变成硬件和应用程序中间的管家:

  • 管理 CPU:做多任务调度,同一个 CPU 上可以轮流运行好几个独立应用程序;Zynq 双核 A9,内核也负责两个核的调度管理。
  • 管理内存(依赖 A9 的 MMU):引入虚拟内存。应用程序看到的地址是虚拟地址,不再直接和硬件物理地址绑定;程序之间内存隔离,一个程序崩溃不容易把整个系统搞挂。
  • 统一管理所有外设,提供驱动框架:串口、网口、SD 卡、Flash、甚至你 PL 侧做的 AXI 外设,都写成驱动。应用程序不用直接啃寄存器,调用系统接口就能使用硬件。
  • 自带文件系统:可以在 SD 卡 /eMMC 里组织文件、读写文件,保存日志、配置、数据。
  • 提供标准接口:网络协议栈、线程、信号、管道等,写网络程序、多线程程序不用从零实现。

在 ZYNQ 上,一份能跑起来的 Linux,由三大部分组成:

  • Linux 内核 (zImage):就是管家本身,负责调度、内存管理、驱动框架。内核是可以裁剪的:没用的外设驱动可以删掉,需要的外设(你的 PL 自定义 AXI 寄存器)可以加驱动。
  • 设备树(dtb,设备树二进制文件):告诉内核 "板子上有什么硬件",PS 的配置、PL 上 AXI 外设的基地址、中断号都写在这里。对比裸机:裸机是读 hdf 文件得到硬件地址;Linux 用设备树描述硬件。
  • 根文件系统 (rootfs):存放 Linux 的应用程序、命令、库、配置文件。我们自己写的 APP 最后就放在这里面运行。

AXI与ZYNQ架构的关系

ZYNQ 本质是 PS(ARM CPU 系统)+ PL(FPGA 逻辑),两个独立的部分。AXI 就是 PS 和 PL 之间约定好的 "标准通信语言":

  1. Xilinx 在 ZYNQ 芯片内部,直接引出 GP/HP/ACP 这几组 AXI 硬件端口,打通 PS 和 PL;
  2. 我们在 PL 里面写的 IP(AXI-GPIO、AXI-DMA、AXI-BRAM、自定义寄存器),都做成 AXI 从接口;
  3. 在 Vivado Block Design 里,把 PL 的 AXI 从 IP,和 PS 的 GP/HP 端口用 AXI Interconnect(AXI 路由器)连起来;
  4. PS 端(裸机或者 Linux)通过地址映射,就可以访问 PL 上的资源。

如果没有 AXI 这套统一协议,PS 和 PL 通信就要自己定义一大堆自定义握手信号,每个项目一套规则,IP 无法通用。AXI 就是标准化这个交互。

举例以下三个通路:

PS A9 CPU → PS 内部总线 → GP Master 端口(AXI4-Lite 主机) → AXI Interconnect 路由器 → PL 里的自定义 AXI-Lite 寄存器 IP(从机)

高速采集通路

PL 的 ADC 采集逻辑 → AXI-DMA(AXI4 主机) → HP 端口 → PS 的 DDR 内存控制器 → DDR

流通路(不带寄存器)

PL 的 ADC → AXI-Stream FIFO → AXI-Stream DMA → HP 口写入 DDR(Stream 只负责数据流,DMA 内部再转成带地址的 AXI4 去写内存)。

GP/HP/ACP 是端口(硬件通道) ,它们承载的协议可以是 AXI4 或者 AXI4-Lite;AXI-Stream 是流协议 ,它不能直接接到 GP/HP/ACP,AXI-Stream 要配合 DMA IP,由 DMA 做协议转换:把 Stream 流,转换成 Full AXI4 内存访问,再送到 HP/GP。

AXI4 / AXI4-Lite 怎么连 GP/HP/ACP?PL 里能不能直接看到引脚?

在 Vivado 的 Block Design(BD 块设计)里,不是像普通 IO 那样看到物理引脚,是 PS IP 的内部接口信号。

  1. 你在 BD 里放一个 ZYNQ7 Processing System 这个 PS IP,双击配置,打开 HP、GP、ACP 端口;配置完,这个 PS IP 就会放出 AXI 主机 / 从机接口(信号端口,不是芯片物理引脚)
    • GP:通用 AXI 端口,PS 作为主机去读 PL 的寄存器(AXI-Lite 最多,用来配寄存器)
    • HP:高性能 AXI 端口,PL 作为主机,去读写 PS 侧的 DDR 内存(Full AXI4,高速大数据)
    • ACP:一致性端口,PL 访问 PS 的 Cache,一般少用
  2. 连接方式:直接在 BD 里用连线,把 PS 放出的这个 AXI 接口,连到 AXI Interconnect,再连到你的 PL 从 IP(AXI-GPIO、AXI-BRAM Ctrl、自定义 AXI-Lite 从机)
  3. 重点:
    • 这些是片内互联信号(FPGA fabric 内部的逻辑信号),不是芯片外部引脚,所以你在约束、管脚分配里看不到它们,它们只在 PL 逻辑和 PS 硬核之间。
    • 底层是芯片硅片上已经做好的硬核互联通路,Vivado 只是把这个通路的协议接口给你引到 BD 画布上。

为什么 AXI4 / AXI4-Lite 可以直接接,AXI-Stream 不行?

核心根源:协议设计目标完全不一样

  • AXI4(Full AXI4)、AXI4-Lite:带地址的内存映射协议 每一次传输,都要先给地址 ,告诉对方:我要读写哪个地址位置。 GP/HP/ACP 这三组硬件通道,本身硬件就是为「带地址的内存访问」设计的,天生就是 AXI 地址总线,协议对上,就可以直接连通。
    • AXI4-Lite:轻量,简单读写寄存器,适合控制
    • Full AXI4:支持 Burst 突发传输,适合大块搬数据(HP 口最常用)
  • AXI-Stream:流协议,没有地址! AXI-Stream 只有:数据、有效、准备(TDATA、TVALID、TREADY),全程没有地址信号。 而 HP/GP/ACP 的硬件通道,从底层电路上就要求每次传输必须附带地址,用来访问 DDR 或者寄存器地址空间。
  • 没有地址,PS 这边根本不知道这个数据要放到 DDR 内存的哪个位置,所以 AXI-Stream 不能直接怼到 HP/GP 上。

那 AXI-Stream 怎么和 PS 的 DDR 通信?

AXI DMA 这个 IP,就是协议转换器,它两边接口不一样:

  • 一侧:AXI-Stream 接口(接你的 PL 流逻辑,比如 AD 采集、图像滤波、FFT 输出流,是无地址数据流)
  • 另一侧:Full AXI4 主机接口(接到 HP 端口,这是带地址的,可以访问 PS 的 DDR)

工作流程:

  1. PL 端源源不断吐出 AXI-Stream 数据流(没有地址)给 DMA
  2. DMA 内部,由软件(Linux / 裸机)提前配置好:DDR 的起始地址、传输长度
  3. DMA 自动把一串 Stream 数据流,打包成 AXI4 Burst 写操作,按照你配置的地址,写入 DDR 指定位置
  4. 反过来,DMA 也可以从 DDR(HP 口读)读出数据,转成 AXI-Stream 流给 PL 逻辑
相关推荐
星夜离尘562 小时前
FPGA 不用浮点开平方:逐位恢复整数平方根、余数与完整握手验证
fpga开发
Enclustra_China2 小时前
FPGA设计的隐藏难题:算力、功耗与散热如何平衡?
fpga开发·fpga·fpga解决方案
好焊孙辉2 小时前
从六代螺柱焊机到AI质检:鸿栢科技的螺柱焊国产化路径
人工智能·python·科技·fpga开发
unicrom_深圳市由你创科技4 小时前
高帧率机器视觉 FPGA 图像板卡及传输开发定制解决方案
fpga开发
幻智星科技21 小时前
纯FPGA网络通信实现微秒级确定性延迟
网络协议·fpga开发·硬件架构
泡泡糖的中文规格书1 天前
HDLbits 1.5 学习笔记
fpga开发
幻智星科技1 天前
FPGA不同品牌开发平台约束文件迁移难题解析
fpga开发·架构·硬件架构
幻智星科技1 天前
Karatsuba与CSD优化FPGA大数乘法
c++·fpga开发·密码学
星夜离尘561 天前
FPGA 实战:W1C 中断状态寄存器,事件置位与软件清除撞在同一拍怎么办
fpga开发