k0b0's record.

Computer Engineering, Arts and Books

SystemVerilogの構造体(struct)を使ってみる

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