AR# 51327

Vivado 合成のデザイン アシスタント - SystemVerilog データ型のサポート

説明

このアンサーでは、Vivado 合成でサポートされるさまざまな SystemVerilog データ型を説明し、コード例を示します。これらのコード例は、このアンサーの最後に添付されています。このアンサーには、既知の問題、適切なコード記述に関する情報も含まれます。

注記 : 各コード例は Vivado プロジェクトを作成するのに直接使用できます。各例に含まれる SystemVerilog コンストラクトは、各ソース ファイルのヘッダーを参照してください。

ソリューション

Vivado 合成でサポートされている SystemVerilog のデータ型です。

次は、Vivado 合成でサポートされる SystemVerilog のデータ型です。データ型のコード例については、このアンサーの最後にある表 1-1 を参照してください。

1. 整数データ型

Vivado 合成は、次の整数 SystemVerilog データ型をサポートしています。

  • shortint : 2 値の 16 ビット符号付き整数
  • int : 2 値の 32 ビット符号付き整数
  • longint : 2 値の 64 ビット符号付き整数
  • byte : 2 値の 8 ビット符号付き整数
  • bit : 2 値のユーザー定義のベクター サイズ
  • logic : 4 値のユーザー定義のベクター サイズ
  • reg : 4 値のユーザー定義のベクター サイズ
  • integer : 4 値の 32 ビット符号付き整数
  • time : 4 値の 64 ビット符号なし整数

logic データ型は、Verilog の reg 型に相当しますが、reg データ型よりも機能があります。logic データ型は、ポート出力の assign ブロックで駆動できるほか、手続きブロック内に存在することもできます。このため、logic は通常 Verilog で使用される reg および wire の代わりに使用できます。

logic a, a1, a2;
assign a = b ^ c;
always @ (c or d) a1 = c + d;
mymodule module(.out(a2), .in(xyz));

2. 実数

Vivado 合成は、次の実数型をサポートします。

  • real : C の double 同様
  • shortreal : C の float 同様
  • realtime : real と同一

ただし、Vivado 合成では定数実数型のデータしかサポートされていません。たとえば、次のコードでは「[Synth 8-502] non-constant real-valued expression is not supported」というエラーが発生します。

input real r;
input int a;
output int y;

always_comb
y = a + int'(r);

3. void データ型

void 型はストレージがないことを表し、値を返さない関数を定義するために使用できます。

4. ユーザー定義型

Vivado 合成は、typedef キーワードを使って定義されるユーザー定義型をサポートします。

typedef data_type type_identifier {size};

または

typedef [enum, struct, union] type_identifier;

5. enum データ型

Vivado 合成では enum データ型がサポートされます。enum データ型を使用すると、数量を示す値を名前に付けることができます。実際の値はデフォルトで 0 から始まって、増加していきます。列挙する値をユーザーが選択することもできます。enum データ型は厳密に型指定されています。enum データ型は定義済みの定数名か別の同一の enum 型にのみ割り当てることができます。

typedef enum { circle, ellipse, freeform } ClosedCurve;
ClosedCurve a, b, c, d;
parameter int e = 2;

assign a = 2; //illegal, must assign a label name
assign b = ellipse; //legal
assign c = e; //illegal, must assign an identical enum type
assign d = ClosedCurve'(2); //legal, SystemVerilog requires to explicitly cast the value when trying to store integer value in an enum.

6. 定数

SystemVerilog および Vivado 合成は、次のエラボレーション時定数をサポートします。

  • parameter : 元の Verilog 規格と同じであり、同じように使用できます。
  • localparam : parameter に類似していますが上位のモジュールや defparam で上書きすることはできません。
  • const : グローバル定数であり、エラボレーションの最後に修正されます。
    const bit TRUE = 1
  • SystemVerilog にはもう一つ specparam と呼ばれる定数型があり、指定ブロックで遅延値やタイミング値の指定に使用します。この値は Vivado 合成ではサポートされていません。

7. type 演算子

SystemVerilog では、データ型をパラメーター化できます。これはモジュール内の parameter 文でデータ型を定義することで、モジュールをインスタンシエートする際にパラメーターを変更するだけで異なるデータ型を使用できるようになります。次に例を示します。

module my_mod #(parameter type my_param = int)
(//inputs and outputs);
my_param my_sig; //this declares a signal called my_sig that is of type int
......
endmoddule


上記のレベルでは、my_mod を次のようにインスタンシエートできるため有用です。
my_mod #(.my_param(shortint)) u0 (<port names>);

8. キャスティング

SystemVerilog 内で 1 つのデータ型の値を別のデータ型に割り当てると不正となります。キャスティングは、あるデータ型を別のデータ型に変換するのに使用します。

  • <type>'(<expression>) : 記述を別のデータ型に型変換する
  • <size>'(<expression>) : 記述をベクター サイズに型変換する
  • <sign>'(<expression>) : 記述を符号付きまたは符号なしに型変換する

各例では、コードとデータ型を実証しています。

表 1-1

コード例の名前 データ型

data_types_example1.zip

  • ユーザー定義のデータ型
  • void データ型
  • logic データ型
  • enum データ型

data_types_example2.zip

  • shortreal、realtime、real データ型
  • const データ型
  • int、longint データ型
  • キャスティング

data_types_example3.zip

  • logic データ型
  • localparam
  • enum データ型
data_types_example4.zip
  • parameter
  • type 演算子

 

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
data_types_example2.zip 1 KB ZIP
data_types_example3.zip 1 KB ZIP
data_types_example4.zip 1 KB ZIP
data_types_example1.zip 2 KB ZIP

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
51360 Vivado 合成のデザイン アシスタント - SystemVerilog のサポート N/A N/A
AR# 51327
日付 04/15/2013
ステータス アクティブ
種類 ソリューション センター
ツール