VHDL: registro sencillo de 8 bits

VHDL registro sencillo de 8 bits.

Traigo de nuevo otro code-kata, ahora se trata de un registro sencillo. Los registros son circuitos sencillos, en donde se depositan ciertos valores de un dado número de bits, al son del tic tac del reloj. Se usan para direccionar la memoria, llevar la cuenta de dónde está un programa ejecutándose, almacenar un valor, y un largo etcétera.

Es decir, es un circuito sencillo en donde simplemente se le deja poner un valor de entrada, que a la vez se puede resetear.

Al grano, el código de un sencillo registro de 8 bits

Simplemente muestra el valor de entrada en la salida, o si está la señal de reset se pone a cero, al son del tic tac del reloj:

library IEEE; use IEEE.std_logic_1164.all; entity eightBitsRegister is port ( valueOut : out std_logic_vector (7 downto 0); valueIn : in std_logic_vector (7 downto 0); reset, clock : in std_logic ); end entity; architecture arch_eightBitsRegister of eightBitsRegister is begin identifier : process (clock) begin if (rising_edge(clock)) then if reset = '1' then valueOut <= "00000000"; else valueOut <= valueIn; end if; end if; end process; end architecture;

El banco de pruebas del registro de 8 bits

Simplemente, unas pocas pruebas para simularlo:

library IEEE; use IEEE.std_logic_1164.all; entity eightBitsRegister_tb is end entity; architecture arch_eightBitsRegister_tb of eightBitsRegister_tb is component eightBitsRegister is port ( valueOut : out std_logic_vector (7 downto 0); valueIn : in std_logic_vector (7 downto 0); reset, clock : in std_logic ); end component; signal testReset, testClock : std_logic := '0'; signal testValueOut, testValueIn : std_logic_vector (7 downto 0); signal tics : integer := 0; begin testing_unit: eightBitsRegister port map ( valueOut => testValueOut, valueIn => testValueIn, reset => testReset, clock => testClock ); generate_100Mhzs_clock : process begin report "Tic tac.."; testClock <= not testClock; wait for 5 ns; -- Tiempo de espera en un flanco de reloj. if testClock = '1' then tics <= tics + 1; end if; if tics > 20 then wait; end if; end process; generate_signals : process begin wait for 5 ns; testReset <= '1'; wait for 10 ns; testReset <= '0'; wait for 10 ns; testValueIn <= "00000101"; wait for 10 ns; testValueIn <= "00000110"; wait for 10 ns; testValueIn <= "00000111"; wait for 10 ns; testReset <= '1'; wait for 10 ns; testReset <= '0'; wait for 10 ns; wait; end process; end architecture;

Si todo ha ido bien, se tiene que mostrar una imagen como la del principio.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *