色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析Stream里的隱式轉(zhuǎn)換

Spinal FPGA ? 來源:Spinal FPGA ? 2023-05-15 17:36 ? 次閱讀

Stream、Flow是在電路描述里經(jīng)常用到的對象。較早時間有小伙伴問關(guān)于Stream里Fragment嵌套的問題,當(dāng)時沒有去深入的研究,最近重新review下這個問題,特來做個總結(jié)。

》開篇立問

先來看看下面的這個場景:

我們定義如下接口

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

這里定義了一個Stream接口,如果我們想引用這里面的data,那么下面兩種方法是等價的:

b.data

b.payload.data

估計大多數(shù)人不深究的話基本上就采用第一種寫法了,簡單快捷(我也是)。

》深入一步

顯而易見,這里b的定義是一個Stream接口。按照Stream接口的定義,其所包含的信號只有三個:

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

從直觀上來看,那么采用b.data這種形式顯然是沒有直接的方法或調(diào)用關(guān)系的。

那么剩下的一種可能就是隱式轉(zhuǎn)換了~

Stream類在定義時其繼承關(guān)系如下:

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

這里的隱式轉(zhuǎn)換存在于trait DataCarrier中:

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

這里為DataCarrier定義了兩個隱式轉(zhuǎn)換函數(shù)toImplicit和toImplicit2。根據(jù)DataCarrier的數(shù)據(jù)類型,分別返回不同的對象:

如果數(shù)據(jù)類型是普通類型,則直接返回dataCarrier.payload

如果數(shù)據(jù)類型是Fragment類型,則會返回dataCarrier.fragment(同樣,會調(diào)用到toImplicit函數(shù))。

如果你在toImplicit函數(shù)上打斷點,執(zhí)行上面的接口定義相關(guān)的代碼,你就會發(fā)現(xiàn)會在toImplicit函數(shù)上暫停。也就意味著當(dāng)我們調(diào)用b.data時會調(diào)用隱式轉(zhuǎn)換函數(shù)toImplicit返回b.payload后再執(zhí)行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

對應(yīng)的RTL代碼:

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

看看對應(yīng)的RTL代碼是不是和你想的又不一樣了?

我們調(diào)用函數(shù)實現(xiàn)和我們自己實現(xiàn)大相徑庭!

先暈一會兒~

》撥云見霧

是否又到了懷疑TM這SpinalHDL有Bug吧……

我也思索了兩三天~

回歸正題。接下來的內(nèi)容好好品。這一切的一切均還是在于隱式轉(zhuǎn)換。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59901
  • HDL語言
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    8942

原文標(biāo)題:Stream里的隱式轉(zhuǎn)換

文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Stream模塊的基礎(chǔ)用法和進階用法

    在 Rust 語言中,Tokio 是一個非常流行的異步編程框架。它提供了一系列的模塊,其中最常用的就是 Stream 模塊。Stream 模塊允許我們以異步的方式處理數(shù)據(jù)流,這在很多情況下非常
    的頭像 發(fā)表于 09-19 15:33 ?1238次閱讀

    Stream API原理介紹

    Stream API 是 Java 8 中最重要的新特性之一,它是處理集合和數(shù)組的一種新方式。它提供了一種簡單、靈活和可讀的方式來處理集合和數(shù)組中的元素,從而使代碼更加簡潔、高效和易于維護。 1.
    的頭像 發(fā)表于 09-30 15:31 ?741次閱讀

    得到警告373“簽名到無符號轉(zhuǎn)換

    嗨,伙計,附件是我的4位16×2液晶顯示屏的截圖。我不斷得到警告373“簽名到無符號轉(zhuǎn)換”。你會看到它在第148行和第157行。我在C代碼上仍然是新的,所以我確信我正在做愚蠢的錯誤。有人可以幫助
    發(fā)表于 03-13 09:19

    mysql轉(zhuǎn)換具體描述

    mysql 轉(zhuǎn)換問題
    發(fā)表于 08-13 06:07

    2D解析

    《Fundamentals of Computer Graphics》翻譯(三):2D直線
    發(fā)表于 09-03 12:19

    XC8怎么將float轉(zhuǎn)換為整數(shù)

    您好,我使用了兩個選項來改變浮點到余弦角的整數(shù)。但是我得到了如下警告:警告[356 ]代碼\ADC.C;282.27將浮點到整數(shù)的轉(zhuǎn)換。所以不能得到準確的結(jié)果。我的代碼
    發(fā)表于 09-06 12:07

    有符號到無符號轉(zhuǎn)換

    您好,我現(xiàn)在正在使用PIC16F18313,在代碼中,我聲明了一個變量,它位于我放入的示例代碼中,問題是,我收到一個警告:簽名到無符號轉(zhuǎn)換,我不知道是什么原因或者如何修復(fù)它。關(guān)于我的問題:希望你能得到一個很好的回答。謝謝。
    發(fā)表于 04-07 14:06

    看看Stream信號是如何做跨時鐘域握手的

    邏輯出身的農(nóng)民工兄弟在面試時總難以避免“跨時鐘域”的拷問,在諸多跨時鐘域的方法,握手是一種常見的方式,而Stream作為一種天然的握手信號,不妨看看它里面是如做跨時鐘域的握手
    發(fā)表于 07-07 17:25

    基于顯反饋信息的矩陣分解

    針對現(xiàn)有的基于用戶顯反饋信息的推薦系統(tǒng)推薦準確率不高的問題,提出了一種基于顯反饋信息的概率矩陣分解推薦方法。該方法綜合考慮了顯示反饋信息和
    發(fā)表于 01-04 16:22 ?0次下載

    基于機器學(xué)習(xí)的中文實體關(guān)系抽取方法

    基于機器學(xué)習(xí)的中文實體關(guān)系抽取方法
    發(fā)表于 06-02 14:42 ?4次下載

    JDK8 Stream數(shù)據(jù)流效率分析

    Stream 是Java SE 8類庫中新增的關(guān)鍵抽象,它被定義于 java.util.stream (這個包有若干流類型:Stream 代表對象引用流,此外還有一系列特化流,
    的頭像 發(fā)表于 08-17 10:53 ?1265次閱讀

    Java 8 Stream流底層原理

    初識lambda呢,函數(shù)接口肯定是繞不過去的,函數(shù)接口就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。函數(shù)接口可以被
    的頭像 發(fā)表于 11-18 10:27 ?1431次閱讀

    pipeline高端玩法之Stage轉(zhuǎn)換

    Scala里面的轉(zhuǎn)換的好處是靈活,壞處就是太靈活。
    的頭像 發(fā)表于 08-19 10:45 ?698次閱讀
    pipeline高端玩法之Stage<b class='flag-5'>里</b>的<b class='flag-5'>隱</b><b class='flag-5'>式</b><b class='flag-5'>轉(zhuǎn)換</b>

    Java的Stream的常用知識

    什么是Stream 生產(chǎn)線 Stream就像處理生產(chǎn)流水線一樣去工作,傳送帶就是Stream的管道,每個工廠關(guān)注直接的生產(chǎn),將上游產(chǎn)品加工成下游需要的產(chǎn)品。為什么Stream比傳統(tǒng)的處
    的頭像 發(fā)表于 10-11 15:45 ?482次閱讀
    Java的<b class='flag-5'>Stream</b>的常用知識

    在SpinalHDL在頂層一鍵優(yōu)化Stream/Flow代碼生成

    ? ? 在SpinalHDL在頂層一鍵優(yōu)化代碼中Stream/Flow代碼生成的payload,fragment。 難看的代碼 ? ????來看一段代碼: ? import
    的頭像 發(fā)表于 12-14 09:05 ?728次閱讀
    主站蜘蛛池模板: yellow片在线观看免费观看动漫| 久久久久久久久久综合情日本 | 强奷乱码欧妇女中文字幕熟女| 富婆大保健嗷嗷叫普通话对白| 亚洲精品资源网在线观看| 久久青草影院| 国产成人免费高清视频| 一级毛片在线免费视频| 日本工口生肉全彩大全| 精品久久久久中文字幕日本| WWW国产精品人妻一二三区| 亚洲成a人片777777久久| 男女后进式猛烈xx00动态图片| 国产精品美女久久久网站动漫| 真实伦 乱| 邪恶肉肉全彩色无遮琉璃神社| 美女视频黄色的| 国产亚洲综合视频| 精彩国产萝视频在线| FREESEXVIDEO 性老少配| 亚洲精品成人AV在线观看爽翻| 欧美丰满白嫩bbxx| 精品久久久久久久久免费影院| 高h辣h双处全是肉一对一| 91麻豆精品| 日本亚洲精品无码区国产电影 | 在线国产视频观看| 私密按摩师在线观看 百度网盘 | 99久久久精品| 亚洲国产第一区二区三区| 欧美日韩亚洲成人| 久久久无码精品无码国产人妻丝瓜| 国产成人免费高清视频| 99re在这里只有精品| 一级做a爰片久久毛片苍井优| 十九岁在线观看免费完整版电影| 麻豆精品一区二正一三区| 精品96在线观看影院| 国产精品ⅴ视频免费观看| xxnx日本| 99re 这里只有精品|