VHDL文法 アーキテクチャ記述

  • パッケージ読み込み
  • エンティティ(Entity)宣言

に続いて

  • アーキテクチャ(Architecture)

を記述します。

エンティティ部は外部からの見た目を定義しています。
一方で、このアーキテクチャ部にはコンポーネントの動作を記述します。

書式

アーキテクチャ部は次のように記述します。

  • architecture宣言とbeginの間に各種の宣言を書き
  • beginの後に処理内容を記述する

アーキテクチャ名

アーキテクチャ名は任意に決められます。

好きなように名付けて構わないんですが、論理合成を前提とした回路を記述する場合はRTLとするケースが多いです。僕は内容に応じてbehavior, RTL, Simulationを使っています。

論理合成対象はRLT、シミュレーションに使うテストベンチはSimulationという感じです。

一つのエンティティに対して複数のarchitectureを持つこともできます。その場合、どのアーキテクチャの動作をさせるかはアーキテクチャ名で区別されます。

各種宣言

宣言の種類

  1. Signal (信号配線)
    回路の配線にあたります。
  2. Constant (定数)
    定数です。動作途中で値が変更されることがないので、固定値を記述するのによく使います。
  3. Component (下位モジュール)
    下位モジュールを接続するために、その下位モジュールのエンティティ宣言に似たものを記述します。その下位モジュールがどういうポート構成になっているかがわかります。
  4. Variable (変数)
    変数です。論理合成対象ではありません。テストベンチの記述やFunction文周辺などで使います。

各種宣言のソースの例

  • Signal, Constant, Valiable にはデータタイプの指定が必要です (std_logicやintegerなど)
  • 上記の例では、コンスタント(Constant)宣言と同時に値を代入しています
  • シグナル(Signal)も宣言時に初期値を代入できます。ですが、僕は初期リセットで値を入れるので、普段はここに代入の記述はしません。

本体

この部分に処理内容を書きます。

具体的には

  • 組み合わせ回路
  • 順序回路
  • 下位コンポーネントの呼び出し

などです。以下、簡単な説明と記述例です。

組み合わせ回路

組み合わせ回路は、クロックと同期せずに値が変化します。(非同期回路という)

組み合わせ回路には一行で書ける簡単な回路や、process文で記述する複雑な回路もあります。

順序回路

フリップフロップ(FF)やラッチを含む回路です。基本的にクロックに同期して動作します。

組み合わせ回路と同様にprocess文で記述しますが、センシティビティリスト(process文の直後のカッコ内の信号)が異なります。

順序回路では、センシティビティリストにクロックが含まれます。

非同期の順序回路ではクロック以外の信号も含まれます(例えば非同期リセット回路のリセット信号)。

下位モジュール呼び出し

現在のモジュールの下に別のモジュールを接続する記述です。
以下の例ではmax10evb_test1モジュールを呼び出して接続しています。

まとめ

  1. VHDLの記述は次の要素で構成されます
    • パッケージ呼び出し
    • エンティティ(Entity)
    • アーキテクチャ(Architecture)
  2. アーキテクチャには任意のアーキテクチャ名をつけます
    (論理合成対象ならRTLとすることが多い)
  3. アーキテクチャは、各種宣言本体の順に記述します
  4. 各種宣言では以下のものを宣言できます
    • Signal
    • Constant
    • Component
    • Variable
  5. 本体では以下のような回路を記述します
    • 組み合わせ回路
    • 順序回路
    • 下位モジュール呼び出し

掲載ソースの動作確認

掲載のソースコードは、Intel(Altera)のQuartus Prime 18.1 Lite Editionで文法チェックしています。

Xilinxでは確認していないので、もしVivadoやISEでコンパイルエラーが出ていたらコメントいただけるとうれしいです。

VHDLソースエディタ
動作確認中のテキストエディタのキャプチャ

テキストエディタは、Notepad++とAtomを使っています。

スポンサーリンク




コメントを残す

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