2.1信号列表接口
信号如表2-1所示。有关这些信号的更多信息,请参阅本章的进一步章节。表2-1使用以下参数定义n 信号宽度:以字节为单位的数据总线宽度。
i TID宽度。建议最大长度为8位。
d dtd宽度。建议最大长度为4位。
u TUSER 宽度。推荐位数是接口宽度的整数倍,单位是字节。
这一节给出了握手信号的详细信息,并定义了TVALID和TREADY握手信号。
2.2.1握手过程
TVALID和TREADY握手决定信息何时通过接口传递。双向流控制机制使主从双方都能够控制数据和控制信息通过接口传输的速率。要发生传输,必须断言TVALID和TREADY信号。TVALID或TREADY可以先断言,或者两者都可以在同一个ACLK循环中断言。
在断言TVALID之前,主服务器不允许等待TREADY被断言。一旦TVALID被断言,它必须保持断言,直到握手发生。
在断言相应的TREADY之前,允许一个slave等待TVALID被断言。
如果一个slave断言已经完成,那么它被允许在TVALID断言之前取消断言。
下面几节给出握手序列的示例。
TVALID在TREADY握手之前在图2-1中,主机显示数据和控制信息,并断言TVALID信号为HIGH。一旦master断言TVALID,来自master的数据或控制信息必须保持不变,直到从服务器驱动TREADY信号HIGH,表明它可以接受数据和控制信息。在这种情况下,一旦从属服务器断言TREADY HIGH,传输就发生了。箭头显示了转移发生的时间。
TREADY在TVALID握手之前
在图2-2中,数据和控制信息有效之前,从机处于“TREADY HIGH”状态。这表明目的地可以在一个周期内接受ACLK的数据和控制信息。在这种情况下,一旦主服务器断言TVALID HIGH,传输就开始了。箭头显示了转移发生的时间。
TVALID与TREADY握手
在图2-3中,在ACLK的同一周期内,主端断言TVALID HIGH,从端断言TREADY HIGH。在这种情况下,传输发生在箭头所示的同一周期内。
AXI4-Stream接口的数据信令要求。TDATA是AXI4-Stream接口的主要负载,用于将数据从源传输到目标。
在数据流中,数据总线的低阶字节是流中较早的字节。
对于一个完全打包的流,没有空字节,可以使用以下方法确定给定字节在流中的位置:
在数据流中:
字节序列n从0开始编号,
每个传输t从0开始编号,
数据总线的宽度为w字节
INT(x)是x的舍入整数值。
因此,字节n包含在传输t中,其中:
t = INT(n/w)
在字节位置b,其中
b = n - (t * w)
包含在:
TDADA[(8b+7):8b]
AXI4-Stream协议定义了三种字节类型:
Data Byte 数据字节必须从源传送到目的。必须维护源和目标之间的数据字节数、相关的TDATA数据值以及数据字节在流中的相对位置(相对于其他数据字节和位置字节)。
Position Byte 位置字节必须从源到目的传输位置字节。必须在源和目标之间维护位置字节数和位置字节在流中的相对位置(相对于其他数据字节和位置字节)。与位置字节相关联的TDATA数据值不需要在源和目标之间传输。
Null Byte 空字节不包含任何信息。可以在流中插入或删除空字节。它们不需要在源和目标之间传输。
连接不能修改数据字节或流中的位置字节的数量或相对位置。
允许互连从流中插入或删除空字节。在某些操作中可能需要插入空字节,例如将数据扩展到更宽的数据总线,在这种情况下,没有足够的数据和位置字节来进行完整的数据宽度转移。
主组件和从组件不需要支持空字节,因此任何能够在流中插入空字节的互连也应该能够在流到达不能处理空字节的目的地之前删除它们。
2.3.3数据合并、打包和宽度转换
它希望能够适应流媒体接口的数据宽度。这允许使用固定的接口宽度来构建组件,然后在使用不同接口宽度的系统设计中重用该组件。可适应的接口宽度还允许组合具有不同本机宽度的组件并共享一个公共链接。
预计在大多数应用程序中,接口宽度为2字节的功率。但是,这不是协议的要求,因此接口可以是字节宽度的整数。
所有的放大和缩小操作都需要保留任何断言了相关TKEEP数据限定符的字节。如果一个放大或缩小操作没有足够的数据字节来编译全宽输出,则可以添加额外的字节,并取消断言相关的TKEEP信号。
合并注意事项
合并是将来自两个不同传输的字节合并为一个传输的过程。当传输具有可以删除的空字节时,可以进行合并,从而允许包含以后的数据或位置字节。合并可以与包装一起进行。看包装上的考虑。
与合并相关的规则是:
只有具有匹配的TID和TDEST标识符的传输才能被合并。
如果当前传输是用TLAST发出信号的,它一定不能与后面的传输合并。
TLAST还表示没有后续的传输可以合并,因此当前传输的传输不应该延迟。
必须维护数据字节和位置字节的正确顺序。
必须维护TLAST、TSTRB和TUSER的正确关联。
允许部分合并。
例如,如果当前的4字节传输只有3个数据字节,则允许合并来自下一个传输的单个数据字节,即使下一个传输有多个数据字节。
打包注意事项
打包是从流中删除空字节的过程。
包装通常与一些其他活动相关联,如放大、缩小或合并。
通过删除空字节,可以对使用TKEEP关联的数据流进行打包,以提供更压缩的数据流。完全打包的数据不需要,因此在打包之前和之后都可能出现空字节。
裁剪注意事项
缩小是将给定的数据总线宽度转换为更窄的数据总线宽度这个过程通常涉及为一个输入传输生成多个输出传输。通常情况下,裁剪是2:1,但也可以执行其他裁剪比例。
与裁剪有关的规则是:
输出流中的字节顺序必须与输入流中的字节顺序匹配
TSTRB必须以类似于数据的方式进行缩小,确保数据字节和位置字节之间的正确关系得到维护
TLAST必须只与缩减操作的最终转移相关联所有输出传输的TID和TDEST必须与输入传输的值匹配TUSER信息必须与相同的字节保持关联。
请注意 如果传输只包含空字节且TKEEP被去断言,而TLAST没有被断言,则可以被抑制。
Asserted(Asserting、Assert),Deasserted (Deassert、deasserting、de-asserted)
asserted的意思就是把信号变为active(可以理解为有效),根据系统有求不同,该有效电平可以是高电平(即高有效)也可以是低电平(即低有效)。
deasserted的意思就是解除active状态,就是信号变为非active状态,可以是高也可以是低。
扩充注意事项
升级是将给定的数据总线宽度转换为更宽的数据总线宽度。
这个过程可以与合并相结合,以便为多个输入传输生成一个输出传输。如果将大调整与合并结合在一起,则大调整可能是一个更复杂的过程,因为在接收传输时,大调整器并不总是能够确定以下传输是否在同一个包中。
与扩充相关的信号规则如下:
输出流中的字节顺序必须与输入流中的字节顺序匹配
TSTRB必须以类似于数据的方式进行升级,确保数据字节和位置字节之间的正确关系得到维护
TLAST必须保存所有输出事务的TID和TDEST必须与输入事务的值匹配。
TUSER信息必须与相同的字节相关联。
请注意如果没有足够的传输来构造全宽的升级流,则需要TKEEP信号来指示空字节。
本节定义了AXI4-Stream协议支持的两个字节限定符:
TΚEEP一个字节限定符,用于指示是否必须将关联字节的内容传输到目的地。T
STRB一个字节限定符,用于指示关联字节的内容是数据字节还是位置字节。
TKEEP和TSTRB的每一个比特都与负载的一个字节相关联:
TKEEP[x]与TDATA[(8x+7):8x]相关联
TSTRB[x]与TDATA[(8x+7):8x]相关联
当TKEEP被断言为HIGH时,表示必须将相关字节传输到目的地。
当TKEEP被宣告为 LOW时,它表示一个可以从流中删除的空字节。
传输将所有的TKEEP位去断言LOW是合法的。
允许所有的TKEEP位去断言LOW被抑制的传输,除非它的TLAST被断言为HIGH。
有关使用模型,请参阅第2-9页的包边界。
主端和从端处理空字节不是强制的,因此任何能够在流中插入空字节的互连也应该能够在流到达不能处理空字节的目的地之前删除它们。
当断言TKEEP时,使用TSTRB来指示相关联的字节是数据字节还是位置字节。
当TSTRB被断言为HIGH时,表示相关字节包含有效信息,并且是一个数据字节。
当TSTRB被断言为 LOW时,它表明相关字节不包含有效信息,是一个位置字节。
位置字节用于指示数据字节在流中的正确相对位置。位置字节通常在数据流在目标处执行信息的部分更新时使用。
由于与位置字节相关的数据是无效的,互连不需要传输与一个TSTRB被断言为LOW相关联的字节相关的TDATA。
表2-2列出了TKEEP和TSTRB字节限制的有效组合。
并非所有组件都需要TKEEP和TSTRB数据限定符。参见3-2页可选TKEEP和TSTRB。
包是一组字节,它们通过接口一起传输。基础设施组件通常可以通过处理分组在包中进行的传输来提高效率。
axi4 - stream包类似于axi4突发。在包传输过程中需要考虑的信号是TID、TDEST和TLAST。有关TID和TDEST的更多信息,请参见第2-10页的Source和destination信令。
TLAST的用途如下:
当去断言时,TLAST表示另一个传输可以跟随,因此,为了大、小或合并的目的,延迟当前传输是可以接受的
当断言时,目的地可以使用TLAST来指示
断言时的包边界,TLAST表示在共享链路上进行仲裁更改的有效点。
请注意 并不要求仲裁只发生在TLAST边界上,但是TLAST信令可以通过保持同一包中的传输在一起来潜在地提高效率。
TLAST可以用来在源和目标之间传输信息。主备之间必须保留TLAST的报文数和断言数。
在协议中没有给出包边界开始的显式信号。一个包的开始被确定为:
重置后第一个出现的TID和TDEST对
对于任何唯一的一组TID和,在前面的数据包结束后的第一次传输TDEST价值观。
一个包中的所有字节都来自相同的源和相同的目的地,并且具有相同的TID和TDEST值。
不允许合并属于不同数据包的传输。这要求,如果前面的传输断言了TLAST,那么具有相同TID和TDEST值的两个传输不能合并。参见第2-6页的合并注意事项。不允许合并具有不同TID或TDEST值的传输。
传输可以断言TLAST,但不包含数据或位置字节。这可以用于:
当没有更多的数据或位置字节可以通过中间缓冲区中的任何数据传输时,
指示包的结束在一个端点完成一个操作,
该端点期望在一个包的结尾得到一个TLAST。
一个已经断言了TLAST的传输,但是没有任何数据或位置字节,可以与一个更早的传输合并,该传输具有匹配的TID和TDEST值,但没有断言TLAST。参见第2-6页的合并注意事项。
请注意由于不支持重新排序,发送零数据字节的传输将有效地推动主服务器和从服务器之间的所有传输。参见第4-3页的转移顺序。
与源信令和目的信令相关联的信号有:
TID
提供流标识符,可用于区分正在通过同一接口传输的多个数据流。
TDEST
•为数据流提供粗略路由信息。
具有相同TID和TDEST值的传输来自相同的流。不允许合并属于不同流的传输。
在不同的传输中交叉传输是允许在每个传输基础上的,不限于TLAST边界。参见第4-2页的转移交错。互连组件可以操作TID和TDEST信号:
通过互连可以产生额外的TID信号。这允许区分两个在其他方面相同的流。
互连可以生成或操作TDEST信号来为流提供路由信息。
对TID或TDEST的任何操作都必须确保两个不同的流保持惟一。
请注意互连的一个常见使用模型是基于传入流提供的TID信息为传出流生成TDEST信息。
介绍时钟和复位信号的要求。
每个组件使用单个时钟信号,ACLK。所有输入信号在ACLK上升沿上采样。所有输出信号的变化必须发生在ACLK上升沿之后。
2.7.2复位
该协议包括一个单一的active-LOW复位信号ARESETn。复位信号可以异步断言,但复位信号必须在ACLK上升沿之后同步断言。
在复位期间,TVALID必须被驱动为LOW。
所有其他信号都可以被驱动为任意值。
主接口必须在一个上升的ACLK边缘开始驱动TVALID,该上升边缘的ARESETn被断言为HIGH。图2-4显示了复位后TVALID可以被驱动到HIGH的第一个点。
流接口的典型使用需要一些用户边带信令。边带信令可用于数据字节、传输、分组或基于帧的信息。
用户信令有几种用途。例如:
标记特殊数据项的位置或类型
提供必须伴随数据的辅助信息,如奇偶校验、控制信号和标志识别报文的段。
为了确保传输用户信息的一致方法,协议定义用户信令以字节为基础传输。
建议(但不要求)TUSER位的个数为接口宽度的整数倍(字节数)。每个字节的用户信号必须在TUSER内的相邻位中打包在一起。
User位的位置定义为:
每个数据字节有m个与之相关的用户信号,
接口的总宽度为n字节,
用户位的总数为u,其中u = m * n
用户为字节x发送信号,其中x = 0…(n-1),位于:
当相关的TKEEP信号被去断言为LOW时,TUSER位的传输是不需要或不保证的。
请注意
如果从流中移除空字节,则必须从数据流中移除与空字节相关联的用户位(如关联的TKEEP位所示)。
如果在数据流中插入一个空字节,则必须插入适当数量的User位。当插入额外的位,他们必须固定低。
TUSER可用于传递与整个传输相关的信息,而不是与单个字节相关的信息。这方面的一个例子是,相同的信息应用于传输中的每个字节,对于整个传输,只指示一次额外的信息比为传输中的每个字节复制它更有效。
TUSER可用于传输基于传输的信息,但传输机制将TUSER信息划分为被传输的数据字节。基于传输的TUSER信息的可靠传输只有在以下约束条件下才能得到保证:
互连的输入端的数据总线宽度必须与互连的输出端的数据总线宽度匹配
在互连中发生的任何数据宽度转换都不能修改互连输入和互连输出之间的数据封装
当一个传输通过一个复杂的互连时,它可能穿过支持不同于主或从端支持的TUSER宽度的互连部分。本节描述TUSER为确保在这样的互连中可靠传输所需要的操作。
TUSER信息的填充和修剪本节描述在每字节的TUSER位数不匹配的情况下,必须如何填充或修整TUSER信息。本节中的所有示例都要求已经执行了数据宽度转换,以确保接口两端的数据字节数匹配。
TUSER的填充或修剪是通过每个字节添加或删除上层位来完成的,而不是整个TUSER数据的上层位。当填充时,任何额外的位必须被固定为低。
图2-5显示了8字节数据接口从每字节1位到每字节2位的填充。
图2-6显示了8字节数据接口从每字节2位到每字节1位的修剪。
图2-7显示了4字节数据接口从每字节2位到每字节4位的填充。
图2-8显示了4字节数据接口从每字节2位到每字节3位的填充。
确定TUSER的宽度
对于一个有多个主接口和多个从接口的互连,该互连必须支持的每个字节的TUSER位数定义为:
在实践中:
1.找出每字节TDATA的TUSER位最多的主控程序。
2.找出每字节TDATA的TUSER位最多的slave。
3.使用这两个值中较小的那个来定义互连必须支持的每字节TDATA的TUSER位数。
如果是主服务器的最大值更小,那么一个或多个从服务器每字节TDATA的TUSER比任何主服务器生成的TUSER都要大。
如果从服务器的TUSER值更小,那么一个或多个主服务器的TUSER值每字节的TDATA值大于任何从服务器的TUSER值。
修订TUSER的指引如下:
具有比互连器更窄的TUSER的主机必须将TUSER置零以匹配互连器端口。
具有比互连线更宽的TUSER的主机必须修剪TUSER以匹配互连端口。
这必须只适用于TUSER比最大从节点宽的主节点。
在互连的任何一点,当TUSER比下游的TUSER窄时,TUSER必须是零填充的。
在互连线的任何一点,当TUSER比下游的TUSER宽时,TUSER必须修整。
这必须只适用于所有可能的下游奴隶具有相同或更窄的TUSER的情况。
在到达从机时,如果从机的TUSER比互连提供的窄,那么TUSER必须被修整。
在到达从站时,如果从站的TUSER比互连提供的宽,那么TUSER必须是零填充的。这必须只适用于TUSER比主服务器宽的从服务器。
如果在互连的构造过程中知道哪些主服务器与哪些从服务器通信的附加信息,则允许对必须支持的TUSER宽度进行进一步的优化。