VHDLのデータ
| オブジェクト名 | クラス名 | データタイプ名 |
|---|
| clk | signal | std_logic | | data | signal | std_logic_vector() |
クラス
- クラスはデータの役割を定義します。VHDLのデータはクラスのオブジェクトです。
| クラス | 役割 |
|---|
signal | ・ハードウェアを表す ・信号代入<=により、常時変化が反映される信号として扱う | variable | ・process(順次実行ブロック)内で利用 ・即時代入:=により、ローカル変数として扱う | constant | ・変更不可の定数 | file | ・テストベンチのtextioにてファイルを指す | alias | ・文字通り別名の定義 |
variableについてはprocessで説明します。ここでは「signalとは違う/ハードウェアじゃない」の認識でOKです。
データタイプ: スカラーの種類
- データタイプはオブジェクトが持つデータの種類や構造を定義します。まずはスカラーのデータタイプで、取り得る値の種類を見ていきましょう。
- スカラーのデータタイプは基本要素のため種類が多いです。分類すると下記4種になります。
| 種別 | スカラー型 | 値 |
|---|
| Enumeration(列挙)型(*1) | boolean
bit
std_logic | true, false
'0', '1'
'U','X','0','1','Z','W','L','H','-' | | Integer(整数)型 | integer
natural
positive | -2^31 .. 2^31-1: 整数
0, 1, 2 ...: ≧0の整数/自然数
1, 2, 3 ...: 正の整数 | | Pyhsical(物理量)型 | time | 10 ns, 5 us | | Floating(浮動小数点)型 | real
float32, float64 | 1.23
|
スカラー: Enumeration(列挙)型
| スカラー型 | 説明 | 記述例 |
|---|
boolean | boolean型/論理値
true,false | variable result : boolean := false; | bit | ロジック値
'0', '1' | constant en_flag : bit := '1'; | std_logic | ハードウェアが取り得る1bit信号値
'U','X','0','1','Z','W','L','H','-' | signal a : std_logic := 'U'; |
スカラー: Integer(整数)型
| スカラー型 | 説明 | 記述例 |
|---|
integer | 32bit整数
-2^31 〜 2^31-1 | variable deg : integer := -270; | natural | 自然数
0, 1, 2, ... | constant width : natural := 4; | positive | 正数
1, 2, 3, ... | constant init : positive := 10; |
- ハードウェアの一部として整数を利用する場合、複数bitデータになるため
subtypeを利用した範囲制限は事実上必須です。subtype byte is integer range 0 to 255; -- 8bitになる
- そしてbit幅が同じでも、異なるタイプのデータと演算する場合はキャスト(型変換)が必須です。これについては別途説明予定ですが、VHDLに暗黙の型変換はありません。
signal a : integer range 0 to 255;
signal b : unsigned(7 downto 0);
b <= a; -- エラー
b <= to_unsigned(a, 8); -- OK
a <= to_integer(b); -- OK
スカラー: Physical(物理量)型
| スカラー型 | 説明 | 記述例 |
|---|
time | テストベンチでの時間指定
fs, ps, ns, us, ms, sec, min, hr | constant CYC : time := 100 ns; |
スカラー: Floating(浮動小数点)型
realは合成対象になりませんが、暗黙の標準ライブラリ(standard)で使用できます。
- VHDL-2008 では
float32, float64が追加され、これらは合成対象です。利用にはieee.math_realパッケージを呼ぶ必要がります。
| スカラー型 | 説明 | 記述例 |
|---|
real
float32, float64 | 浮動小数点 | variable sense : float :=1.23;
|
- しかし環境制約や合成結果が肥大する問題があるため、現時点ではテストベンチのみで使用しましょう。
データタイプ: arrayの種類
- 同一タイプのスカラーデータを複数持つデータタイプがarray型です。IEEEライブラリで定義済みのデータタイプは下記になります。
| 型名 | 要素型(スカラー) | ライブラリ | 用途 |
|---|
std_logic_vector | std_logic | ieee.std_logic_1164 | 汎用ビットベクタ | bit_vector | bit | standard | 古いが軽量 | unsigned | bit | ieee.numeric_std | 符号なし整数 | signed | bit | ieee.numeric_std | 符号付き整数 | string | character | standard | テキスト ※テストベンチのみ |
データタイプ毎のリテラル
| データタイプ | 使用できるリテラル | 例 | 備考 |
|---|
boolean | boolean リテラル | true, false | 文字列 "TRUE" は不可 | bit | bit 文字リテラル | '0', '1' | 'Z' は不可 | std_logic | std_logic 文字リテラル | '0', '1', 'Z', 'X', 'U' | 9値ロジック | integer | 整数リテラル | 0, 42, -1, 16#FF# | 基数表記可 | natural | 整数リテラル(非負のみ) | 0, 10 | -1 は不可 | positive | 整数リテラル(正のみ) | 1, 100 | 0 は不可 | real | 実数リテラル | 3.14, 1.0E-3 | 合成では通常使用しない | time | 物理リテラル | 10 ns, 5 us | ns, us, ms など |
| データタイプ | 使用できるリテラル | 例 | 備考 |
|---|
string | 文字列リテラル | "HELLO" | 文字の配列 | bit_vector | ビット文字列リテラル | "0101" | 'Z' は不可 | std_logic_vector | std_logic 文字列リテラル | "01XZ" | 'U', 'W' なども可 | unsigned | ビット文字列リテラル | "1010" | 数値として扱われる | signed | ビット文字列リテラル | "1010" | 2 の補数表現 | | 任意の array 型 | 集合リテラル | (1,2,3) | 要素型に依存 | | others 指定 | others リテラル | (others => '0') | 配列全体の初期化 |
| データタイプ | 使用できるリテラル | 例 | 備考 |
|---|
record | レコードリテラル | (r => 0, g => 20, b => 30) | フィールドごとに型一致必要 |
| リテラル | 適用可能な型 | 例 | 備考 |
|---|
null | access 型、プロセス待ちなど | p <= null; | 配列や整数には不可 | | 基数表記 | integer
bit_vector
std_logic_vector | 2#1010#, 16#FF# | 配列型は要注意 (型推論が必要) |
array型リテラルの注意点
| データタイプ | "0101"の解釈 |
|---|
std_logic_vector | ビット列(2進数)として扱われる | unsigned | 数値として扱われる | signed | 2の補数として扱われる | string | 文字の配列として扱われる |
リテラルのデフォルト型
- 適用するデータタイプによってリテラルは型変換されますが、演算前はデフォルト型が決まっています。尚、表中の
othersについてはstd_logic_vectorの演算で説明します。
| リテラル | デフォルト型 |
|---|
10 | integer | 3.14 | real | 10 ns | time | 'A' | character | "HELLO" | string | "0101"(bit のみ) | bit_vector | "01XZ" | std_logic_vector | (1,2,3) | コンテキスト依存 | (others => '0') | コンテキスト依存 | null | access T |
|