Codigo vhdl para que una palabra se mueva de derecha a izquierda con quartus ii

#1
Hola a todos.
Estoy realizando un proyecto utilizando un fpga Max II y una matriz de leds de 5X7.
Necesito crear un código en vhdl para que aparezca una palabra que se mueva de derecha a izquierda. he podido hacer que aparezca solo una letra pero no logro hacer que se mueva.
Gracias por su atención.
¿Me podrían ayudar por favor a guiarme?

Aquí el código, este código muestra una flecha pero no permite que se mueva.
Código:
LIBRARY IEEE; 
USE IEEE.std_logic_1164.ALL; 
use IEEE.std_logic_arith.all; 
use IEEE.std_logic_unsigned.all; 
 
ENTITY matrix IS 
 PORT( 
 CLK, RESET: in STD_LOGIC; 
 c1, c2, c3, c4, c5, f1, f2, f3, f4, 
f5,f6,f7: out STD_LOGIC 
 ); 
 END matrix; 
 
ARCHITECTURE archmatrix OF matrix IS 
signal frec_alta, frec_lenta: STD_LOGIC; 
signal COUNT: STD_LOGIC_VECTOR (23 downto 0); 
signal COUNTB: STD_LOGIC_VECTOR (2 downto 0); 
signal matrix_led: STD_LOGIC_VECTOR (11 downto 0); 
begin 
divisor: process (CLK, RESET) 
begin 
 if RESET=\'1\' then 
 COUNT <= "000000000000000000000000"; 
 elsif CLK=\'1\' and CLK\'event then 
 COUNT <= COUNT + 1; 
 else 
 COUNT <= COUNT; 
 end if; 
 frec_alta <= COUNT(19); 
 frec_lenta <= COUNT(23); 
end process divisor; 
 
contabin: process (frec_alta, RESET) 
begin 
 if (RESET=\'1\' or COUNTB= 5) then 
 COUNTB <= "000"; 
 elsif frec_alta=\'1\' and frec_alta\'event then 
 COUNTB <= COUNTB + 1; 
 else COUNTB <= 
COUNTB; 
 end if; 
end process contabin; 
 
decomatrix: process (COUNTB) 
begin 
-- CONTB(2:0) -> c1|c2|c3|c4|c5|f1|f2|f3|f4|f5 
case COUNTB is 
when "000" => matrix_led <="011110010000"; --
barrido c1 
when "001" => matrix_led <="101110111111"; --c2 
when "010" => matrix_led <="110111111111"; --c3 
when "011" => matrix_led <="111010111111"; --c4 
when "100" => matrix_led <="111100010000"; --c5 
when others => matrix_led <="111110000000"; --
apagado 
end case; 
end process decomatrix; 
 
salida_individual: process (matrix_led) 
begin 
c1 <= matrix_led(11); 
c2 <= matrix_led(10); 
c3 <= matrix_led(9); 
c4 <= matrix_led(8); 
c5 <= matrix_led(7); 
f1 <= matrix_led(6); 
f2 <= matrix_led(5); 
f3 <= matrix_led(4); 
f4 <= matrix_led(3); 
f5 <= matrix_led(2); 
f6 <= matrix_led(1); 
f7 <= matrix_led(0); 
end process salida_individual; 
 
END archmatrix;
 
Última edición por un moderador:
#2
Para poder mover la figura lo que tenes que hacer es cargar los datos de la figura en varios registros de desplazamiento, y las salidas de los registros son los que comandan a la matriz de LEDs. Cuando le das la orden de desplazamiento a los registros se movera la figura.

Otra observacion es que no es necesario el "else" en cada proceso que dice que si no hubo reset o pulso de clock el registro mantiene su valor.

Y por ultimo, no es necesario crear varias señales de reloj sino que se puede trabajar para todos con el mismo reloj, y utilizar lo que se denomina señales de clock enable
 
Arriba