Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Practica 1.1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 22

TECNOLÓGICO NACIONAL DE MÉXICO

CAMPUS LÁZARO CÁRDENAS

DISEÑO DIGITAL CON VHDL


PRÁCTICA 1: DETECTOR DE NUMEROS
PRIMOS DE 4 ENTRADAS

Catedratico: M.C. Julio Cesar


Gallo Sanchez
INTRODUCCIÓN
¿Qué es VHDL?
HDL es un lenguaje de descripción de circuitos electrónicos digitales que utiliza distintos
niveles de abstracción. El significado de las siglas VHDL es VHSIC (Very High Speed
Integrated Circuits) Hardware Description Language. Esto significa que VHDL permite
acelerar el proceso de diseño. VHDL no es un lenguaje de programación, por ello conocer
su sintaxis no implica necesariamente saber diseñar con él. VHDL es un lenguaje de
descripción de hardware, que permite describir circuitos síncronos y asíncronos. Para
realizar esto debemos:

- Pensar en puertas y biestables, no en variables ni funciones.

- Evitar bucles combinacionales y relojes condicionados.

- Saber qué parte del circuito es combinacional y cuál secuencial.

¿Por qué usar un lenguaje de descripción hardware?

- Poder descubrir problemas en el diseño antes de su implementación física.

- La complejidad de los sistemas electrónicos crece exponencialmente, es necesaria

una herramienta que trabaje con el ordenador.

- Permite que más de una persona trabaje en el mismo proyecto.

En particular VHDL permite tanto una descripción de la estructura del circuito (descripción
a partir de subcircuitos más sencillos), como la especificación de la funcionalidad de un
circuito utilizando formas familiares a los lenguajes de programación. La misión más
importante de un lenguaje de descripción HW es que sea capaz de simular perfectamente
el comportamiento lógico de un circuito sin que el programador necesite imponer
restricciones.
Elementos Básicos de VHDL
Un sistema digital está descrito por sus entradas y sus salidas y la relación que existe entre
ellas. En el caso de VHDL por un lado se describirá el aspecto exterior del circuito: entradas
y salidas; y por otro la forma de relacionar las entradas con las salidas. El aspecto exterior,
cuántos puertos de entrada y salida tenemos, es lo que denominaremos entity. Y la
descripción del comportamiento del circuito architecture, toda architecture tiene que estar
asociada a una entity. Además, aunque no es estrictamente necesario, podemos definir
también las bibliotecas y paquetes que vamos a utilizar, lo que nos indicará que tipos de
puertos y operadores podemos utilizar. Siempre ha de aparecer la definición de las
bibliotecas y paquetes antes de la definición de la entity.

Entity
Una entidad es la abstracción de un circuito, ya sea desde un complejo sistema electrónico
o una simple puerta lógica. La entidad únicamente describe la forma externa del circuito,
en ella se enumeran las entradas y las salidas del diseño. Una entidad es análoga a un
símbolo esquemático en los diagramas electrónicos, el cual describe las conexiones del
dispositivo hacia el resto del diseño.

- Define externamente al circuito o subcircuito.

- Nombre y número de puertos, tipos de datos de entrada y salida.

- Tienes toda la información necesaria para conectar tu circuito a otros circuitos.

Los puertos pueden ser de entrada in, salida out, entrada-salida inout o buffer. Los puertos
de entrada sólo se pueden leer y no se puede modificar su valor internamente en la
descripción del comportamiento del circuito (architecture), sobre los puertos de salida sólo
library IEEE; use IEEE.std_logic_1164.all; use ieee.std_logic_arith.all; use
ieee.std_logic_unsigned.all; La biblioteca ieee y estos tres paquetes asociados aparecen
por defecto al generar un módulo VHDL.
Architecture
Los pares de entidades y arquitecturas se utilizan para representar la descripción completa
de un diseño. Una arquitectura describe el funcionamiento de la entidad a la que hace
referencia, es decir, dentro de architecture tendremos que describir el funcionamiento de la
entidad a la que está asociada utilizando las sentencias y expresiones propias de VHDL.

- Define internamente el circuito.

- Señales internas, funciones, procedimientos, constantes …

- La descripción de la arquitectura puede ser estructural o por comportamiento.

architecture arch_name of entity_name is

-- declaraciones de la arquitectura:

-- tipos

-- señales

- componentes begin

-- código de descripción

-- instrucciones concurrentes

-- ecuaciones booleanes

-- componentes process (lista de sensibilidad) begin

-- código de descripción end process; end arch_name;

FPGA’s y Quartus
Un FPGA o Field Programable Gate Array es un conjunto de circuitos integrados, como
puede ser cualquier chip, que está pensado para entregarse al cliente sin configurarlo para
que luego cada uno lo personalice y programe según la tarea que necesite que haga esa
pieza, una vez está ya se ha fabricado. Es como si fabricaran un procesador y luego lo
configuraran en función de lo que se necesite, en vez de enfocarlo a una tarea o un uso
específico durante el proceso de producción.

Los FPGA’s suelen contener diferentes bloques de procesamiento en su interior, y


diferentes conectores para poder configurar los diferentes bloques de lógica, pudiendo
hacer operaciones complejas o pudiendo funcionar como simples puertas lógicas. También
dependiendo del módulo en su interior podremos encontrar memoria, especialmente en los
módulos de lógica más complejos y avanzados.

Quartus
Este es un software diseñado por Altera para el análisis y la síntesis de diseños realizados
en HDL (Lenguaje de descripción de Hardware).Quartus II permite al desarrollador o
desarrolladora compilar sus diseños, realizar análisis temporales, examinar diagramas RTL
y configurar el dispositivo de destino con el programador.

La familia de FPGAs de bajo coste Cyclone, está soportada por esta edición, por lo que los
pequeños desarrolladores y desarrolladoras no tendrán problemas por el coste del
software.

Optimización de costos de sistema


Todas las FPGAs Cyclone® IV requieren solo dos fuentes de alimentación para su
funcionamiento, lo que simplifica su red de distribución de energía y le ahorra costos de
placa, espacio de placa y tiempo de diseño. Con los transceptores integrados en la
arquitectura FPGA Cyclone® IV, obtendrá un diseño e integración de placa simplificados.
Además, la flexibilidad de la arquitectura de sincronización del transceptor le permite
implementar múltiples protocolos mientras utiliza completamente todos los recursos
disponibles del transceptor. La integración y la flexibilidad de la FPGA Cyclone® IV GX le
permite diseñar en un dispositivo más pequeño y rentable, lo que reduce los costos totales
del sistema.

Reduce el consumo eléctrico


La FPGA Cyclone® IV E, basada en un proceso optimizado de bajo consumo de 60 nm,
amplía el liderazgo de bajo consumo de la FPGA Cyclone® III de la generación anterior. La
FPGA Cyclone® IV E reduce el voltaje del núcleo, lo que reduce la energía total en un 25
por ciento en comparación con el predecesor. Con los transceptores FPGA Cyclone® IV
GX, puede construir un puente PCI Express* a Gigabit Ethernet por menos de 1,5 vatios.

Las FPGAs Cyclone® IV están optimizadas para consumir la menor energía posible, con lo
que usted puede administrar mejor los requisitos térmicos. Como resultado, puede reducir
o eliminar los costos de enfriamiento del sistema y también extender la vida útil de la batería
para aplicaciones portátiles.

Circuito dectector de números primos de 4 entradas


NUMEROS PRIMOS

Los números primos son por definición números naturales mayores a 1, que únicamente tienen
dos divisores enteros positivos: el 1 y ellos mismos. Por consiguiente, en el caso de esta práctica,
en la Tabla 1.1 se señalan en un recuadro color verde los números primos comprendidos del 0
al 15 en decimal, puesto que nuestro circuito será de un máximo de 4 bits.

Tabla 1.1 Números primos existentes entre 0 a 15

0 1 2
3 4 5
6 7 8
9 10 11
12 13 14
15

ECUACIÓN DE SALIDA

Cuando se desea realizar un circuito que sea activo en determinadas entradas, lo importante es
reconocer que salidas son las de nuestro interés, por ejemplo, suponiendo un circuito de 2
entradas, A y B; y una salida S, se plantea que la salida sea activa únicamente cuando haya un
2 binario en la entrada. En la Tabla 1.2 se muestra la tabla de verdad para este c

Tabla 1.2 Tabla de verdad para circuito con una única salida en alto

A B S
0 0 0
0 1 0
1 0 1
1 1 0
Como en este caso solo nos interesa cuando entra el 2 binario (10), la ecuación para su
salida S será: 𝑆 = 𝐴𝐵̅.

En el caso de que sea de nuestro interés que la salida sea activa con más números, por
ejemplo,cambiando su salida en 1 para 𝐴𝐵 = 00 y 𝐴𝐵 = 11, se tendrá su tabla de verdad
en la Tabla 1.3.

Tabla 1.3 Tabla de verdad para circuito con dos salidas en alto

A B S
0 0 1
0 1 0
1 0 0
1 1 1

Como en este caso la salida se forma con 2 números de entrada, la ecuación para su
salida S será: 𝑆 = 𝐴̅𝐵̅+ 𝐴𝐵. Esta forma de escribir la igualdad de la salida es la forma
llamada suma de productos.

Es importante reconocer que en estas ecuaciones las operaciones de “multiplicación” se


forman con las compuertas AND, haciendo los productos o minitérminos, y las
operaciones de “suma”se forman con las compuertas OR, generando las sumas.

DESARROLLO
Para diseñar el circuito detector de números primos de 4 entradas, se tiene que tomar las
salidas en alto para la salida S cuando la combinación de las entradas genere un número
primo, como se muestra en la tabla de verdad de la Tabla 1.4.
Tabla .4 Tabla de verdad para detector de números primos de 4 entradas.

S A B C D
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
10 1 0 1 0
11 1 0 1 1
12 1 1 0 0
13 1 1 0 1
14 1 1 1 0
15 1 1 1 1

X=2, 3, 5,7,11,13

X=A’B’CD’+A’B’CD + A’BC’D+A’BCD + AB’CD + ABC’D


Una vez ya tenemos lista la tabla de verdad y la ecuacion ya elaborada con la misma
podemos empezar a elaborar nuestro codigo, para esto utilizaremos el programa
Quartus en la version 22.1.

Lo primero que debemos hacer es abrir el software y crear un nuevo proyecto


siguiendo los pasos siguientes:

1. Seleccionamos la opcion de New Project Wizard en la pantalla principal

2. Despues el programa nos mostrara una ventana de introduccion en la cual le


daremos en siguiente para asi mostrarnos la siguente pagina en la cual le
daremos el nombre al proyecto que vamos a crear. Cabe recalcar que es de
suma importancia el darle un nombre que este relacionado con lo que vamos
a realizar en el proyecto, en este caso como sera un detector de numeros
primos lo nombraremos como “DetectorNP”.
3. Una vez que le asignamos el nombre al proyecto procedemos a darle
siguiente a las ventanas que nos muestren hasta llegar a la ventana de
Family, Device & Board Settings. En esta ventana es donde vamos a
configurar la base en la que vamos a trabajar, en este caso en la seccion de
familia vamos a seleccionar la familia Cyclone IV E y en la seccion de
dispositivos disponibles busacmos el nombre del dispositivo con el que
contemos, en este caso es el “EP4CE6F17C8”.
Esta configuracion sera la que usaremos por defecto en los proyectos futuros que
vayamos a elaborar a excepcion del nombre del proyecto.

4. Una vez que hayamos configurado correctamente las configuraciones


anteriores le damos en “finalizar” en la ventana final, en esta misma ventana
nos mostrara un resumen de todos los ajustes que tenemos entre otras cosas
mas acerca del proyecto.

5. Al haber hecho lo anterior el programa nos dara la pantalla en blanco, para


empezar a elaborar el codigo lo que debemos hacer es indicar para que tipo
de formato vamos a realizar el codigo, en este caso nos estaremos centrando
en el lenguaje de VHDL asi que en la esquina izquierda superior de la pantalla
seleccionaremos la opcion de New (tambien podemos hacerlo usando
Ctrl+N). y seleccionaremos la opcion de VHDL File.
6. Una vez hecho lo anterior el programa nos dara la hoja completamente en
blanco, para tener una base en la cual trabajar daremos click izquierdo en la
parte de la hoja y seleccionaremos la opcion de “Insert Template”, dentro de
esta nos mostrara diferentes opciones, la que seleccionaremos se encuentra
en la seccion de VHDL y en la nos dirigiremos a la opcion de “Full Desings”,
despues a la de “Configurations” y dentro de todas las opciones que nos
proporciona seleccionaremos “Configuration Specifitations” y despues
“Configurable Component Gates” y finalmente le daremos insertar.
7. Despues de hacer lo anterior, el software nos dara una plantilla en la cual
podemos empezar a trabajar, lo que debemos hacer primero es definir la
cantidad de entradas y salidas que vamos a utilizar, en este caso este
detector es con 4 entradas (las nombraremos desde A, B, C y D) y contara
con 2 salidas (las cuales seran X y Y), estas se definiran en la seccion de
entity

8. Una vez ya defindas las variable, empezamos a trabajar en que queremos


que haga nuestro codigo, para esto nos vamos a basar en la ecuacion que
sacamos anteriormente con la tabla de verdad, para hacer los numeros
negados usaremos “NOT” y para añadir mas de una variable utilizaremos
“AND” antes de cada variable, por ejemplo “A AND NOT B” ahí estamos
indicando que se estan utilizando las variables A y B pero la B en este caso
sera negada, de esta manera y con la ecuacion es como vamos a elaborar la
arquitectura del codigo.
Finalmente el codigo debera quedar como se muestra a continuacion:

9. Una vez tengamos el codigo listo lo que debemos hacer es asegurar que no
tenga ningun error, para hacer esto lo que debemos hacer es complilar el
codigo, esto lo hacemos seleccionando la opcion de compilar (tambien se
puede precionando la figura del triangulo que se encuentra en la parte
superior de la ventana, de esta manera comensara a compilar el codigo.

Si el codigo se encuentra sin ningun error entonces, el programa nos


mostrara una ventana en la cual nos da un resumen general en el cual nos
indica dde la cantidad de memoria que utilizo, el total de pines que se
utilizaran, entre otros datos
10. Para poder ver el diagrama del detector de numeros primos, debemos
dirigirnos a la seccion de “Analysis & Synthesis” y buscaremos la carpeta de
“Netlist Viewers”

Despues deberemos abrir la carpeta y nos mostraran varias opciones,


deberemos seleccionar la de “RTL Viewer”
Despues de haber hecho lo anterior se nos debera abrir nuestro diagrama de
del codigo que hemos hecho anteoriormente, el diagrama de nuestro
decodificador se muestra a continuacion

11. Ya que tenemos el codigo funcionando de forma correcta lo que debemos


hacer es conectar nuestro FPGA a nuestra computadora y procederemos a
asignar los pines de la FPGA, para esto nos dirigimos a la opcion “Pin
Planner” (tambien podemos hacerlos usando Ctrl++Shift+N).

Una vez hecho lo anterior, el programa nos debera mostrar un mapa de


nuestra FPGA y un tabla en nuestra parte inferior de la pantalla, en esta tabla
es en done le asignaremos los pinesa nuestras entradas definidas
anteriormente al igual que las salidas.
Y una vez que ya hayamos asignados nuestras entradas debemos volver a
compilar nuestro codigo para que se guarden correctamente los pines
asignados.

12. Ya que tenemos nuestros pines asignados debemos programarlos en la


FPGA, para hacer esto nos vamos nuevamente a la ventana principal del
codigo y seleccionaremos la opcion de “Programmer”
Ya que seleccionamos la opcion anterior, el programa nos abrira una nueva
ventana, dentro de esta debemos seleccionar nuestra USB Blaster, que por
defecto ya nos deberia aparecer al conectar la FPGA.

Ya al haber seleccionado la FPGA le daremos a Start para que se empiece


a programar nuestra FPGA. En menos de un minuto deberia estar listo, nos
dariamos cuenta que ya esta lista cuando en la ventana la barra superior se
llenara de color verde y nos indicara que esta al 100%
13. Para finalizar solo nos queda probar el porgrama que programamos dentro
de nuestra FPGA, en este caso, los LEDS deberan encenderce cuadno
detecten un numero primo en codigo binario

De lo contrario si detecta que el numero que fue ingresado en nuestra FPGA


no es un numero binario entonces los LEDS no deberan encenderse
CONCLUSIÓN
En conclusión, esta práctica nos permitió obtener un conocimiento más profundo
sobre el uso de FPGAs y su programación mediante el lenguaje de descripción de
hardware VHDL. A lo largo del desarrollo, aprendimos a manejar conceptos clave
como la definición de entidades y arquitecturas para describir circuitos digitales, lo
cual fue fundamental para la creación del detector de números primos.

El uso de VHDL nos demostró cómo describir la lógica de un circuito digital de


manera eficiente, tanto a nivel de comportamiento como estructural. Además,
entendimos la relevancia de las simulaciones para identificar y corregir posibles
errores en el diseño antes de su implementación física. Esta capacidad de prever
fallos en etapas tempranas del proceso es esencial para evitar costosos errores y
optimizar el ciclo de desarrollo.

El diseño del detector de números primos incluyó la creación de una tabla de verdad
y la derivación de la ecuación lógica correspondiente, que fue implementada en
VHDL. Este proceso nos enseñó cómo representar condiciones lógicas complejas
mediante suma de productos y a aplicar correctamente las compuertas lógicas, lo
cual es esencial en el diseño digital.

la práctica no solo reforzó nuestro conocimiento en el uso de VHDL y FPGAs, sino


que también subrayó la importancia del trabajo metódico en el diseño digital.
Además, adquirimos habilidades prácticas en la utilización de herramientas como
Quartus II y en la implementación de circuitos reales, lo que nos prepara para
enfrentar retos más complejos en el campo de la electrónica digital y el diseño de
hardware.
BIBLIOGRAFÍA

Sánchez-Élez, Marcos. Introducción a La Programación En VHDL 1 F. Informática

(UCM). Recuperado el 9 de septiembre de 2024, de

https://docta.ucm.es/rest/api/core/bitstreams/4ded6d60-6b62-4f59-a7cd-

2511b9a73861/content

Intel. (s.f.) Recuperado el 9 de septiembre de 2024, de

https://www.intel.la/content/www/xl/es/products/details/fpga/cyclone/iv.html

Romero, J. (2021, 21 diciembre). ¿Qué es un FPGA y para qué sirve? GEEKNETIC.

https://www.geeknetic.es/FPGA/que-es-y-para-que-sirve

Administrador. (2015, 25 febrero). Como instalar Quartus II y crear un proyecto nuevo.

HeTPro-Tutoriales. https://hetpro-store.com/TUTORIALES/como-instalar-quartus-

ii-y-crear-un-proyecto-nuevo/

Morris Mano M. (2005) Fundamentos de Diseño Lógico y de Computadoras, Tercera

edición, Pearson, México. 2.

Tocci R. J. (2007), Sistemas digitales Principios y Aplicaciones, 10ª edición, Pearson,

México

También podría gustarte