在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

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

》開篇立問

先來看看下面的這個(gè)場景:

我們定義如下接口

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

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

b.data

b.payload.data

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

》深入一步

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

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

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

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

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

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

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

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

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

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

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

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

》亂花漸欲迷人眼

理解了上面的代碼,接下來的場景可能讓你眼花繚亂了。

先來看下面的這段代碼:

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

上面這段代碼是不是覺得fire0和fire1是表達(dá)相同的功能?然而,生成的RTL代碼會讓你懷疑自己:

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

再來看看一個(gè)Fragment嵌套的場景:

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

一眼看去是不是覺得fire0和fire1的作用是一樣的?

然而,生成的RTL代碼卻是這樣的:

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

給你一分鐘,你先品著。等品完之后再來看一個(gè)三層Fragment嵌套的代碼:

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

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

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

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

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

先暈一會兒~

》撥云見霧

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

我也思索了兩三天~

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





審核編輯:劉清

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

    關(guān)注

    1

    文章

    388

    瀏覽量

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

    關(guān)注

    0

    文章

    48

    瀏覽量

    9114

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

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

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Stream API原理介紹

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

    一文詳解Video In to AXI4-Stream IP核

    Video In to AXI4-Stream IP核用于將視頻源(帶有同步信號的時(shí)鐘并行視頻數(shù)據(jù),即同步sync或消blank信號或者而后者皆有)轉(zhuǎn)換成AXI4-Stream接口形
    的頭像 發(fā)表于 04-03 09:28 ?1038次閱讀
    一文詳解Video In to AXI4-<b class='flag-5'>Stream</b> IP核

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

    嗨,伙計(jì),附件是我的4位16×2液晶顯示屏的截圖。我不斷得到警告373“簽名到無符號轉(zhuǎn)換”。你會看到它在第148行和第157行。我在C代碼上仍然是新的,所以我確信我正在做愚蠢的錯(cuò)誤。有人可以幫助
    發(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ù)

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

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

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

    看看Stream信號是如何做跨時(shí)鐘域握手的

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

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

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

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

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

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

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

    Java 8 Stream流底層原理

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

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

    Scala里面的轉(zhuǎn)換的好處是靈活,壞處就是太靈活。
    的頭像 發(fā)表于 08-19 10:45 ?914次閱讀
    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的管道,每個(gè)工廠關(guān)注直接的生產(chǎn),將上游產(chǎn)品加工成下游需要的產(chǎn)品。為什么Stream比傳統(tǒng)的處
    的頭像 發(fā)表于 10-11 15:45 ?655次閱讀
    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 ?973次閱讀
    主站蜘蛛池模板: 久久美女精品国产精品亚洲 | 天堂网www在线 | 黄网址免费 | 色综合久久综合欧美综合网 | 日本视频h | 色老二精品视频在线观看 | 视频一区 中文字幕 | 午夜免费 | 天堂网在线www资源在线 | 大尺度在线播放 | 午夜激情婷婷 | 欧美午夜色视频国产精品 | 在线a人片免费观看不卡 | 色午夜影院| 天天操天天曰 | 女张腿男人桶羞羞漫画 | 性free3d | 欧美美女一区二区三区 | 色婷婷一区二区三区四区成人 | 亚洲w码欧洲s码免费 | 成人综合网址 | 中文字幕在线观看日剧网 | 五月天婷婷电影 | 性欧美在线 | 欧美在线视频免费 | 欧美一级特黄乱妇高清视频 | 五月天福利视频 | 久久青草免费免费91线频观看 | 欧美三级中文字幕hd | 欧美极品一区 | 国产久热精品 | 8050网午夜| 日本大片免费观看视频 | 四虎免费大片aⅴ入口 | 公妇乱淫日本免费观看 | 欧美无限看| 性感美女视频黄.免费网站 性高清 | 精品成人网 | 国产片91人成在线观看 | 午夜噜噜噜私人影院在线播放 | 在线播放一区二区精品产 |