pp.109-111
今度は全加算器を作ってみる。
前回作ったhalf_adder.vhdをfull_adder.vhdと同じフォルダに入れておき、その半加算器をfull_adder.vhd側でコンポーネントとして宣言し、それを2つ実体化して連結する。
library IEEE; use IEEE.std_logic_1164.all; -- 全加算器の入出力を宣言する。 entity full_adder is port ( A : in std_logic; B : in std_logic; CI : in std_logic; S : out std_logic; CO : out std_logic ); end full_adder; -- 回路を記述する。 architecture RTL of full_adder is -- 半加算器をコンポーネントとして宣言する。 -- half_adder.vhdをfull_adder.vhdと同じフォルダに配置しておく。 component half_adder -- isは不要。 port ( A : in std_logic; B : in std_logic; S : out std_logic; CO : out std_logic ); end component; -- 内部信号を定義する。 signal S_TMP : std_logic; signal CO_TMP1 : std_logic; signal CO_TMP2 : std_logic; begin -- 半加算器をC1として実体化し、それを全加算器の入出力または内部信号に接続する。 -- 半加算器C1の入出力 => 全加算器の入出力または内部信号 C1 : half_adder port map ( A => A, B => B, S => S_TMP, CO => CO_TMP1 -- 最後の要素にカンマは不要。 ); -- 半加算器をC2として実体化し、それを全加算器の入出力または内部信号に接続する。 -- 半加算器C2の入出力 => 全加算器の入出力または内部信号 C2 : half_adder port map ( A => S_TMP, B => CI, S => S, CO => CO_TMP2 -- 最後の要素にカンマは不要。 ); -- 全加算器の出力COの論理式を定義する。 CO <= CO_TMP1 or CO_TMP2; end RTL;