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

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

3天内不再提示

关于数字硬件建模SystemVerilog联合体

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-07-07 09:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

数字硬件建模SystemVerilog-联合体(union)

3af5b30c-fd8d-11ec-ba43-dac502259ad0.png

联合体(union)

联合体是一个可以有多个数据类型表示的单个存储元素,联合体的声明类似结构体,但推断出的硬件非常不同。结构体是几个变量的集合。union是单个变量,可以在不同的时间使用不同的数据类型。union可以存储的变量类型列在大括号({})之间,每个变量类型都有一个名称:

3b0a69c8-fd8d-11ec-ba43-dac502259ad0.png

在本例中,变量是data。data变量有两种可能的数据类型:名为s的有符号整数类型,或名为u的无符号整数值。

在RTL建模中,联合体的一个典型应用是,一个值可以表示为几种不同的类型,但在任何特定的时钟周期中只能表示为一种类型。例如,数据总线有时可能使用用户网络接口(UNI,User NetworkInterface)电信协议发送数据包,而在其他时间,同一数据总线可能使用网络到网络接口(NNI,Network to Network Interface)电信协议发送数据包。SystemVerilog联合体可以代表同一总线的这种双重用途。联合体的另一个用途是表示共享硬件资源,例如可以在不同时间存储不同类型数据的硬件寄存器

自定义和匿名联合体

同结构体一样, 联合体可以使用 typedef 来定义, 按这种方式定义的是自定义联合体。如果没有使用 typedef,就是匿名联合体.

3b1de534-fd8d-11ec-ba43-dac502259ad0.png

匿名联合体和自定义联合体都是可综合的,但自定义联合体在RTL建模方面有优势。自定义联合体可以是:

用于声明多个变量,如上例中的数据输入和数据输出。

用作模块端口类型。

在一个包中定义,然后在多个模块中使用。

分配和读取联合体变量

引用联合体的数据类型时,使用联合体的名称,后跟表示数据类型的名称,并用句点(.)分隔(同结构体一样)。

3b281cd4-fd8d-11ec-ba43-dac502259ad0.png

在本例中,变量数据有两种可能的数据类型,每个表示中都存储了-5。data.s数据类型将打印为-5,一个有符号整数值。data.u数据类型将打印为4294967291,一个无符号整数值。

非压缩联合体和标记的联合体

最佳做法准则4-4

在RTL建模中仅使用压缩联合体。

SystemVerilog有三种类型的联合体:非压缩联合体、压缩联合体和标签联合体,大多数综合编译器只支持压缩联合体。

大多数综合编译器不支持非压缩和标签联合体。这些联合体类型可以代表任何数据类型的存储,包括不可综合的数据类型。非压缩的联合体体和标签联合体体可用于建模测试台和高级抽象模型,但不应用于RTL建模。

通过在union关键字后添加关键字Packed来定义压缩联合体:

3b3a6e66-fd8d-11ec-ba43-dac502259ad0.png

压缩联合体是可综合的。压缩联合体对联合体可以表示的数据类型有很多限制。这些限制与硬件行为密切相关。在压缩联合体中,它只能表示向量类型,并且联合体可以存储的每个数据类型的向量宽度必须相同。这确保了无论存储值的数据类型如何,压缩联合体都将以相同的位数表示其存储。

压缩联合体允许使用一种格式写入数据,并使用另一种格式读回数据。设计模型不需要进行任何特殊处理来跟踪数据的存储方式,这是因为压缩联合体中的数据总是使用相同的位数存储。下面的示例定义了一个压缩联合体,其中一个值可以用两种方式表示:数据包(使用压缩结构体)或连续字节数组,

3b566616-fd8d-11ec-ba43-dac502259ad0.png

图4-3说明了dreg的两种数据类型是如何表示的。

图4-3:具有相同存储的两种表示形式的压缩联合体 3b6dbfa0-fd8d-11ec-ba43-dac502259ad0.png

因为联合体是压缩的,所以无论使用哪种联合体表示,信息都将使用相同的位对齐来存储。这意味着可以使用bytes格式(可能来自字节的串行输入流)加载一个值,然后使用data_packet格式读取相同的值,

通过端口将压缩联合体传递给任务和函数

自定义联合体(使用typedef定义的联合体)可以用作模块端口和任务/函数参数的数据类型。非压缩的联合体要求将相同的联合体类型用于端口的外部连接,或用于传递给任务或函数参数的外部信号。压缩联合体只能表示压缩数据类型,这允许任何向量类型用于外部连接或外部值。

示例4-6显示了一个包含结构体和联合体定义的包。示例4-7在一个简单算术逻辑单元(ALU)模型中使用了这个包,ALU可以对有符号或无符号的值进行操作,但不能同时对两者进行操作,一个标志用于指示操作数据是有符号的还是无符号的。ALU操作码、两个操作数和一个有符号标志作为单个指令字传递到ALU中,用结构体表示。ALU输出是单个值,可以表示有符号或无符号值,建模为这两种类型的并集。这允许相同的输出端口用于不同的数据类型:

示例4-6:包含结构体和联合体定义的包

//
//Packagewithunionandstructuredefinitions
//
//`begin_keywords"1800-2012"//useSystemVerilog-2012keywords
`define_4bit//use4-bitdatafortestingsynthesis
//`define_32bit//use32-bitdatawordsize
//`define_64bit//use64-bitdatawordsize
packagedefinitions_pkg;
`ifdef_4bit
typedeflogic[3:0]uword_t;
typedeflogicsigned[3:0]sword_t;
`elsif_64bit
typedeflogic[63:0]uword_t;
typedeflogicsigned[63:0]sword_t;
`else//defaultis32-bitvectors
typedeflogic[31:0]uword_t;
typedeflogicsigned[31:0]sword_t;
`endif

typedefenumlogic[2:0]{ADD,SUB,MULT,DIV}op_t;
typedefenumlogic{UNSIGNED,SIGNED}operand_type_t;

//Packedunionrepresentsavariablethatcanstore
//differenttypes
typedefunionpacked{
uword_tu_data;
sword_ts_data;
}data_t;

//Packedstructurerepresentsacollectionofvariables
//thatcanreferencedandpassedthroughportsasagroup
typedefstructpacked{
op_topcode;
operand_type_top_type;
data_top_a;
data_top_b;
}instruction_t;
endpackage:definitions_pkg
//`end_keywords
示例4-7:带结构体和联合体端口的算术逻辑单元(ALU)
//
//Modulewithstructureinputportandunionoutputport
//
//`begin_keywords"1800-2012"//useSystemVerilog-2012keywords
modulealu
importdefinitions_pkg::*;//wildcardimportthepackage
(inputlogicclk,rstN,
inputinstruction_tiw,//inputisastructure
outputdata_talu_out//outputisaunion
);
timeunit1ns;timeprecision1ns;

always_ff@(posedgeclkornegedgerstN)//asyncreset
if(!rstN)//active-low
alu_out<= '0;
   else begin: alu_operations 
     if (iw.op_type == SIGNED) begin: signed_ops 
       case (iw.opcode)
         ADD : alu_out.s_data <= iw.op_a.s_data
                                 + iw.op_b.s_data;
         SUB : alu_out.s_data <= iw.op_a.s_data
                                 - iw.op_b.s_data;
         MULT: alu_out.s_data <= iw.op_a.s_data
                                 * iw.op_b.s_data;
         DIV : alu_out.s_data <= iw.op_a.s_data
                                 / iw.op_b.s_data;
       endcase 
     end: signed_ops 
     else begin: unsigned_ops 
       case (iw.opcode)
         ADD : alu_out.u_data <= iw.op_a.u_data
                                 + iw.op_b.u_data;
         SUB : alu_out.u_data <= iw.op_a.u_data
                                 - iw.op_b.u_data;
         MULT: alu_out.u_data <= iw.op_a.u_data
                                 * iw.op_b.u_data;
         DIV : alu_out.u_data <= iw.op_a.u_data
                                 / iw.op_b.u_data;
       endcase 
     end: unsigned_ops 
   end: alu_operations 
endmodule: alu
`end_keywords 

图4-4显示了综合该示例的结果。说明了在RTL模型中使用结构体和联合体的两个重要特征:

结构体和联合体可以简洁地仿真大量功能。用更少的代码行仿真更多功能的能力是在原始Verilog中添加结构体和联合体等功能的原因之一,

当与本节所述的RTL编码准则一起使用时,联合体可以表示多路复用功能,允许多个资源(本例中的有符号和无符号加法器、减法器、乘法器和除法器)共享相同的硬件寄存器。图4-4中的圆圈代表通用算法 操作,梯形符号代表多路复用器:

图4-4:示例4-7的综合结果:具有结构体和联合体端口的ALU 3b7b6ca4-fd8d-11ec-ba43-dac502259ad0.png

3ba5825a-fd8d-11ec-ba43-dac502259ad0.jpg

SystemVerilog-结构体(一)

3bbfb29c-fd8d-11ec-ba43-dac502259ad0.jpg

SystemVerilog-结构体(二)

原文标题:SystemVerilog-联合体(union)

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

审核编辑:彭静

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

    关注

    13

    文章

    4692

    浏览量

    89543
  • 硬件
    +关注

    关注

    11

    文章

    3555

    浏览量

    68733
  • 数据输出
    +关注

    关注

    0

    文章

    19

    浏览量

    9340

原文标题:SystemVerilog-联合体(union)

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    中科曙光入选首批天津市卓越工程师培养联合体成员单位

    11月23日,天津市卓越工程师培养联合体成立仪式暨天津大学国家卓越工程师学院高质量建设发展会议在天津大学北洋园校区隆重举行。中科曙光作为联合体首批成员单位受邀出席,总裁助理杨鸿轩代表企业参会,与政府、高校及产业界代表共同见证联合体
    的头像 发表于 11-28 16:42 516次阅读

    C语言的编程技巧

    一个成员是一个未知大小的数组,适用于动态分配内存并关联一个可变长度的数组。‌ ‌3、匿名结构体和联合体‌:C语言允许在结构体或联合体中定义不带标签的内部结构体或联合体,简化代码结构。 ‌4
    发表于 11-27 06:46

    开鸿智谷加入创新联合体,共推先进制造业与人力资源服务融合发展

    为深入贯彻人才强国与制造强国战略,助力构建现代化产业体系,湖南湘江新区正式启动“人力资源服务助力先进制造业高质量发展创新联合体”(以下简称“创新联合体”)建设工作,并于11月1日在长沙人力资源服务
    的头像 发表于 11-03 17:21 1064次阅读
    开鸿智谷加入创新<b class='flag-5'>联合体</b>,共推先进制造业与人力资源服务融合发展

    元萝卜破局智能养老:携联合体攻坚场景,以“心价比”升级情绪价值

    近日,在工业和信息化部、民政部联合推动的智能养老服务机器人结对攻关与场景应用试点工作背景下,商汤科技旗下家用机器人品牌“元萝卜”成功入选试点名录,并受邀加入由润泽牵头打造的“智能养老机器人创新联合体
    的头像 发表于 09-15 11:52 269次阅读
    元萝卜破局智能养老:携<b class='flag-5'>联合体</b>攻坚场景,以“心价比”升级情绪价值

    Cubeide1.18.1在线调试改变\"现场表达式\"中的值提示找不到地址,为什么?

    from target 我新建工程,排除其他程序,只添加一个变量,依然存在这个问题。 这个问题,有时候会导致我用联合体定义的控制寄存器错乱。感觉这个版本IDE,内存调试处理的有些混乱。望能快速改进
    发表于 06-12 06:50

    Cubeide1.18.1在线调试改变\"现场表达式\"中的值提示找不到地址是怎么回事?

    from target 我新建工程,排除其他程序,只添加一个变量,依然存在这个问题。 这个问题,有时候会导致我用联合体定义的控制寄存器错乱。感觉这个版本IDE,内存调试处理的有些混乱。望能快速改进
    发表于 06-10 08:26

    Cubeide1.18.1在线调试改变\"现场表达式\"中的值提示找不到地址,怎么解决?

    from target 我新建工程,排除其他程序,只添加一个变量,依然存在这个问题。 这个问题,有时候会导致我用联合体定义的控制寄存器错乱。感觉这个版本IDE,内存调试处理的有些混乱。望能快速改进
    发表于 06-06 08:27

    Cubeide1.18.1在线调试改变\"现场表达式\"中的值提示找不到地址怎么解决?

    from target 我新建工程,排除其他程序,只添加一个变量,依然存在这个问题。 这个问题,有时候会导致我用联合体定义的控制寄存器错乱。感觉这个版本IDE,内存调试处理的有些混乱。望能快速改进
    发表于 04-27 06:18

    C语言中结构体与联合体的深度解析:内存布局与应用场景

    : 0, b: 1374389535(浮点数的二进制转换) 原理:通过联合体实现类型双关(Type Punning) 四、进阶应用与最佳实践 4.1 硬件寄存器映射 typedef struct
    发表于 04-08 09:18

    长沙新一代信息技术产教联合体正式成立,拓维信息当选理事长单位

    3月22日,“长沙新一代信息技术产教联合体成立大会暨第一届理事会议”在湖南商务职业技术学院隆重启幕。会上,长沙新一代信息技术产教联合体正式成立,拓维信息当选理事长单位,拓维信息旗下开鸿智谷当选
    的头像 发表于 03-26 17:48 866次阅读
    长沙新一代信息技术产教<b class='flag-5'>联合体</b>正式成立,拓维信息当选理事长单位

    产教新篇|长沙新一代信息技术产教联合体扬帆启航!

    在深化现代教育体系建设的主轴推动下,我国职业教育正以市域产教联合体和行业产教融合共同体为双翼,构建起教育链、人才链与产业链、创新链深度融合的新格局。2025年3月22日,“长沙新一代信息技术产教
    的头像 发表于 03-24 18:09 755次阅读
    产教新篇|长沙新一代信息技术产教<b class='flag-5'>联合体</b>扬帆启航!

    软通动力亮相福建昇腾AI产业发展论坛

    近日,福建昇腾AI产业发展论坛在厦门举办。软通动力应邀出席,并作为“福建人工智能自主创新联合体”重要成员,与华为及生态伙伴等多方机构共同宣布了联合体的成立,旨在积极布局福建省人工智能产业,培育人工智能新业态,为数字经济注入崭新活
    的头像 发表于 12-23 13:52 850次阅读

    商汤科技与多家厂商共同成立语料终端创新联合体

    近日,由中央广播电视总台、上海市人民政府共同主办的2024科创大会在上海落下帷幕。期间,商汤科技与上海库帕思科技有限公司、上海阡视科技有限公司、以及国产主流芯片等共19家厂商共同成立语料终端创新联合体
    的头像 发表于 12-16 13:46 1569次阅读

    软通动力发起精细化工与新材料行业产业链数字化转型生态联合体

    与新材料行业数智化转型高峰论坛",携手多家企业发起精细化工与新材料行业"1+1+N"产业链数字化转型生态联合体,与数家企业签订战略合作协议、达成项目合作意向。   华为云广东生态发展与运营部伙伴成功经理毛焕在致辞中指出,数智化转型是一项系统工程,需
    的头像 发表于 12-09 15:13 620次阅读
    软通动力发起精细化工与新材料行业产业链<b class='flag-5'>数字</b>化转型生态<b class='flag-5'>联合体</b>

    拓维信息参与牵头组建!长沙新一代信息技术产教联合体正式获批

    近日,由长沙市教育局和长沙市工业和信息化局联合发布的《2024年长沙市市级市域产教联合体名单》正式公布。其中,由长沙高新区麓谷产业园(长沙信息产业园)、拓维信息、湖南商务职业技术学院共同牵头组建
    的头像 发表于 12-07 01:06 1207次阅读
    拓维信息参与牵头组建!长沙新一代信息技术产教<b class='flag-5'>联合体</b>正式获批