systemverilog 中的解压联合
unpacked union in systemverilog
typedef union {
logic [1:0] c3;
bit [3:0] a3;
byte b3;
} pack3;
pack3 p3;
根据LRM,默认初始化是根据union的第一个成员,即上面例子中的逻辑,因此,c3分配给X,rest分配给0,但是当我在ModelSim中编译并签入对象时window 那么当我分配 p3.a3 = 4'b0010 时,a3 和 b3.Also 会有不同的结果; a3 和 b3 的值变化但不变 c3.Please 解释一下?我知道每个变量只有内存可用,所以更新任何值都会反映所有。
如果您写信给未打包联合体的一个成员并尝试读取另一个成员,则无法保证(除了在第 7.3 联合体 部分末尾提到的一项特殊规定外1800-2012 LRM)。如果要保证重叠成员的布局,则需要使用压缩联合。
typedef union {
logic [1:0] c3;
bit [3:0] a3;
byte b3;
} pack3;pack3 p3;
根据LRM,默认初始化是根据union的第一个成员,即上面例子中的逻辑,因此,c3分配给X,rest分配给0,但是当我在ModelSim中编译并签入对象时window 那么当我分配 p3.a3 = 4'b0010 时,a3 和 b3.Also 会有不同的结果; a3 和 b3 的值变化但不变 c3.Please 解释一下?我知道每个变量只有内存可用,所以更新任何值都会反映所有。
如果您写信给未打包联合体的一个成员并尝试读取另一个成员,则无法保证(除了在第 7.3 联合体 部分末尾提到的一项特殊规定外1800-2012 LRM)。如果要保证重叠成员的布局,则需要使用压缩联合。