VHDLで全加算器を作る

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;

f:id:ti-nspire:20201218082746p:plain:h300 f:id:ti-nspire:20201218102842j:plain:h300