news 2026/4/15 16:03:42

FPGA教程系列-Vivado AXI4-Stream接口解读

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA教程系列-Vivado AXI4-Stream接口解读

FPGA教程系列-Vivado AXI4-Stream接口解读

俗话说,纸上得来终觉浅,理论看了半天可能都觉不出来有什么难的,上次仿真了一下AXI,跟实际的不一样,但是总归是动手了,大概知道了一些,现在就返回来重新看一下AXI的理论知识。都是网络上的知识,如有雷同,纯属抄袭。

什么是AXI4?

AXI 表示Advanced eXtensibleInterface(高级可扩展接口),它是由 Arm 定义的接口协议,包含在“高级微控制器总线架构 AMBA”标准中。

AXI4 接口 (AMBA 4.0) 分 3 种类型:

  • AXI4 (AXI4-Full):用于满足高性能存储器映射需求。
  • AXI4-Lite:用于简单的低吞吐量存储器映射通信(例如,往来于状态寄存器的通信)。
  • AXI4-Stream:用于高速流传输数据。

AXI-Stream

先从最简单的入手,接口如下:

类别 (Category)信号 (Signal)来源 (Source)描述 (Description)
系统类
(System)
ACLKClock sourceThe global clock signal. All signals are sampled on the rising edge ofACLK.
ARESETnReset sourceThe global reset signal.ARESETnis active-LOW.
传输数据类
(Data Transfer)
TVALIDMasterTVALIDindicates that the master is driving a valid transfer.
A transfer takes place when bothTVALIDandTREADYare asserted.
TREADYSlaveTREADYindicates that the slave can accept a transfer in the current cycle.
TDATA[(8n-1):0]MasterTDATAis the primary payload that is used to provide the data that is passing across the interface. The width of the data payload is an integer number of bytes.
数据修饰类
(Data Qualifier)
TSTRB[(n-1):0]MasterTSTRBis the byte qualifier that indicates whether the content of the associated byte ofTDATAis processed as a data byte or a position byte.
TKEEP[(n-1):0]MasterTKEEPis the byte qualifier that indicates whether the content of the associated byte ofTDATAis processed as part of the data stream.
Associated bytes that have theTKEEPbyte qualifier deasserted are null bytes and can be removed from the data stream.
(边界信号)TLASTMasterTLASTindicates the boundary of a packet.
传输修饰类
(Transfer Qualifier)
TID[(i-1):0]MasterTIDis the data stream identifier that indicates different streams of data.
TDEST[(d-1):0]MasterTDESTprovides routing information for the data stream.
TUSER[(u-1):0]MasterTUSERis user defined sideband information that can be transmitted alongside the data stream.

AI生成了个分类,整上,有点错误,凑合看吧​

系统类 (System Signals)
  • ACLK (时钟源):全局时钟信号。接口上所有的信号都在 ACLK 的上升沿进行采样。
  • ARESETn (复位源):全局复位信号。注意它后缀有个n​,表示低电平有效(Active-LOW)。
传输数据类 (Data Transfer Signals)

这一类是核心的数据传输和握手信号。

  • TVALID (主机 Master 发出):表示主机正在驱动有效的数据传输(即“我有数据要发”)。

  • TREADY (从机 Slave 发出):表示从机在当前周期可以接收数据(即“我准备好收了”)。

    • 核心机制:只有当 TVALID 和 TREADY同时为高时,数据传输才会真正发生(这是 AXI 协议著名的握手机制)。
  • TDATA (主机 Master 发出):实际传输的数据载荷(Payload)。

  • TLAST (主机 Master 发出):用于指示一个数据包(Packet)的边界,通常拉高表示这是当前包的最后一个数据传输。

数据修饰类 (Data Qualifiers)

这一类用于对 TDATA 中的字节进行更细致的说明(例如数据位宽未填满时)。

  • TSTRB (主机 Master 发出):字节选通信号。用于指示 TDATA 中的字节是作为数据字节处理,还是作为位置字节处理。
  • TKEEP (主机 Master 发出):字节保持信号。用于指示 TDATA 中的哪些字节是有效数据流的一部分。如果 TKEEP 对应的位为低,说明该字节是空字节(Null byte),可以被移除。
传输修饰类 (Sideband/Routing Signals)

这一类是辅助信号,用于复杂的流处理或路由。

  • TID (主机 Master 发出):数据流标识符。用来区分不同的数据流。
  • TDEST (主机 Master 发出):目的地标识。提供数据流的路由信息(发给谁)。
  • TUSER (主机 Master 发出):用户定义信号。这是一个“万能”的侧带信号,协议没有规定具体用途,用户可以利用它传输任何自定义的辅助信息。

握手

总结起来,就是一句话:只有当 TVALID 和 TREADY同时为高时,数据传输才会真正发生。比较清楚了,再结合图看一下,自己理解一下。

修饰类

在 AXI4-Stream 协议中,数据修饰类信号(主要是TKEEP​ 和TSTRB​)的核心作用是告诉接收端:“总线上这排数据里,哪些字节是真正有用的,哪些只是为了凑数的,哪些甚至连位置都不占。”虽然在很多简单的 AXI Stream IP中,大家往往忽略这两个信号(默认全设为 1),但在处理非对齐传输数据包结尾稀疏数据时,它们至关重要。

通过两个信号来区分三种字节:

  1. TKEEP(Keep):决定这个字节是否存在于流中。
  2. TSTRB(Strobe):决定这个存在的字节是否是有效数据

以下通过具体的例子来解释这三种字节和信号的用途。

逻辑关系表

TKEEPTSTRB字节类型含义
0XNull Byte (空字节)这个字节直接被丢弃,不属于数据包的一部分。
10Position Byte (占位字节)这个字节存在,占据一个位置,但内容无效(相当于 padding)。
11Data Byte (数据字节)这个字节是有效的 payload。

场景一:处理数据包的“尾巴” (最常用:TKEEP 的作用)

假设总线位宽是32-bit (4字节),要发送一个总长度为6字节的数据包(例如0x11, 0x22, 0x33, 0x44, 0x55, 0x66)。

由于总线一次传 4 字节,必须分两个周期传:

  1. 第一个周期:传11 22 33 44(填满了)。
  2. 第二个周期:还剩55 66,但是总线宽是 4 字节,剩下两个位置怎么办?

这时就要用到 Null Byte (TKEEP=0):

Cycle 1:

  • TDATA​:0x44332211(假设小端序)
  • TKEEP​:4'b1111(四个字节都属于这个包)
  • TSTRB​:4'b1111(都是有效数据)

Cycle 2 (TLAST=1):

  • TDATA​:0xXX_XX_66_55(高两字节是垃圾数据)
  • TKEEP​:4'b0011​ (二进制) ->关键点!
  • TSTRB​:4'b0011

TKEEP​ 的高两位是 0,告诉接收端:“虽然总线上传了4个字节,但请无视高位那两个字节,它们不属于这个包。”这就是 Null Byte 的作用——处理非整数倍位宽的数据对齐。


场景二:稀疏数据/对其填充 (TSTRB 的作用)

假设做一个图像处理模块,像素格式是RGB (24-bit/3字节),但为了硬件处理方便,依然使用32-bit (4字节)的总线位宽。需要保证每个像素都对齐到 32-bit 的边界上。这意味着:每传 4 个字节,只有前 3 个字节是颜色,第 4 个字节是为了凑整对齐的“废数据”。

这时就要用到 Position Byte (TKEEP=1, TSTRB=0):

传输像素 1 (R=0xAA, G=0xBB, B=0xCC)

  • TDATA​:0x00_CC_BB_AA(最高字节 00 是凑数的)
  • TKEEP​:4'b1111(这 4 个字节物理上都属于传输流的一部分,不能删掉,否则后面的像素就错位了)。
  • TSTRB​:4'b0111​ (二进制) ->关键点!

低 3 位是1​ (Data Byte):表示AA, BB, CC​ 是有效颜色值。最高位是0​ (Position Byte):表示这个位置必须保留(占据一个字节的空间),但是内容无效(不要把它当做颜色数据处理)。

如果不传 Position Byte 会怎样?
如果最高位设为 Null Byte (TKEEP=0111),接收端可能会把这个字节“抽掉”,导致下一个像素的 R 分量紧贴着上一个像素的 B 分量,破坏了 32-bit 对齐结构。


场景三:部分写入 (Masking)

这在 AXI4-Stream 中较少见,但在由 AXI Stream 转换到 AXI Memory Mapped (如写入 DDR) 时非常重要。想往接收端的缓冲区写数据,但只想修改其中的某几个字节,不想覆盖其他字节。

传输

  • TDATA​:0x12_34_56_78
  • TKEEP​:4'b1111(位置都占着)
  • TSTRB​:4'b1001

接收端只提取最高字节0x12​ 和最低字节0x78​。中间的0x34, 0x56​ 被TSTRB=0标记为无用。如果这是一个写入内存的操作,内存控制器会执行“读-改-写”,只更新最高和最低字节,中间两个字节保持内存里原有的值不变。

总之,

  • Data Byte (TKEEP=1, TSTRB=1):“这是干货。”(最常用,绝大多数情况全是这个)
  • Position Byte (TKEEP=1, TSTRB=0):“这里占个座,但没人。”(用于保持数据对齐,例如 RGB 占 4 字节的例子)
  • Null Byte (TKEEP=0, TSTRB=X):“这里是空气。”(用于标记数据包的结束位置,处理尾部残余字节)

在很多简单的流式处理(如音频流、简单的数据采集)中,因为数据都是连续且填满的,所以通常把TKEEP​ 和TSTRB都拉高(全 1),不进行复杂的修饰。但在视频处理、网络包处理(包长不固定)中,这两个信号必不可少。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 14:20:03

Linux基本指令入门:从看不懂到熟练使用

目录 前言: 一、前置知识:先搞懂 Linux 终端与命令格式 二、必学基础指令 2.1 定位当前位置:pwd 指令 2.2 浏览目录内容:ls 指令 2.3 切换工作目录:cd 指令 2.4 创建空文件:touch 指令 2.5 创建目录…

作者头像 李华
网站建设 2026/4/15 11:35:26

Java:写给学弟学妹的一封信——我们为什么要深入理解这门语言

Java:写给学弟学妹的一封信——我们为什么要深入理解这门语言凌晨三点,屏幕的光还亮着。这次的报错信息是 NullPointerException——又是它。这已经是本周第三次遇到这个“老朋友”了。如果你也在学习Java的路上挣扎,请相信,我们都…

作者头像 李华
网站建设 2026/4/13 3:11:33

C# 從入門到精通:全方位掌握現代程式語言

C# 從入門到精通:全方位掌握現代程式語言第一部分:C# 入門基礎1.1 C# 概述與發展歷程C#(發音為 "C Sharp")是由微軟在 2000 年推出的現代化、物件導向的程式語言。它結合了 C 的強大功能與 Java 的簡潔性,並…

作者头像 李华
网站建设 2026/4/14 16:36:24

Flutter 开发工具链详解

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。 # Flutter 开发工具链详解 Flutter 是一个由 Google 开发的跨平台移动应用开发框架,其完整的工具链涵盖了从开发环境搭建到应用发布的整个生命周期。以下将详细介绍 Flutter 的核心…

作者头像 李华
网站建设 2026/4/15 12:55:31

Video DownloadHelper 配套应用终极配置指南:告别视频下载烦恼

Video DownloadHelper 配套应用终极配置指南:告别视频下载烦恼 【免费下载链接】vdhcoapp Companion application for Video DownloadHelper browser add-on 项目地址: https://gitcode.com/gh_mirrors/vd/vdhcoapp 还在为浏览器视频下载功能受限而苦恼吗&am…

作者头像 李华
网站建设 2026/4/15 3:29:48

TranslucentTB深度汉化指南:从原理到实战的系统美化艺术

TranslucentTB深度汉化指南:从原理到实战的系统美化艺术 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 对于Windows系统美化…

作者头像 李华