library ieee;
use ieee.std_logic_1164.all;
entity test_adder4 is
end test_adder4;
architecture arch of test_adder4 is
component adder4
port (
a, b: in std_logic_vector(3 downto 0);
ci: in std_logic;
co: out std_logic;
s: out std_logic_vector(3 downto 0));
end component;
for i0: adder4 use entity work.adder4(arch);
signal a, b: std_logic_vector(3 downto 0);
signal ci: std_logic;
signal co: std_logic;
signal s: std_logic_vector(3 downto 0);
begin
i0: adder4 port map (a=>a, b=>b, ci=>ci, co=>co, s=>s);
process begin
a <= "0000"; b <= "0000"; ci <= '0';
wait for 100ns;
a <= "1010"; b <= "0101"; ci <= '0';
wait for 100ns;
a <= "1010"; b <= "0101"; ci <= '1';
wait for 100ns;
a <= "1111"; b <= "0001"; ci <= '0';
wait for 100ns;
wait;
end process;
end arch;
これも文法の細かいところはあまり気にせず、
使うadder4を呼び出し、それに与える信号を順次変えていく、
ということをしています。
もちろん、シミュレーションをするプログラムにこれを与えると、
この回路が動作したように出力が見られますので、
それをみながら、正しい回路になっているかをチェックすることになります。
このように、テストベンチの中では、検証の対象になっている回路を
インスタンスとして呼び出していることに注意しましょう。
このような、検証対象の回路をDUT (Device Under Test)と呼びます。
このように、論理合成の際に用いることができるライブラリは、 変換される回路がどのようなものになるか、に強く依存します。 たとえば、次回の演習では、論理回路をFPGAと呼ばれる論理LSIに作り込みますが、 このような場合は、そのFPGA用のライブラリが使われることになります。