SpinalHDL之Fragment

本文作为SpinalHDL学习笔记第二十篇,介绍SpinalHDL Fragment相关API。

SpinalHDL学习笔记总纲链接如下:

SpinalHDL 学习笔记_spinalhdl blackbox-CSDN博客

目录:

1.规范

2.函数

1.规范

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

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

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

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

Fragment 包定义的信号是:

信号

类型

驱动

描述

fragment

T

Master

当前传输任务的“负载”

last

Bool

Master

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

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

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

2.函数

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

语法

返回类型

描述

x.first

Bool

l当前或下一个传输是/将是数据包的第一个片段时返回 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并返回生成的总线

 

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千穹凌帝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值