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

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

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

SpinalHDL中Bundle數(shù)據(jù)類型的轉(zhuǎn)換

Spinal FPGA ? 來(lái)源:Spinal FPGA ? 作者:Spinal FPGA ? 2022-10-17 09:51 ? 次閱讀

編 者 按

SpinalHDL中Bundle與SystemVerilog中的packed struct很像,在某些場(chǎng)景下,與普通數(shù)據(jù)類型之間的連接賦值可以通過(guò)asBits,assignFromBits來(lái)實(shí)現(xiàn)。

》Bundle—>Bits 在SpinalHDL中,無(wú)論是哪種數(shù)據(jù)類型都是可以轉(zhuǎn)換成Bits類型,我們擴(kuò)展Bundle類型定義的復(fù)雜數(shù)據(jù)類型也不例外,可以通過(guò)asBits函數(shù)將自定義的數(shù)據(jù)類型轉(zhuǎn)換成Bits數(shù)據(jù)類型。以下面所定義的數(shù)據(jù)類型為例:

case class port() extends Bundle with IMasterSlave {
val data0=UInt(8 bits)
val data1=Bits(8 bits)
val last=Bool()


override def asMaster(): Unit = {
out(data0,data1,last)
  }
}
我們完全可以通過(guò)調(diào)用asBits函數(shù)將其轉(zhuǎn)換成Bits類型:
val portInst=port()
valdata=portInst.asBits
生成的Verilog代碼將對(duì)應(yīng):
assign data = {portInst_last,{portInst_data1,portInst_data0}};
這里與SystemVerilog中的packed struct略不相同的是,在SystemVerilog中packed struct中先定義的元素排在最高位,而在SpinalHDL Bundle中先定義的元素在轉(zhuǎn)換成Bits時(shí)則是排在最低位,這與asBits函數(shù)的實(shí)現(xiàn)有關(guān):

47ceacc4-4d3c-11ed-a3b6-dac502259ad0.jpg

》Bits—>Bundle

Bits—>Bundle的轉(zhuǎn)換可以通過(guò)assignFromBits來(lái)實(shí)現(xiàn)。在SpinalHDL中針對(duì)Bundle類型,提供了三種不同的實(shí)現(xiàn):

assignFromBits(bits:Bits)—將bits整個(gè)賦值給Bundle,當(dāng)bits位寬大于Bundle定義的位寬時(shí),高位將抹去。

assignFromBits(bits:Bits,hi:Int,lo:Int)—將bits整個(gè)賦值給Bundle對(duì)應(yīng)Bits的(hi down to lo),多余的位將抹去

assignFromBits(bits:Bits,offset:Int,bitCount:BitCount)—等價(jià)于assignFromBits(bits,offset:Int+bitCount.value,offset)

在和已有的一些Verilog/SystemVerilog接口進(jìn)行對(duì)接時(shí)這些API還是很有作用的,可以方便的實(shí)現(xiàn)接口轉(zhuǎn)換以實(shí)現(xiàn)功能。

像下面的用法是等價(jià)的:

val dataIn=Bits(17 bits)
val portInst=port()
portInst.assignFromBits(dataIn)
等價(jià)于:
portInst.data0:=dataIn(7downto 0)
portInst.data1:=dataIn(15 downto 8)
portInst.last:=dataIn(16)



valportData=Bits(16bits)
valportLast=Bits(16bits)
val portInst=port()
portInst.assignFromBits(portData,15,0)
portInst.last:=portLast


等價(jià)于
portInst.data0:=portData(7 downto 0)
portInst.data1:=portData(15 downto 8)
portInst.last:=portLast

下面的這個(gè)例子展示了如果通過(guò)這些方法調(diào)用SpinalHDL中的StreamArbiter來(lái)實(shí)現(xiàn)兩個(gè)port端口FragmentLock RR調(diào)度:

47fc2262-4d3c-11ed-a3b6-dac502259ad0.png

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

    關(guān)注

    28

    文章

    1343

    瀏覽量

    109925
  • bundled
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    9085
  • 數(shù)據(jù)類型
    +關(guān)注

    關(guān)注

    0

    文章

    236

    瀏覽量

    13596

原文標(biāo)題:Bundle的轉(zhuǎn)換

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GaussDB 數(shù)據(jù)類型介紹

    進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,以滿足不同的需求。本文將以示例的形式羅列并介紹一些常見的數(shù)據(jù)類型轉(zhuǎn)換方法等。? 數(shù)據(jù)類型概念及特點(diǎn)
    的頭像 發(fā)表于 06-05 16:40 ?1602次閱讀
    GaussDB <b class='flag-5'>數(shù)據(jù)類型</b>介紹

    JAVA語(yǔ)言的數(shù)據(jù)類型轉(zhuǎn)換

    JAVA語(yǔ)言的數(shù)據(jù)類型轉(zhuǎn)換很多場(chǎng)合需要用到類型轉(zhuǎn)換。例如,要把一個(gè)整型變量作為字符型變量來(lái)使用,就需要使用類型
    發(fā)表于 12-06 00:30

    關(guān)于數(shù)據(jù)類型轉(zhuǎn)換的問(wèn)題

    如圖,最右邊的反饋節(jié)點(diǎn)輸出M序列。這個(gè)M序列的數(shù)據(jù)類型是布爾型。樓主想把M序列的數(shù)據(jù)類型轉(zhuǎn)換成布爾型數(shù)組。想了好久都不知道該怎么操作。希望能有人解答。樓主不勝感激
    發(fā)表于 04-27 21:07

    怎么轉(zhuǎn)換連接數(shù)據(jù)類型?

    請(qǐng)問(wèn)怎么把圖二的“藍(lán)線”轉(zhuǎn)換成圖一的“紅色”數(shù)據(jù)類型?很急,在線等,謝謝!
    發(fā)表于 11-29 09:33

    SpinalHDL定義各種各樣的復(fù)合數(shù)據(jù)類型

    通過(guò)繼承Bundle,在SpinalHDL我們可以定義各種各樣的復(fù)合數(shù)據(jù)類型。今天,關(guān)于Bundle的幾個(gè)容易被忽略的點(diǎn),一同來(lái)看下?!?/div>
    發(fā)表于 06-28 15:21

    SpinalHDL的UInt與SInt數(shù)據(jù)類型能夠進(jìn)行有符號(hào)/無(wú)符號(hào)數(shù)操作

    在Bits的基礎(chǔ)上,SpinalHDL提供了UInt、SInt數(shù)據(jù)類型,從而能夠進(jìn)行有符號(hào)/無(wú)符號(hào)數(shù)操作。變量定義/初始化UInt/SInt的初始化與Bits類型相似:邏輯操作符UInt/SInt
    發(fā)表于 07-14 14:45

    SpinalHDLBundle與普通數(shù)據(jù)類型之間的連接賦值轉(zhuǎn)換

    。》Bundle—>Bits在SpinalHDL,無(wú)論是哪種數(shù)據(jù)類型都是可以轉(zhuǎn)換成Bits類型
    發(fā)表于 10-18 14:22

    51單片機(jī)數(shù)據(jù)類型解析

    數(shù)據(jù)類型數(shù)據(jù)結(jié)構(gòu)的定義是一個(gè)值的集合以及定義在這個(gè)值集上的一組操作。數(shù)據(jù)類型包括原始類型、多元組、記錄單元、代數(shù)
    發(fā)表于 11-16 08:45 ?2.4w次閱讀
    51單片機(jī)<b class='flag-5'>中</b>的<b class='flag-5'>數(shù)據(jù)類型</b>解析

    vhdl數(shù)據(jù)類型

    VHDL的標(biāo)識(shí)符可以是常數(shù)、變量、信號(hào)、端口、子程序或參數(shù)的名字。VHDL數(shù)據(jù)類型可以分成四大類: 標(biāo)量型(SCALAR TYPE):屬單元素的最基本的數(shù)據(jù)類型,通常用于描述一個(gè)
    發(fā)表于 03-30 15:59 ?11次下載

    asBits函數(shù)如何轉(zhuǎn)換成Bits數(shù)據(jù)類型

    SpinalHDLBundle與SystemVerilog的packed struct很像,在某些場(chǎng)景下,與普通數(shù)據(jù)類型之間的連接賦值可
    的頭像 發(fā)表于 10-17 09:53 ?793次閱讀

    什么是數(shù)據(jù)類型轉(zhuǎn)換

    常用的3種數(shù)據(jù)類型:1、Python數(shù)據(jù)類型第一種:字符串(str)。 2、Python數(shù)據(jù)類型第二種:整數(shù)(int)。 3、Python數(shù)據(jù)類型第三種:浮點(diǎn)數(shù)(float)。
    的頭像 發(fā)表于 02-23 15:21 ?1731次閱讀

    什么是數(shù)據(jù)類型轉(zhuǎn)換

    數(shù)據(jù)類型轉(zhuǎn)換就是將數(shù)據(jù)(變量、數(shù)值、表達(dá)式的結(jié)果等)從一種類型轉(zhuǎn)換為另一種類型。
    的頭像 發(fā)表于 02-27 15:04 ?1354次閱讀
    什么是<b class='flag-5'>數(shù)據(jù)類型</b><b class='flag-5'>轉(zhuǎn)換</b>

    GaussDB數(shù)據(jù)類型轉(zhuǎn)換介紹

    數(shù)據(jù)類型轉(zhuǎn)換在實(shí)際應(yīng)用中非常常見。GaussDB 作為一款企業(yè)級(jí)分布式關(guān)系型數(shù)據(jù)庫(kù),在實(shí)際業(yè)務(wù)場(chǎng)景使用,也會(huì)避免不了數(shù)據(jù)類型
    的頭像 發(fā)表于 06-05 16:29 ?796次閱讀
    GaussDB<b class='flag-5'>數(shù)據(jù)類型</b><b class='flag-5'>轉(zhuǎn)換</b>介紹

    ARRAY 數(shù)據(jù)類型的變量

    要求 全局數(shù)據(jù)塊已打開。 操作步驟 要聲明一個(gè) ARRAY 數(shù)據(jù)類型的變量,請(qǐng)按以下步驟操作: 在“名稱”(Name) 列,輸入變量的名稱。 在“數(shù)據(jù)類型”列
    的頭像 發(fā)表于 07-06 11:08 ?1024次閱讀

    plc數(shù)據(jù)類型怎么理解和應(yīng)用

    PLC(可編程邏輯控制器)是一種工業(yè)自動(dòng)化設(shè)備,用于控制機(jī)械和工業(yè)過(guò)程。在PLC編程,數(shù)據(jù)類型是非常重要的概念,因?yàn)樗鼪Q定了程序數(shù)據(jù)的存儲(chǔ)和處理方式。正確理解和應(yīng)用PLC
    的頭像 發(fā)表于 12-19 11:39 ?3905次閱讀