pp.111-114
今度は、前回作った全加算器を連結して4ビット加算器を作ってみる。ビット0だけはキャリーインが不要なので半加算器にする。
7LEを消費した。
library IEEE; use IEEE.std_logic_1164.all; -- 4ビット加算器の入出力を宣言する。 entity adder_4bit is port( AIN : in std_logic_vector(3 downto 0); -- バスは~_vector(MSB downto LSB)で指定する。 BIN : in std_logic_vector(3 downto 0); SUM : out std_logic_vector(4 downto 0) -- キャリーアウトするので5ビット幅 ); end adder_4bit; -- 4ビット加算器の回路を記述する。 architecture RTL of adder_4bit is -- 半加算器をコンポーネントとして宣言する。 component half_adder port( A : in std_logic; B : in std_logic; S : out std_logic; CO : out std_logic ); end component; -- 全加算器をコンポーネントとして宣言する。 component full_adder port( A : in std_logic; B : in std_logic; CI : in std_logic; S : out std_logic; CO : out std_logic ); end component; -- 内部信号を定義する。 signal CO_TMP0 : std_logic; signal CO_TMP1 : std_logic; signal CO_TMP2 : std_logic; begin -- 半加算器を1つ実体化して、 --「半加算器の入出力」=>「4ビット加算器の入出力または内部信号」という形で接続する。 C1 : half_adder port map( A => AIN(0), -- インデックスは[]ではなく() B => BIN(0), S => SUM(0), CO => CO_TMP0 ); -- 全加算器を3つ実体化して、 --「全加算器の入出力」=>「4ビット加算器の入出力または内部信号」という形で接続する。 -- 宣言したのと同じ順番に記述するのであれば「4ビット加算器の入出力または内部信号」だけを記述するのでもよい。 C2 : full_adder port map(AIN(1), BIN(1), CO_TMP0, SUM(1), CO_TMP1); C3 : full_adder port map(AIN(2), BIN(2), CO_TMP1, SUM(2), CO_TMP2); C4 : full_adder port map(AIN(3), BIN(3), CO_TMP2, SUM(3), SUM(4) ); end RTL;
今、0xA + 9 = 0b1 0011を計算している。