SystemVerilogの構造体
SystemVerilogの構造体を試してみた。(Cなどと同様に構造体(struct)とは別に共用体(union)もあるみたい。)構造体を宣言する際にpacked形式かunpacked形式か定義する(デフォルトはunpacked形式)。構造体をpacked形式で定義すると、構造体のフィールド単位でのデータの操作に加えてビット単位でのデータの操作も可能になる(記述例の「assign fp_out = fp1;」を参照)。
構造体の書式
書式:構造体の定義
typedef struct 形式{ データ型 [ビット幅] フィールド名; }構造体名;
書式:構造体のフィールドへのアクセス
信号名.フィールド名;
構造体の記述例
module struct_exp(fp1, sigh_o, exp_o, frac_o,fp_out); /* Definition of structure */ typedef struct packed{ logic sigh; logic [7:0] exp; logic [22:0] frac; }fp_type; input fp_type fp1; output sigh_o; output [7:0] exp_o; output [22:0] frac_o; output [31:0] fp_out; /* Access structure field (StructureName.FieldName) */ /* フィールドごとにデータを出力する */ assign sign_o = fp1.sigh; assign exp_o = fp1.exp; assign frac_o = fp1.frac; /* データをまとめて出力する */ /* fp_typeがpacked形式でなければerror */ assign fp_out = fp1; endmodule