構文 - Shinichi0713/hard-ware GitHub Wiki

VHDLにおける**アーキテクチャ(architecture)**は、エンティティで定義した外部インターフェースの内部動作や回路構成を記述する部分です。
エンティティが「箱の外観」だとすると、アーキテクチャは「箱の中身(動作や構造)」を記述します。


基本構文

architecture アーキテクチャ名 of エンティティ名 is
    -- (必要なら)内部信号などの宣言
begin
    -- 回路の動作や構造を記述
end アーキテクチャ名;
  • アーキテクチャ名:任意の名前(例:behavioralrtlstructural など)
  • エンティティ名:対象となるエンティティの名前

記述方法の主な種類

  1. 動作記述(behavioral)
    • processif文などで**動作(アルゴリズム)**を記述
  2. 構造記述(structural)
    • 複数のコンポーネント(下位回路)を接続して構成する

例1:2入力ANDゲート(動作記述)

entity and_gate is
    port (
        a : in std_logic;
        b : in std_logic;
        y : out std_logic
    );
end and_gate;

architecture behavioral of and_gate is
begin
    y <= a and b;
end behavioral;
  • y <= a and b; のように、シグナル代入文で動作を記述

例2:8ビット加算器(プロセス文を使った記述)

entity adder8 is
    port (
        a   : in  std_logic_vector(7 downto 0);
        b   : in  std_logic_vector(7 downto 0);
        sum : out std_logic_vector(7 downto 0)
    );
end adder8;

architecture rtl of adder8 is
begin
    process(a, b)
    begin
        sum <= std_logic_vector(unsigned(a) + unsigned(b));
    end process;
end rtl;
  • process文内で信号の変化に応じて動作を記述

例3:構造記述(下位回路を接続)

architecture structural of top_module is
    component and_gate
        port(a, b: in std_logic; y: out std_logic);
    end component;

    signal s1, s2, s3: std_logic;
begin
    u1: and_gate port map(a => s1, b => s2, y => s3);
    -- 他のコンポーネント接続も同様に記述
end structural;

ポイント

  • エンティティで宣言した入出力端子を使って中身(動作や構造)を記述します。
  • アーキテクチャ名は自由ですが、behavioralrtlがよく使われます。
  • 複数のアーキテクチャを1つのエンティティに対して記述することも可能です(切り替えて使うこともできます)。

まとめ

  • アーキテクチャは「中身(動作や構造)」を記述する部分
  • エンティティ名と対応させて記述
  • 動作記述・構造記述など、用途に応じて使い分ける