SV
struct
// 名無しstruct 変数定義
struct { bit [7:0] opcode; bit [23:0] addr ; } IR ;
// 名前つき struct
typedef struct { /* same as above */ } instruction;
instruction IR;
struct packed signed { /* ... */ } pack1 ;
// メンバー全部 signed でないといけない
struct packed unsigned { logic a; integer b; } pack2;
// メンバー全部 unsigned でないといけない
typedef struct packed { /* ... */ } s_st;
// デフォルトは unsigned
typedef struct {
int addr = 2 + constant;
byte data = '{4{1}};
} packet1;
// 明示的な代入
packet1 p1 = ' { 5, '{1,1,1,1} };
struct {
bit [7:0] opcode;
bit [23:0] addr ;
} IR ; // 変数名
struct {
// ...
} IR = ' { 5, 2 } ; // 初期化
struct packed {
// ...
} IR ; // pack型
struct packed {
// ...
} [7:0] IR ;
struct {
// ...
} IR [P_NUM] ; // 配列
struct_union [ packed [ signing ] ] { struct_union_member { struct_union_member } } { packed_dimension }
struct_union_member :=
{ attribute_instance } [ random_qualifier ] data_type_or_void list_of_variable_decl_assignments ;
struct_union := struct | union [ tagged ]
random_qualifier ::= rand | randc
data_type_or_void ::= data_type | void