ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Práctica Creación del proyecto y copiado del código VHDL original


Enviado por   •  16 de Mayo de 2018  •  Apuntes  •  1.402 Palabras (6 Páginas)  •  70 Visitas

Página 1 de 6

DISEÑO DE UN CONTADOR CON VHDL Y CPLD

AYUDA A LA PRÁCTICA 10, 2013-2014

Índice:

1-3. Creación del proyecto y copiado del código VHDL original

4-7. Explicación del código.

8. Implementación del sistema en la FPGA Spartan3 XC3S200 FT 256

9. Actividades del alumno para conseguir el punto de la práctica.

10. Código completo seguido con restricciones incluidas.

Esta Práctica 10 es idéntica a la práctica 7, solo que ahora vamos a implementar un contador. Los primeros pasos coinciden con los de la Práctica 6, si quieres puedes/debes cambiar el nombre del proyecto.

1. Para empezar debes crear un proyecto siguiendo los pasos de la práctica 7. TEN CUIDADO CON LAS NUEVAS VERSIONES LAS PANTALLAS CAMBIAN, LO SIENTO.

[pic 1]

2. Crear el fichero con el código en VHDL.

[pic 2]

3. Aquí tienes el código que debes “pegar” en tu proyecto.  A continuación explicaremos cada parte por separado para que puedas completar la tarea de la práctica.

ATENCIÓN: La versión 14 del ISE de Xilinx no añade por sí sola las siguientes declaraciones (no sé por qué), hazlo tú a mano:

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

Entradas y salidas:

port(

clk: in std_logic;

reset: in std_logic;

enable_seg: out std_logic_vector (3 downto 0);

siete_seg: out std_logic_vector (6 downto 0)

);

Signals (Aquello no es ni entrada ni salida, pero que hace falta en el programa. Aquello que sale de un bloque/process y va a otro). Va entre architecture y begin: NO EN OTRO SITIO

signal cont_aux_base: integer range 0 to 50000000;

signal cont_segundos: integer range 0 to 9;

4. Código VHDL, Programa que describe al contador.

Tiene dos partes: en la primera contamos hasta 50  millones porque el reloj interno de la FPGA va a 50 MHz (bienvenidos al mundo de lo súper-rápido). La segunda parte es un contador que suma 1, cada vez que pasa un segundo, es decir, cada vez que el otro contador ha llegado a 50 millones.

FÍJATE EN LA DIFERENCIA DE USAR ENTEROS (INTEGER en las SIGNALS)

[pic 3]

5. Contador base del reloj para generar segundos

process(clk, reset)—contador de 50  millones de flancos

begin

if reset='1' then

        cont_aux_base<=0;

elsif clk='1' and clk'event then

        if cont_aux_base=50000000 then -- comparar con 50 millones

                cont_aux_base<=0;

        else

                cont_aux_base<=cont_aux_base+1;

        end if;

end if;

end process;

[pic 4]

6. Contador de segundos

process(clk, reset) – contador de seg, suma 1 por cada 50 millones del otro

begin

if reset='1' then

        cont_segundos<=0;

elsif clk='1' and clk'event then

        if cont_aux_base=50000000 then

                if cont_segundos=9 then -- comparar con nueve

                        cont_segundos<=0;

                else

                        cont_segundos<=cont_segundos+1;

                end if;

        end if;

end if;

end process;

[pic 5]

7. Decodificación sobre el siete segmentos

Y luego viene la decodificación, como siempre. En este caso destaca que voy a apagar tres de los 7-segmentos para encender uno solo, el de la derecha del todo (creo). FÍJATE EN LA DIFERENCIA DE USAR ENTEROS (INTEGER en las SIGNALS)

process(cont_segundos)--¿hay errores en el BCD-7 segmentos?

begin

case cont_segundos is

when 0 => siete_seg<="0000001";

when 1 => siete_seg<="1001111";

when 2 => siete_seg<="0011001";

when 3 => siete_seg<="0000101";

when 4 => siete_seg<="1001100";

when 5 => siete_seg<="0100100";

when 6 => siete_seg<="1100000";

when 7 => siete_seg<="0001110";

when 8 => siete_seg<="1111111";

when 9 => siete_seg<="0001100";

when others => siete_seg<="1111111";

end case;

end process;

enable_seg<="1110"; --apagamos tres y encendemos un 7-segmentos

8. Asignación de pines de la FPGA a las entradas y salidas

Ahora viene las asignaciones de pines a cada entrada y salida, o sea el fichero UCF. Hay que copiar y adaptar esta parte. Y ACUÉRDATE DE QUE NO HACE CASO A LA PRIMERA.

#PACE: Start of Constraints generated by PACE

#PACE: Start of PACE I/O Pin Assignments

NET "enable_seg<0>"  LOC = "D14"  ;

NET "enable_seg<1>"  LOC = "G14"  ;

NET "enable_seg<2>"  LOC = "F14"  ;

NET "enable_seg<3>"  LOC = "E13"  ;

#anodo comun activo por nivel bajo

NET "reset"  LOC = "M13"  ;

NET "clk"  LOC = "T9"  ;

#Frecuencia de 50 MHz

NET "siete_seg<6>"  LOC = "E14"  ;

...

Descargar como (para miembros actualizados)  txt (9 Kb)   pdf (499 Kb)   docx (696 Kb)  
Leer 5 páginas más »
Disponible sólo en Clubensayos.com