企业网站seo方案,做公司网站有用吗,福田网站建设开发团队,wordpress自定义文章参数关于联合体的内容
联合体只储存一个值 联合体只存储一个元素#xff0c;但这个元素可以有多种表示方法#xff0c;每种表示可以是不同的数据类型。 联合体的声明语法类似于结构体#xff0c;联合体的成员的引用也跟结构体一样。
union{int i;int unsigned u;
}data;
...
d…关于联合体的内容
联合体只储存一个值 联合体只存储一个元素但这个元素可以有多种表示方法每种表示可以是不同的数据类型。 联合体的声明语法类似于结构体联合体的成员的引用也跟结构体一样。
union{int i;int unsigned u;
}data;
...
data.i -5;
$display(data is %d,data.i);
data.u -5;
$display(now data is %d,data.u);联合减少储存提高性能 尽管声明语法类似但是联合体和结构体却有很大不同。结构体可以储存很多值是一个名称下的变量集合。而联合体只储存一个值。联合体的一个典型应用是当一个值可能有几种不同的数据类型表示方法但是每次值使用一种类型。 自定义和匿名的联合体 同结构体一样联合体可以使用typedef来定义按这种方式定义的是自定义联合体。如果没有使用typedef就是匿名联合体。
typedef union{ //自定义联合体int i;int unsigned u;
}data_t;
data_t a,b; //data_t类型的两个变量1、非压缩联合体 非压缩联合体可以包含任意变量类型包括real类型、非压缩结构体和非压缩数组。EDA工具可以任意方式储存非压缩联合体中的值没有要求每个工具按照同样的方式来储存联合体中的不同数据类型。 非压缩联合体是不可综合的。它是一种对高层次系统和交易级建模很有用的抽象类型。因此可以在联合体中储存任何类型包括四态类型、两态类型以及像real类型这样的不可综合类型。 注意如果从非压缩联合体中读取的成员不同于上次写入的成员可能导致不确定的结果。 2、标签联合体 一个联合体可以声明为tagged
union tagged{int i;real r;
}data;标签联合体包括一个隐含标签成员 标签联合体包含一个储存“标签”的隐含成员它代表着储存数值的最后一个联合体成员的名称。当使用标签表达式将一个值储存到标签联合体中时隐含的标签自动保存关于该值被写到那个成员信息。 使用标签表达式将值储存到标签联合体中 使用标签表达式可以将一个值写入标签联合体中。标签表达式具有关键字tagged后面是成员名再后面是要储存的值。标签表达式被赋给联合体名。
data tagged i 5;//在data.i中存5并设置隐含标签使用联合体成员名可以将值从标签联合体中读出来
d_out data.i;//从联合体中读值标签联合体检测联合体使用是否一致 标签联合体要求软件工具检测联合体的使用情况如果一个值从与标签表达式值上次写入的成员不同的成员中读出就会产生错误消息。
d_out data.r;//错误成员与联合体的隐含标签不匹配使用标签表达式将值赋给标签联合体后可以使用成员名将值写到相同的联合体成员中如果指定的成员名与当前联合体标签不匹配就会产生运行期错误。
data.i 7;//写到联合体成员中成员名必须与当前联合体标签匹配3、压缩联合体 压缩联合体成员都有同样的尺寸 将联合声明为压缩联合体的方式与声明压缩结构体的方式相同。在压缩联合体中每个联合体成员的位数都必须是相同的。这保证了压缩联合体使用同样的位数进行储存而不用考虑储存的是哪个成员的值。由于有这个限制压缩联合体是可综合的。 压缩联合体只能储存整数值即由一个或多个相邻组成的值。如果压缩联合体任一个成员是四态类型这个联合体也是四态的。压缩联合体不可以包含real或shortreal变量或非压缩结构体、非压缩联合体、非压缩数组。 压缩联合体允许数据以一种格式写入。而以另一种不同的格式读取。设计时不需要特别的处理来跟踪数据是怎样储存的。这是因为压缩联合体中的数据总是使用相同的位数进行储存。
typedef struct packed{logic[15:0] source_address;logic[15:0] desination_address;logic[23:0] data;logic[7:0] opcode;
}data_packet_t;
union packed{data_pack_t packet;//压缩结构体logic[7:0][7:0] bytes;//压缩数组
}dreg;压缩的标签tagged联合体 联合体可以声明为既是压缩的有是带标签的。这种情况下联合体成员的位宽可以不同但还必须是整体类型1位或多个连续位。压缩的标签联合体只允许从与上一个标签表达式写入到联合体中的成员相匹配的同一个成员中读值。
union tagged packed{logic [15:0] short_word;logic[31 :0] word;logic[63:0] long_word;
}data_word;