0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

SpinalHDL中Bundle数据类型的转换

Spinal FPGA 来源:Spinal FPGA 作者:Spinal FPGA 2022-10-17 09:51 次阅读

编 者 按

SpinalHDL中Bundle与SystemVerilog中的packed struct很像,在某些场景下,与普通数据类型之间的连接赋值可以通过asBits,assignFromBits来实现。

》Bundle—>Bits 在SpinalHDL中,无论是哪种数据类型都是可以转换成Bits类型,我们扩展Bundle类型定义的复杂数据类型也不例外,可以通过asBits函数将自定义的数据类型转换成Bits数据类型。以下面所定义的数据类型为例:

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)
  }
}
我们完全可以通过调用asBits函数将其转换成Bits类型:
val portInst=port()
valdata=portInst.asBits
生成的Verilog代码将对应:
assign data = {portInst_last,{portInst_data1,portInst_data0}};
这里与SystemVerilog中的packed struct略不相同的是,在SystemVerilog中packed struct中先定义的元素排在最高位,而在SpinalHDL Bundle中先定义的元素在转换成Bits时则是排在最低位,这与asBits函数的实现有关:

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

》Bits—>Bundle

Bits—>Bundle的转换可以通过assignFromBits来实现。在SpinalHDL中针对Bundle类型,提供了三种不同的实现:

assignFromBits(bits:Bits)—将bits整个赋值给Bundle,当bits位宽大于Bundle定义的位宽时,高位将抹去。

assignFromBits(bits:Bits,hi:Int,lo:Int)—将bits整个赋值给Bundle对应Bits的(hi down to lo),多余的位将抹去

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

在和已有的一些Verilog/SystemVerilog接口进行对接时这些API还是很有作用的,可以方便的实现接口转换以实现功能。

像下面的用法是等价的:

val dataIn=Bits(17 bits)
val portInst=port()
portInst.assignFromBits(dataIn)
等价于:
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


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

下面的这个例子展示了如果通过这些方法调用SpinalHDL中的StreamArbiter来实现两个port端口FragmentLock RR调度:

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

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1343

    浏览量

    109971
  • bundled
    +关注

    关注

    0

    文章

    4

    浏览量

    9089
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13607

原文标题:Bundle的转换

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

收藏 人收藏

    评论

    相关推荐

    GaussDB 数据类型介绍

    进行数据类型转换,以满足不同的需求。本文将以示例的形式罗列并介绍一些常见的数据类型转换方法等。  数据类型概念及特点
    的头像 发表于 06-05 16:40 1613次阅读
    GaussDB <b class='flag-5'>数据类型</b>介绍

    JAVA语言的数据类型转换

    JAVA语言的数据类型转换很多场合需要用到类型转换。例如,要把一个整型变量作为字符型变量来使用,就需要使用类型
    发表于 12-06 00:30

    关于数据类型转换的问题

    如图,最右边的反馈节点输出M序列。这个M序列的数据类型是布尔型。楼主想把M序列的数据类型转换成布尔型数组。想了好久都不知道该怎么操作。希望能有人解答。楼主不胜感激
    发表于 04-27 21:07

    怎么转换连接数据类型

    请问怎么把图二的“蓝线”转换成图一的“红色”数据类型?很急,在线等,谢谢!
    发表于 11-29 09:33

    SpinalHDL定义各种各样的复合数据类型

    通过继承Bundle,在SpinalHDL我们可以定义各种各样的复合数据类型。今天,关于Bundle的几个容易被忽略的点,一同来看下。》
    发表于 06-28 15:21

    SpinalHDL的UInt与SInt数据类型能够进行有符号/无符号数操作

    在Bits的基础上,SpinalHDL提供了UInt、SInt数据类型,从而能够进行有符号/无符号数操作。变量定义/初始化UInt/SInt的初始化与Bits类型相似:逻辑操作符UInt/SInt
    发表于 07-14 14:45

    SpinalHDLBundle与普通数据类型之间的连接赋值转换

    。》Bundle—>Bits在SpinalHDL,无论是哪种数据类型都是可以转换成Bits类型
    发表于 10-18 14:22

    51单片机数据类型解析

    数据类型数据结构的定义是一个值的集合以及定义在这个值集上的一组操作。数据类型包括原始类型、多元组、记录单元、代数
    发表于 11-16 08:45 2.4w次阅读
    51单片机<b class='flag-5'>中</b>的<b class='flag-5'>数据类型</b>解析

    vhdl数据类型

    VHDL的标识符可以是常数、变量、信号、端口、子程序或参数的名字。VHDL数据类型可以分成四大类: 标量型(SCALAR TYPE):属单元素的最基本的数据类型,通常用于描述一个
    发表于 03-30 15:59 11次下载

    asBits函数如何转换成Bits数据类型

    SpinalHDLBundle与SystemVerilog的packed struct很像,在某些场景下,与普通数据类型之间的连接赋值可
    的头像 发表于 10-17 09:53 796次阅读

    什么是数据类型转换

    常用的3种数据类型:1、Python数据类型第一种:字符串(str)。 2、Python数据类型第二种:整数(int)。 3、Python数据类型第三种:浮点数(float)。
    的头像 发表于 02-23 15:21 1743次阅读

    什么是数据类型转换

    数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型
    的头像 发表于 02-27 15:04 1361次阅读
    什么是<b class='flag-5'>数据类型</b><b class='flag-5'>转换</b>

    GaussDB数据类型转换介绍

    数据类型转换在实际应用中非常常见。GaussDB 作为一款企业级分布式关系型数据库,在实际业务场景使用,也会避免不了数据类型
    的头像 发表于 06-05 16:29 807次阅读
    GaussDB<b class='flag-5'>数据类型</b><b class='flag-5'>转换</b>介绍

    ARRAY 数据类型的变量

    要求 全局数据块已打开。 操作步骤 要声明一个 ARRAY 数据类型的变量,请按以下步骤操作: 在“名称”(Name) 列,输入变量的名称。 在“数据类型”列
    的头像 发表于 07-06 11:08 1051次阅读

    plc数据类型怎么理解和应用

    PLC(可编程逻辑控制器)是一种工业自动化设备,用于控制机械和工业过程。在PLC编程数据类型是非常重要的概念,因为它决定了程序数据的存储和处理方式。正确理解和应用PLC
    的头像 发表于 12-19 11:39 3998次阅读