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】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

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

    关注

    12

    文章

    3856

    浏览量

    84661
  • 硬件
    +关注

    关注

    11

    文章

    2922

    浏览量

    64779
  • 数据输出
    +关注

    关注

    0

    文章

    14

    浏览量

    9168

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

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

收藏 人收藏

    评论

    相关推荐

    天津车联网技术创新联合体,正式成立!

    3月22日,天津经纬恒润有限公司携手12家京津冀三地优质企业及高校共同成立的车联网技术创新联合体举行揭牌仪式。大会介绍了各成员单位的业务情况、研发计划和2024年度联合体的整体工作计划,为联合体
    的头像 发表于 03-26 10:00 284次阅读
    天津车联网技术创新<b class='flag-5'>联合体</b>,正式成立!

    天津经纬携优质企业及高校成立的车联网技术创新联合体举行揭牌仪式

    3月22日,天津经纬恒润有限公司携手12家京津冀三地优质企业及高校共同成立的车联网技术创新联合体举行揭牌仪式。
    的头像 发表于 03-25 10:22 184次阅读
    天津经纬携优质企业及高校成立的车联网技术创新<b class='flag-5'>联合体</b>举行揭牌仪式

    华为联合24家企事业单位发起“大模型应用产业联合体

    华为联合24家企事业单位发起“大模型应用产业联合体” 据央视《新闻联播》报道 日前,华为联合智谱AI、医渡科技、百川智能、中国科学院自动化研究所、中软国际、首都在线、第四范式、格灵深瞳、中科
    的头像 发表于 03-02 15:55 1028次阅读

    北京24家企事业单位组建&quot;大模型应用产业联合体&quot; 

    据悉,此联合体旨在利用华为鲲鹏硬件底座与软件底层资源,推动人工智能产业生态合作,确立相关行业标准,并实现人工智能产业的快速升级。
    的头像 发表于 03-01 14:44 367次阅读

    思必驰入选“2023年度江苏省创新联合体建设试点”名单

    近日,江苏省科技厅公布了2023年度江苏省创新联合体拟建设试点名单,其中,由思必驰科技股份有限公司(以下简称:思必驰)牵头组建的江苏省人工智能语言计算创新联合体成功入选,也是全省5家省创新联合体建设试点之一。
    的头像 发表于 01-22 13:47 463次阅读

    优必选科技参与成立“人形机器人创新发展联合体

    在2023年的一场足式、人形机器人生态峰会上,一个名为“移动机器人产业联盟人形机器人创新发展联合体”的全新组织正式亮相。作为人形机器人行业的佼佼者,优必选科技不仅积极参与,更是与其他11家在人形机器人产业链上具有代表性的企业共同发起了这一联合体
    的头像 发表于 12-29 15:03 388次阅读

    【喜讯】芯盾时代当选“北京市高级别自动驾驶示范区智能网联汽车市域产教联合体”理事单位

    近日,北京市高级别自动驾驶示范区智能网联汽车市域产教联合体(以下简称“产教联合体”)成立大会在北京经开区举行,由66家政产学研单位共同组成的产教融合平台正式成立。芯盾时代作为产教联合体中唯一的业务
    的头像 发表于 12-22 14:40 202次阅读
    【喜讯】芯盾时代当选“北京市高级别自动驾驶示范区智能网联汽车市域产教<b class='flag-5'>联合体</b>”理事单位

    科沃斯组建的苏州市机器人前沿智能技术创新联合体成功获批

    近日,苏州市科技局公示了2023年度第二批(总第四批)苏州市创新联合体立项名单,由科沃斯机器人股份有限公司牵头组建的苏州市机器人前沿智能技术创新联合体成功获批。
    的头像 发表于 11-28 09:28 978次阅读

    不动产数字化创新联合体成立,中软国际助推行业应用现代化

    10月25日,在2023年中国程序员节“ 应用现代化发展 ”论坛上,应用现代化产业联盟 不动产数字化创新联合体 正式成立,中软国际作为应用现代化产业联盟首批成员、创新联合体联合发起单位
    的头像 发表于 10-26 09:15 265次阅读
    不动产<b class='flag-5'>数字</b>化创新<b class='flag-5'>联合体</b>成立,中软国际助推行业应用现代化

    北京集成电路产教联合体等入选!教育部公布首批市域产教联合体名单

    建设市域产教联合体是全面贯彻党的二十大精神,加强职业教育的适应性和吸引力的重要举措,也是深化产业——教育的融合,地区经济发展的重要途径,是为人民服务,教育链、人才链、产业链、创新链紧密结合的重要载体。
    的头像 发表于 10-11 14:13 649次阅读
    北京集成电路产教<b class='flag-5'>联合体</b>等入选!教育部公布首批市域产教<b class='flag-5'>联合体</b>名单

    结构体struct和联合体union的区别?

    结构体struct和联合体union的区别?
    发表于 10-11 08:21

    易华录发布数据资产评估与入表服务联合体解决方案

    在9月8日举办的数据资产入表服务联合体发布会上, 易华录与中企华、普华永道中国、中国光大银行、北京大成律师事务所、电科网安、北京国际大数据交易所、深圳数交所、贵阳大数据交易所、郑州数据交易中心、开放
    的头像 发表于 09-12 19:25 795次阅读

    芯驰科技加入湖北省车规级芯片产业技术创新联合体

    7月23日,湖北省车规级芯片产业技术创新联合体2023年第一次大会暨创新技术论坛在武汉经开区召开。应东风汽车邀请,芯驰科技出席大会并正式加入创新联合体,与成员单位共研共创“生态圈”,为智能网联汽车行业发展贡献力量。
    的头像 发表于 07-26 10:55 670次阅读

    C语言联合体的巧妙运用

    联合体(Union)是C语言中的一种复合类型,它允许在同一内存区域存储多个不同的数据类型的成员(member),但只能同时存在其中一个成员。
    发表于 06-21 10:59 1165次阅读

    看一下结构体、联合体结合使用在C语言与嵌入式中的一些实用技巧

    结构体、联合体是C语言中的构造类型,结构体我们平时应该都用得很多。但是,对于联合体,一些初学的朋友可能用得并不多,甚至感到陌生。
    发表于 05-08 10:19 3897次阅读
    看一下结构体、<b class='flag-5'>联合体</b>结合使用在C语言与嵌入式中的一些实用技巧