• 検索結果がありません。

GREEN=1 YELLOW=3

ドキュメント内 SystemVerilog from Zero to One (ページ 36-45)

Enum 変数を操作する関数

(使用例)

GREEN=1

Struct データタイプ

• Structure

は幾つかのメンバーを一つのグループとして纏めたデータ・タイプ

です。各メンバーは異なるデータ・タイプを持つ事が出来ます。メンバーを個 別に参照、又は、操作する事が出来ます。グループ全体として参照する事も 出来ます。

• Structure

には

packed structure

unpacked structure

があります。

unpacked structure

default

で、修飾子

unpacked

を省きます。

• packed structure

ではメンバー全体が連続したメモリーに配置されます。

従って、structure全体を一つの数値として操作する事が出来ます。

• unpacked structure

の場合には、メンバーが連続したメモリーに配置される 保証はありません。

Struct データタイプ

( unpacked struct の使用例)

Struct データタイプ

( packed struct の使用例)

63 16 8 0

a(32ビット) b(16ビット) c(8ビット) d(8ビット)

Struct

の最初のメンバーは

MSB

に位置し、最後のメンバーは

LSB

に配置されます。

Union データタイプ

• Union

は一つのオブジェクトを異なる名称で参照する事が出来るデータ・タイ

プです。

structures

と同様に、

packed union

の概念があります。

structures

と の違いは、メンバーが同じ領域を共有する事にあります。

領域を共有する事が目的である為、各メンバーのデータ・タイプは異なります。

一見、メモリー使用量の削減効果を持つ様に思えますが、実質的には実行 上のオーバーヘッドが大きいという短所を持っています。特別な目的を持た ないのであれば、unionは使用を避けるべきデータ・タイプの一つであると思 えます。

因みに、

Java

union

データタイプの機能を備えていません。

Typedef

ユーザ固有のデータタイプを定義する事が出来ます。

この機能を利用すると、まだ存在しないデータ・タイプを暫定的に定義する事 が出来ます。相互に参照しあう二つのデータ・タイプを定義する際には、この 機能が必要になります。この機能を

forward typedef

宣言と呼びます。

C++

forward declaration

に相当します。

この章ではアレイの種類とアレイを操作する為のメソッドを解説 します。また、アレイの初期化機能についても触れます。これら の機能についての知識は簡潔なコードを書く為に必要です。

Queues、及び、associativeアレイは非常に大切な概念である

為、詳しく解説します。

UVM

のソース・コードを解析する際には、

必要な知識となります。

アレイの操作

アレイ

• Verilog

と異なり、多次元のアレイを定義する事が出来ます。

アレイには、キュー、associative arrayもあります。

• sarray[] はダイナミック・アレイの例です。

• price[string]

アレイは

associative array

の例です。

• foods[$]

、及び、

data[$]

はキューの例です。

アレイ・リテラル

キュー・リテラル

packed アレイと unpacked アレイ

( packed and unpacked arrays)

• SystemVerilog

では、名称の前に位置する次元定義を

packed array

、名称 の後に位置する次元定義を

unpacked array

と呼びます。例えば、

の定義に於いて、

[1:0][7:0]

packed array

[20]

unpacked array

です。

この場合の

packed array

は二次元ですが、一次元の

packed array

vector

とも呼ばれます。

Packed アレイ

( packed arrays)

• Packed arrays

vector

を階層的に操作する為の宣言手段です。

Packed

arrays

のビットは連続領域にとられる事が保障されています。例えば、

に於いて、

bytes

2

バイトの領域を確保しています。

bytes[2]

bytes[1]

は 物理的に連続した領域に存在します。

全体を

bytes

として参照する事が出来ます。最上位のビットを

bytes[2][7]

、最 下位のビットを

bytes[1][0]

として参照する事が出来ます。

ドキュメント内 SystemVerilog from Zero to One (ページ 36-45)

関連したドキュメント