2026/1/9 9:34:16
网站建设
项目流程
沈阳做网站 智域,电商运营的基本内容,在网站开发中如何设置登录,网站建设一般用到的语言FPGA教程系列-Vivado AXI4-Stream接口解读
俗话说#xff0c;纸上得来终觉浅#xff0c;理论看了半天可能都觉不出来有什么难的#xff0c;上次仿真了一下AXI#xff0c;跟实际的不一样#xff0c;但是总归是动手了#xff0c;大概知道了一些#xff0c;现在就返回来重新…FPGA教程系列-Vivado AXI4-Stream接口解读俗话说纸上得来终觉浅理论看了半天可能都觉不出来有什么难的上次仿真了一下AXI跟实际的不一样但是总归是动手了大概知道了一些现在就返回来重新看一下AXI的理论知识。都是网络上的知识如有雷同纯属抄袭。什么是AXI4AXI 表示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但在处理非对齐传输、数据包结尾或稀疏数据时它们至关重要。通过两个信号来区分三种字节TKEEP(Keep)决定这个字节是否存在于流中。TSTRB(Strobe)决定这个存在的字节是否是有效数据。以下通过具体的例子来解释这三种字节和信号的用途。逻辑关系表TKEEPTSTRB字节类型含义0XNull Byte (空字节)这个字节直接被丢弃不属于数据包的一部分。10Position Byte (占位字节)这个字节存在占据一个位置但内容无效相当于 padding。11Data Byte (数据字节)这个字节是有效的 payload。场景一处理数据包的“尾巴” (最常用TKEEP 的作用)假设总线位宽是32-bit (4字节)要发送一个总长度为6字节的数据包例如0x11, 0x22, 0x33, 0x44, 0x55, 0x66。由于总线一次传 4 字节必须分两个周期传第一个周期传11 22 33 44(填满了)。第二个周期还剩55 66但是总线宽是 4 字节剩下两个位置怎么办这时就要用到 Null Byte (TKEEP0)Cycle 1:TDATA:0x44332211(假设小端序)TKEEP:4b1111(四个字节都属于这个包)TSTRB:4b1111(都是有效数据)Cycle 2 (TLAST1):TDATA:0xXX_XX_66_55(高两字节是垃圾数据)TKEEP:4b0011 (二进制) -关键点TSTRB:4b0011TKEEP 的高两位是 0告诉接收端“虽然总线上传了4个字节但请无视高位那两个字节它们不属于这个包。”这就是 Null Byte 的作用——处理非整数倍位宽的数据对齐。场景二稀疏数据/对其填充 (TSTRB 的作用)假设做一个图像处理模块像素格式是RGB (24-bit/3字节)但为了硬件处理方便依然使用32-bit (4字节)的总线位宽。需要保证每个像素都对齐到 32-bit 的边界上。这意味着每传 4 个字节只有前 3 个字节是颜色第 4 个字节是为了凑整对齐的“废数据”。这时就要用到 Position Byte (TKEEP1, TSTRB0)传输像素 1 (R0xAA, G0xBB, B0xCC)TDATA:0x00_CC_BB_AA(最高字节 00 是凑数的)TKEEP:4b1111(这 4 个字节物理上都属于传输流的一部分不能删掉否则后面的像素就错位了)。TSTRB:4b0111 (二进制) -关键点低 3 位是1 (Data Byte)表示AA, BB, CC 是有效颜色值。最高位是0 (Position Byte)表示这个位置必须保留占据一个字节的空间但是内容无效不要把它当做颜色数据处理。如果不传 Position Byte 会怎样如果最高位设为 Null Byte (TKEEP0111)接收端可能会把这个字节“抽掉”导致下一个像素的 R 分量紧贴着上一个像素的 B 分量破坏了 32-bit 对齐结构。场景三部分写入 (Masking)这在 AXI4-Stream 中较少见但在由 AXI Stream 转换到 AXI Memory Mapped (如写入 DDR) 时非常重要。想往接收端的缓冲区写数据但只想修改其中的某几个字节不想覆盖其他字节。传输TDATA:0x12_34_56_78TKEEP:4b1111(位置都占着)TSTRB:4b1001接收端只提取最高字节0x12 和最低字节0x78。中间的0x34, 0x56 被TSTRB0标记为无用。如果这是一个写入内存的操作内存控制器会执行“读-改-写”只更新最高和最低字节中间两个字节保持内存里原有的值不变。总之Data Byte (TKEEP1, TSTRB1):“这是干货。”(最常用绝大多数情况全是这个)Position Byte (TKEEP1, TSTRB0):“这里占个座但没人。”(用于保持数据对齐例如 RGB 占 4 字节的例子)Null Byte (TKEEP0, TSTRBX):“这里是空气。”(用于标记数据包的结束位置处理尾部残余字节)在很多简单的流式处理如音频流、简单的数据采集中因为数据都是连续且填满的所以通常把TKEEP 和TSTRB都拉高全 1不进行复杂的修饰。但在视频处理、网络包处理包长不固定中这两个信号必不可少。