Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

23/05/2014 #1


Codigo vhdl para que una palabra se mueva de derecha a izquierda con quartus ii
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 &lt;= COUNTB + 1; 
 else COUNTB &lt;= 
COUNTB; 
 end if; 
end process contabin; 
 
decomatrix: process (COUNTB) 
begin 
-- CONTB(2:0) -&gt; c1|c2|c3|c4|c5|f1|f2|f3|f4|f5 
case COUNTB is 
when &quot;000&quot; =&gt; matrix_led &lt;=&quot;011110010000&quot;; --
barrido c1 
when &quot;001&quot; =&gt; matrix_led &lt;=&quot;101110111111&quot;; --c2 
when &quot;010&quot; =&gt; matrix_led &lt;=&quot;110111111111&quot;; --c3 
when &quot;011&quot; =&gt; matrix_led &lt;=&quot;111010111111&quot;; --c4 
when &quot;100&quot; =&gt; matrix_led &lt;=&quot;111100010000&quot;; --c5 
when others =&gt; matrix_led &lt;=&quot;111110000000&quot;; --
apagado 
end case; 
end process decomatrix; 
 
salida_individual: process (matrix_led) 
begin 
c1 &lt;= matrix_led(11); 
c2 &lt;= matrix_led(10); 
c3 &lt;= matrix_led(9); 
c4 &lt;= matrix_led(8); 
c5 &lt;= matrix_led(7); 
f1 &lt;= matrix_led(6); 
f2 &lt;= matrix_led(5); 
f3 &lt;= matrix_led(4); 
f4 &lt;= matrix_led(3); 
f5 &lt;= matrix_led(2); 
f6 &lt;= matrix_led(1); 
f7 &lt;= matrix_led(0); 
end process salida_individual; 
 
END archmatrix;
24/05/2014 #2

Avatar de chclau

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
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.