1

これは説明用の例です。SystemVerilog では、配列割り当てパターンと構造体割り当てパターンの構文があります。ここでのユニオン構造がパックされているかアンパックされているかに関係なく、合成可能かどうかに関係なく、割り当てパターンの有効な使用法ですか? はいの場合、 union にはどのような値を指定する必要がありますxか?

typedef struct {
  int a;
  byte b;
  union packed {
      int c;
      bit [31:0] d;
  } x;
} S;

module top (s);
  output S s;
  assign s = '{int:2, default:1};
endmodule

いいえの場合、アンパックされた構造のフィールドごとに初期値を指定する必要があるということですか?

initial begin
  s.a = 2;
  s.b = 1;
  s.x.c = 2;
end
4

2 に答える 2

2

割り当てられた値を出力するためにコードを少し変更しました。

typedef struct {
  int a;        
  byte b;       
  union packed {
      int c;
      bit [31:0] d;
  } x; 
} S;

module top (s);
  output S s;
  assign s = '{int:2, default:1};

  initial begin
    #10
        $display ("s.a = %d, s.b = %h, s.x.c = %d, s.x.d = %h", s.a, s.b, s.x.c, s.x.d);
  end 
endmodule

以下は、ncsim の結果です。

s.a =           2, s.b = 01, s.x.c =           1, s.x.d = 00000001

そしてvcsから:

s.a =           2, s.b = 01, s.x.c =           1, s.x.d = 00000001

これがあなたの質問に答えることを願っています。

于 2013-02-17T01:05:40.443 に答える