AR# 51836

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

説明

このアンサーでは、Vivado 合成でサポートされる SystemVerilog の集合体データ型を説明し、コード例を紹介します。このコード例は、このアンサーの最後にあるリンクからダウンロードできます。また、このアンサーには既知の問題、コード記述事例も含まれます。
 
注記 : 各コード例は Vivado プロジェクトの作成に直接使用できます。各例に含まれる SystemVerilog コンストラクトは、各ソース ファイルのヘッダーを参照してください。

ソリューション

Vivado 合成でサポートされている SystemVerilog の集合体データ型
 
コード例は、このアンサーの最後にある表 1-1 を参照してください。
 
1. 構造
Vivado 合成では System Verilog で定義されている struct データ型の使用がサポートされています。構造とはデータの集合体で、1 度にすべて参照したり、または構造の個々のデータ メンバーにアクセスして参照したりすることができます。これは VHDL のレコードの概念に似ています。これは Vivado 合成でサポートされている typedef キーワードを使用して宣言できます。
 
構文 :
typedef struct {struct_member1; struct_member2;...struct_memberx;} structure_name;
 
例 :
typedef struct {
bit [7:0] opcode;
bit [23:0] addr;
} instruction; // named structure type
instruction IR; // define variable
....
IR.opcode = 1; // set field in IR
 
2. ユニオン
Vivado 合成では System Verilog で定義されている union データ型の使用がサポートされています。ユニオンとは複数のデータ型から成るデータ型のことです。1 度に 1 つのデータ型しか使用できません。
使い方によってデータ型が変化するようなケースで便利なものです。これは Vivado 合成でサポートされている typedef キーワードを使用して宣言できます。
 
構文 :
typedef union (union_member1; union_member2;...union_memberx;} union_name;
 
例 :
typedef union {
int i;
shortreal f;
} num; // named union type
num n; //define variable
....
n.f = 0.0; // set n in floating point format
 
3. 配列
Vivado 合成では SystemVerilog のパックされた配列およびパックされていない配列がサポートされています。
 
3.1 パックされた配列
パックされた配列とは、1 つのベクターを小分けするメカニズムを指し、配列エレメントとしてアクセスしやすくすることができるようになります。パックされた配列はオブジェクト名の前に宣言されているディメンションのことを指します。パックされた配列は、シングル ビット タイプ (bit、logic、int など)、および再帰的にほかのパックされた配列およびパックされた構造からのみ構成されます。パックされた配列はメモリに連続して配置されるようになっています。
 
例 :
logic [5:0] sig1; //packed array
 
幅があらかじめ決められているデータ型にはパックされたディメンションを宣言する必要はありません。
 
例 :
byte c2; // same as bit [7:0] c2;
integer i1; // same as logic signed [31:0] i1;
 
3.2 パックされていない配列
パックされていない配列は、パックされている配列と異なり、任意型を使用できます。パックされていない配列とは、オブジェクト名の後に宣言されたディメンションのことを指します。パックされていない配列に割り当てるとき、ソースおよびターゲットはパックされていないディメンションの数が同数の配列になっている必要があり、また各ディメンションの長さも同じである必要があります。ソースのパックされていない配列の各エレメントをターゲット側の対応エレメントに割り当てると、パックされていない配列への割り当てが行われます。パックされていない配列はメモリには連続して配置されません。
 
例 :
logic sig2 [5:0]; //unpacked array
 
集合体データ型のコード例
表 1-1
コード例の名前 使用されているコンストラクト
 aggregate_data_types_example1.zip
  • parameter
  • always procedural block
  • block statements
  • operators : && , unary
  • unpacked array
 aggregate_data_types_example2.zip
  • parameter
  • always procedural block
  • block statements
  • operators : && , unary
  • packed array
 aggregate_data_types_example3.zip
  • data type :logic
  • always_ff procedural block
  • struct
  • operators : +
 data_types_example4.zip
  • data type :logic
  • always_ff procedural block
  • union
  • operators : ==

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
aggregate_data_types_example1.zip 1 KB ZIP
aggregate_data_types_example2.zip 1 KB ZIP
aggregate_data_types_example3.zip 1 KB ZIP
aggregate_data_types_example4.zip 1007 Bytes ZIP

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

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

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