--== Header ============================================================================= library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; ----------------------------------------------------------------------------------------- --== Entidade =========================================================================== ENTITY decryptor_tb IS END decryptor_tb; ----------------------------------------------------------------------------------------- --== Arquitetura ======================================================================== ARCHITECTURE behavior OF decryptor_tb IS -- Sinais Locais signal count : std_logic_vector(4 downto 0); signal byte_entrada : std_logic_vector(7 downto 0); signal msg : std_logic_vector(7 downto 0); signal clk : std_logic; signal reset : std_logic; -- Usando a definicao dos seguintes componentes COMPONENT decryptor IS PORT ( byte_entrada : IN std_logic_vector(7 downto 0); clk : IN std_logic; reset : IN std_logic; msg : OUT std_logic_vector(7 downto 0) ); END component; -- Comportamento BEGIN decryptor1: decryptor PORT MAP ( byte_entrada, clk, reset ); clk_gen: process begin clk <= '0'; wait for 1 ns; clk <= '1'; wait for 1 ns; end process; reset_gen: process begin reset <= '1'; wait for 0.5 ns; reset <= '0'; wait for 49.5 ns; end process; count_gen: process(clk, reset) begin if reset = '1' then count <= "00000"; elsif rising_edge(clk) then count <= std_logic_vector( unsigned(count) + 1 ); end if; end process; byte_entrada_gen: process(clk) begin if reset = '1' then byte_entrada <= std_logic_vector(to_unsigned(16#00#,8)); elsif rising_edge(clk) then case count is -- Parte 1 - senha 64, msg_encriptada(32,2b,27,21,37,44,30,21,29,44) when "00000" => byte_entrada <= std_logic_vector(to_unsigned(16#01#,8)); when "00001" => byte_entrada <= std_logic_vector(to_unsigned(16#64#,8)); when "00010" => byte_entrada <= std_logic_vector(to_unsigned(16#32#,8)); when "00011" => byte_entrada <= std_logic_vector(to_unsigned(16#2b#,8)); when "00100" => byte_entrada <= std_logic_vector(to_unsigned(16#27#,8)); when "00101" => byte_entrada <= std_logic_vector(to_unsigned(16#21#,8)); when "00110" => byte_entrada <= std_logic_vector(to_unsigned(16#37#,8)); when "00111" => byte_entrada <= std_logic_vector(to_unsigned(16#44#,8)); when "01000" => byte_entrada <= std_logic_vector(to_unsigned(16#30#,8)); when "01001" => byte_entrada <= std_logic_vector(to_unsigned(16#21#,8)); when "01010" => byte_entrada <= std_logic_vector(to_unsigned(16#29#,8)); when "01011" => byte_entrada <= std_logic_vector(to_unsigned(16#44#,8)); when "01100" => byte_entrada <= std_logic_vector(to_unsigned(16#00#,8)); -- Parte 2 - senha 99, msg_encriptada(cf,d0,dd,d8,b9,db,d6,d8) when "01101" => byte_entrada <= std_logic_vector(to_unsigned(16#01#,8)); when "01110" => byte_entrada <= std_logic_vector(to_unsigned(16#99#,8)); when "01111" => byte_entrada <= std_logic_vector(to_unsigned(16#cf#,8)); when "10000" => byte_entrada <= std_logic_vector(to_unsigned(16#d0#,8)); when "10001" => byte_entrada <= std_logic_vector(to_unsigned(16#dd#,8)); when "10010" => byte_entrada <= std_logic_vector(to_unsigned(16#d8#,8)); when "10011" => byte_entrada <= std_logic_vector(to_unsigned(16#b9#,8)); when "10100" => byte_entrada <= std_logic_vector(to_unsigned(16#db#,8)); when "10101" => byte_entrada <= std_logic_vector(to_unsigned(16#d6#,8)); when "10110" => byte_entrada <= std_logic_vector(to_unsigned(16#d8#,8)); when "10111" => byte_entrada <= std_logic_vector(to_unsigned(16#00#,8)); -- Teste do estado 0 permanece no estado 0, se a entrada for aleatoria when "11000" => byte_entrada <= std_logic_vector(to_unsigned(16#aa#,8)); when "11001" => byte_entrada <= std_logic_vector(to_unsigned(16#23#,8)); when others => byte_entrada <= std_logic_vector(to_unsigned(16#00#,8)); end case; end if; end process; END; -----------------------------------------------------------------------------------------