このアンサーでは、Vivado 合成でサポートされるさまざまな SystemVerilog データ型を説明し、コード例を示します。これらのコード例は、このアンサーの最後に添付されています。このアンサーには、既知の問題、適切なコード記述に関する情報も含まれます。
注記 : 各コード例は Vivado プロジェクトを作成するのに直接使用できます。各例に含まれる SystemVerilog コンストラクトは、各ソース ファイルのヘッダーを参照してください。
Vivado 合成でサポートされている SystemVerilog のデータ型です。
次は、Vivado 合成でサポートされる SystemVerilog のデータ型です。データ型のコード例については、このアンサーの最後にある表 1-1 を参照してください。
1. 整数データ型
Vivado 合成は、次の整数 SystemVerilog データ型をサポートしています。
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 合成は、次の実数型をサポートします。
ただし、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 合成は、次のエラボレーション時定数をサポートします。
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 つのデータ型の値を別のデータ型に割り当てると不正となります。キャスティングは、あるデータ型を別のデータ型に変換するのに使用します。
各例では、コードとデータ型を実証しています。
表 1-1
コード例の名前 | データ型 |
---|---|
data_types_example1.zip |
|
data_types_example2.zip |
|
data_types_example3.zip |
|
data_types_example4.zip |
|
タイトル | サイズ | ファイルタイプ |
---|---|---|
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 |
ステータス | アクティブ |
種類 | ソリューション センター |
ツール |