4

数値でenumを設定したい。次のコードは SystemVerilog に適していますか?

`define DEC_ADDR   32'hC001CAFE

typedef enum bit [31:0] {
  ILLEGAL_ADDR_0=0,
  DEC_ADDR=`DEC_ADDR
} my_addr_e;

module tb;

initial begin

  my_addr_e addr_name;
  bit [31:0] reg_addr;

  reg_addr = `DEC_ADDR;
  addr_name = reg_addr; // PROBLEM

end

endmodule

EDA Playground の完全なコードは次のとおりです: http://www.edaplayground.com/s/4/219

4

1 に答える 1

9

技術的に言えば、列挙型をその数値で設定することは、正当な SystemVerilog ではありません。SystemVerilog は厳密に型指定された言語であるため、列挙型はその名前付きの値で設定する必要があります。

とはいえ、一部のシミュレーターでは、数値で列挙型を設定できます。

上記のコードは、静的キャストを追加することで修正できます。

addr_name = my_addr_e'(reg_addr);
于 2013-10-10T14:44:13.057 に答える