田中太郎
共用体についてまとめます
使い方
共用体は変数のビットを共用します
以下のように定義します
union {
<型> <変数名>;
<型> <変数名>;
} <構造体名>;
または、typedefを使用して以下のように定義します
typedef union {
<型> <変数名>;
<型> <変数名>;
} <型名>;
<型名> <構造体名>;
構造体の要素には以下のようにアクセスします
<構造体名>.<変数名>
サンプルコード
sample1.sv
module tb;
union {
bit [7:0] all;
bit [1:0][3:0] div;
} a;
initial begin
a.all = 8'b00100001;
$display("%b", a.all);
$display("%b", a.div[1]);
$display("%b", a.div[0]);
$finish;
end
endmodule
// 出力
// 00100001
// 0010
// 0001
sample2.sv
module tb;
typedef union {
bit [7:0] all;
bit [1:0][3:0] div;
} a_t;
initial begin
a_t a;
a.all = 8'b00100001;
$display("%b", a.all);
$display("%b", a.div[1]);
$display("%b", a.div[0]);
$finish;
end
endmodule
// 出力
// 00100001
// 0010
// 0001
sample3.sv
module tb;
union {
bit [3:0] unsigned_data;
bit signed [3:0] signed_data;
} a;
initial begin
a.unsigned_data = 4'b0011;
$display("%d", a.unsigned_data);
$display("%d", a.signed_data);
a.unsigned_data = 4'b1100;
$display("%d", a.unsigned_data);
$display("%d", a.signed_data);
$finish;
end
endmodule
// 出力
// 3
// 3
// 12
// -4
まとめ
共用体の使い方についてまとめました
コメント