1 浅析Stream里的隐式转换-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析Stream里的隐式转换

Spinal FPGA 来源:Spinal FPGA 2023-05-15 17:36 次阅读

Stream、Flow是在电路描述里经常用到的对象。较早时间有小伙伴问关于Stream里Fragment嵌套的问题,当时没有去深入的研究,最近重新review下这个问题,特来做个总结。

》开篇立问

先来看看下面的这个场景:

我们定义如下接口

1a049630-f144-11ed-90ce-dac502259ad0.png

这里定义了一个Stream接口,如果我们想引用这里面的data,那么下面两种方法是等价的:

b.data

b.payload.data

估计大多数人不深究的话基本上就采用第一种写法了,简单快捷(我也是)。

》深入一步

显而易见,这里b的定义是一个Stream接口。按照Stream接口的定义,其所包含的信号只有三个:

1a1d2772-f144-11ed-90ce-dac502259ad0.png

从直观上来看,那么采用b.data这种形式显然是没有直接的方法或调用关系的。

那么剩下的一种可能就是隐式转换了~

Stream类在定义时其继承关系如下:

1a3da6be-f144-11ed-90ce-dac502259ad0.png

这里的隐式转换存在于trait DataCarrier中:

1a5b6eec-f144-11ed-90ce-dac502259ad0.png

这里为DataCarrier定义了两个隐式转换函数toImplicit和toImplicit2。根据DataCarrier的数据类型,分别返回不同的对象:

如果数据类型是普通类型,则直接返回dataCarrier.payload

如果数据类型是Fragment类型,则会返回dataCarrier.fragment(同样,会调用到toImplicit函数)。

如果你在toImplicit函数上打断点,执行上面的接口定义相关的代码,你就会发现会在toImplicit函数上暂停。也就意味着当我们调用b.data时会调用隐式转换函数toImplicit返回b.payload后再执行b.payload.data~

》乱花渐欲迷人眼

理解了上面的代码,接下来的场景可能让你眼花缭乱了。

先来看下面的这段代码:

1a92e322-f144-11ed-90ce-dac502259ad0.png

上面这段代码是不是觉得fire0和fire1是表达相同的功能?然而,生成的RTL代码会让你怀疑自己:

1aba0dda-f144-11ed-90ce-dac502259ad0.png

再来看看一个Fragment嵌套的场景:

1ae478ea-f144-11ed-90ce-dac502259ad0.png

一眼看去是不是觉得fire0和fire1的作用是一样的?

然而,生成的RTL代码却是这样的:

1b025428-f144-11ed-90ce-dac502259ad0.png

给你一分钟,你先品着。等品完之后再来看一个三层Fragment嵌套的代码:

1b2619c6-f144-11ed-90ce-dac502259ad0.png

对应的RTL代码:

1b50f9de-f144-11ed-90ce-dac502259ad0.png

看看对应的RTL代码是不是和你想的又不一样了?

我们调用函数实现和我们自己实现大相径庭!

先晕一会儿~

》拨云见雾

是否又到了怀疑TM这SpinalHDL有Bug吧……

我也思索了两三天~

回归正题。接下来的内容好好品。这一切的一切均还是在于隐式转换。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59757
  • HDL语言
    +关注

    关注

    0

    文章

    47

    浏览量

    8913

原文标题:Stream里的隐式转换

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Stream模块的基础用法和进阶用法

    在 Rust 语言中,Tokio 是一个非常流行的异步编程框架。它提供了一系列的模块,其中最常用的就是 Stream 模块。Stream 模块允许我们以异步的方式处理数据流,这在很多情况下非常
    的头像 发表于 09-19 15:33 1189次阅读

    Stream API原理介绍

    Stream API 是 Java 8 中最重要的新特性之一,它是处理集合和数组的一种新方式。它提供了一种简单、灵活和可读的方式来处理集合和数组中的元素,从而使代码更加简洁、高效和易于维护。 1.
    的头像 发表于 09-30 15:31 704次阅读

    得到警告373“签名到无符号转换

    嗨,伙计,附件是我的4位16×2液晶显示屏的截图。我不断得到警告373“签名到无符号转换”。你会看到它在第148行和第157行。我在C代码上仍然是新的,所以我确信我正在做愚蠢的错误。有人可以帮助
    发表于 03-13 09:19

    mysql转换具体描述

    mysql 转换问题
    发表于 08-13 06:07

    2D解析

    《Fundamentals of Computer Graphics》翻译(三):2D直线
    发表于 09-03 12:19

    XC8怎么将float转换为整数

    您好,我使用了两个选项来改变浮点到余弦角的整数。但是我得到了如下警告:警告[356 ]代码\ADC.C;282.27将浮点到整数的转换。所以不能得到准确的结果。我的代码
    发表于 09-06 12:07

    有符号到无符号转换

    您好,我现在正在使用PIC16F18313,在代码中,我声明了一个变量,它位于我放入的示例代码中,问题是,我收到一个警告:签名到无符号转换,我不知道是什么原因或者如何修复它。关于我的问题:希望你能得到一个很好的回答。谢谢。
    发表于 04-07 14:06

    看看Stream信号是如何做跨时钟域握手的

    逻辑出身的农民工兄弟在面试时总难以避免“跨时钟域”的拷问,在诸多跨时钟域的方法,握手是一种常见的方式,而Stream作为一种天然的握手信号,不妨看看它里面是如做跨时钟域的握手
    发表于 07-07 17:25

    基于显反馈信息的矩阵分解

    针对现有的基于用户显反馈信息的推荐系统推荐准确率不高的问题,提出了一种基于显反馈信息的概率矩阵分解推荐方法。该方法综合考虑了显示反馈信息和
    发表于 01-04 16:22 0次下载

    基于机器学习的中文实体关系抽取方法

    基于机器学习的中文实体关系抽取方法
    发表于 06-02 14:42 4次下载

    JDK8 Stream数据流效率分析

    Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包有若干流类型:Stream 代表对象引用流,此外还有一系列特化流,
    的头像 发表于 08-17 10:53 1242次阅读

    Java 8 Stream流底层原理

    初识lambda呢,函数接口肯定是绕不过去的,函数接口就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数接口可以被
    的头像 发表于 11-18 10:27 1396次阅读

    pipeline高端玩法之Stage转换

    Scala里面的转换的好处是灵活,坏处就是太灵活。
    的头像 发表于 08-19 10:45 659次阅读
    pipeline高端玩法之Stage<b class='flag-5'>里</b>的<b class='flag-5'>隐</b><b class='flag-5'>式</b><b class='flag-5'>转换</b>

    Java的Stream的常用知识

    什么是Stream 生产线 Stream就像处理生产流水线一样去工作,传送带就是Stream的管道,每个工厂关注直接的生产,将上游产品加工成下游需要的产品。为什么Stream比传统的处
    的头像 发表于 10-11 15:45 450次阅读
    Java的<b class='flag-5'>Stream</b>的常用知识

    在SpinalHDL在顶层一键优化Stream/Flow代码生成

        在SpinalHDL在顶层一键优化代码中Stream/Flow代码生成的payload,fragment。 难看的代码       来看一段代码:   import
    的头像 发表于 12-14 09:05 679次阅读