構文 - Shinichi0713/hard-ware GitHub Wiki
VHDLにおける**アーキテクチャ(architecture)**は、エンティティで定義した外部インターフェースの内部動作や回路構成を記述する部分です。
エンティティが「箱の外観」だとすると、アーキテクチャは「箱の中身(動作や構造)」を記述します。
基本構文
architecture アーキテクチャ名 of エンティティ名 is
-- (必要なら)内部信号などの宣言
begin
-- 回路の動作や構造を記述
end アーキテクチャ名;
- アーキテクチャ名:任意の名前(例:
behavioral
、rtl
、structural
など) - エンティティ名:対象となるエンティティの名前
記述方法の主な種類
- 動作記述(behavioral)
process
やif
文などで**動作(アルゴリズム)**を記述
- 構造記述(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;
ポイント
- エンティティで宣言した入出力端子を使って中身(動作や構造)を記述します。
- アーキテクチャ名は自由ですが、
behavioral
やrtl
がよく使われます。 - 複数のアーキテクチャを1つのエンティティに対して記述することも可能です(切り替えて使うこともできます)。
まとめ
- アーキテクチャは「中身(動作や構造)」を記述する部分
- エンティティ名と対応させて記述
- 動作記述・構造記述など、用途に応じて使い分ける