packed union相比unpacked union最大的一个区别就是,在packed union中,所有成员的大小必须相同,这就保证了不管union中存储了哪一个成员,最终这个union的大小是一样的。也正是加了这个限制,所以packed union是可综合的。
类似于packed struct,我们可以对这个union整体进行算法、切分等运算。
typedef union packed {
int a;
bit [31:0] c;
} data;
上面的union声明加入了packed关键字。因为两个成员的大小相同:“int”是32位,“bit [31:0] c”是32位。所以声明为unpacked union是没问题的。
typedef union packed {
logic [9:0] data;
struct packed {
bit p1;
bit [2:0] p2;
bit [1:0] p3;
bit p4;
bit [2:0] p5;
} p_modes;
} myUnion
myUnion Union1;
在上面的union中有2个成员,分别都是10比特大小 “struct” “p_modes” 和“data” ,在物理内存中分配如下: