VHDL文法 Entity宣言

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付きで呼び出されている場合は、初期値を変えても全体の動きは変わらないので要注意です。何度もデバッグでハマりました。

スポンサーリンク




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です