Fragment

规范

Fragment 包是通过使用多个“小”片段来传输“大”东西的概念。比如 :

  • 一张通过 Stream[Fragment[Pixel]] 传输尺寸为 宽*高 的图片

  • 一个可以在 Flow[Fragment[Bits]] 上传输的、从没有流量控制的控制器里接收到的 UART 数据包

  • 一个可以由 Stream[Fragment[AxiReadResponse]] 承载的AXI突发读

Fragment 包定义的信号是:

信号

类型

驱动

描述

fragment

T

Master

当前传输任务的“负载”

last

Bool

Master

当该片段是当前数据包的最后一个片段时为高

正如您在本说明和先例中看到的, Fragment 概念并未指定传输任务如何传输(您可以使用 Stream、Flow 或任何其他通信协议)。它仅添加足够的信息(last) 来了解当前传输是给定数据包的第一个、最后一个还是中间的一个。

备注

该协议没有携带 'first' 位,因为它可以通过执行 'RegNextWhen(bus.last, bus.fire) init(True)' 被生成在任何位置

函数

对于 Stream[Fragment[T]]Flow[Fragment[T]] ,给出以下函数:

语法

返回类型

描述

x.first

Bool

当当前或下一个传输是/将是数据包的第一个片段时返回 True

x.tail

Bool

当当前或下一个传输不是数据包的第一个片段时返回 True

x.isFirst

Bool

当当前传输任务被提交并且为数据包的第一个片段时返回 True

x.isTail

Bool

当当前传输任务被提交并且不是数据包的第一个/最后一个片段时返回 True

x.isLast

Bool

当当前传输任务被提交并且为数据包的最后一个片段时返回 True

对于 Stream[Fragment[T]] ,以下函数也是可用的:

语法

返回类型

描述

x.insertHeader(header : T)

Stream[Fragment[T]]

对每个数据包 x 添加 header 并返回生成的总线