目次[隠す]
- 1. Entity 宣言
- 2. エンティティ名
- 3. ポート (Port)
- 4. ジェネリック (Generic)
VHDLソースの構造の説明第2弾。
パッケージ読み込みに続いて、エンティティ宣言です。
Entity 宣言
VHDLソースでパッケージ読み込みの次の部分です。
上記は”max10evb_test1“のエンティティ宣言です。
Entity宣言は、各コンポーネントの外部とのインターフェース部を定義するものです。ポートなどの外部からの見た目を定義するイメージです。
実際によく記述するのは、ポート文(Port)とジェネリック文(Generic)と思います。
ちなみに、 “Entity” の日本語訳は、「実在、存在、実在物、実体、本体、自主独立体」だそうです。ネット上の英和辞典より。
エンティティ名
エンティティ名は任意に決めることができます(例では “max10evb_test1”)。
ただし、次の条件があります。
- 使用できるのは、英数字(aからzおよびAからZ)、数字(0から9)、アンダーバー(_)
- 先頭は英数字
- アンダーバーの連続はできない
- 最後の文字はアンダーバー以外
- VHDLの予約語は使用できない (参考: Xilinxサイトの予約語一覧)
ポート (Port)
外部と接続する端子を定義します。
- ポート名: 入出力の端子名
(名前の付け方はエンティティ名と同じ) - 方向: in, out, inout, bufferが指定できます
- データタイプ: 通常はstd_logic_vectorかstd_logicを指定します
- 信号種別: busとregisterを指定することができるそうです。
今のところ僕は使わないので割愛。ソースに書かなくてもOK。
方向
ポートが入力なのか出力なのかを指定します。
outを指定するとその信号を他の信号に代入できないので注意。コンパイルエラーになります。
方向指定 | 説明 |
---|---|
in | 入力であることを指定 |
out | 出力であることを指定 内部で値を利用できない |
inout | 入出力であることを指定 |
buffer | 出力であることを指定 内部で値を再利用できる |
データタイプ
通常はIEEE1164-1993で定義されたstd_logicタイプを指定します。VHDLで定義されているintegerなども指定できるけど見かけないです。
- バスではない1ビットの信号は std_logic
- バスは std_logic_vector(バス幅指定)
バス幅の指定
std_logic_vectorのバス幅の指定は
- downtoを使って「11 downto 0」
- toを使って「0 to 11」
の2通りの書き方があります。僕はdowntoを使っています。
どちらを使っても問題ないですが、混在だけはやめましょう。
ジェネリック (Generic)
Genericを使うと数値などを外部からEntityに渡すことができます。
コンポーネント内では、Genericで数値やロジック値を変数のように宣言しておくことができます。C言語のプリプロセッサに近いイメージです。
Generic宣言したものはEntityやArchitectureの中で使うことができます。PortやSignalのビット幅を可変にするためによく使います。
記述方法はポートとほぼ同じです。
Genericのデータタイプには、std_logic/std_logic_vectorだけでなくintegerも普通に使います。
integerを使った信号をstd_logic_vectorに代入するときは、データタイプの変換が必要です。
データタイプの変換には、std_logic_arithパッケージに含まれるCONV_std_logic_vectorを使います。
Genericの初期値
宣言において初期値を指定します。
上位モジュールから呼び出される際にGeneric mapが省略された場合、この初期値が使われます。
逆にGeneric map付きで呼び出されている場合は、初期値を変えても全体の動きは変わらないので要注意です。何度もデバッグでハマりました。
コメントを残す