sábado, 31 de octubre de 2015

Código comparador binario de 2,4,8 bits en VHDL Quartus explicación

"Una noche de Hallowen como hoy decido escribir estas pocas líneas de texto y código que podrán servir por mucho tiempo para estudiantes de Ingeniería Electrónica y demás"

 La idea de este post es explicar como probar y verificar el código de un comparador de 2,4 y 8 bits hecho en el lenguaje VHDL ¿básico o fácil hasta aquí no?, bueno el código en sí (que es por lo que vienes) es el siguiente:

Comparador de 8 bits en VHDL
 
library ieee;

use IEEE.std_logic_1164.all;

entity profuente is
port(A,B: in std_logic_vector(7downto 0);
mayor, menor, igual: out std_logic);  --declaración variables de salida

END profuente;

architecture situacion of profuente is 

begin
mayor <= '1' when (A>B)else '0'; --A > B, salida mayor a 1, resto a 0 
menor <= '1' when (A<B)else '0'; --A<B, salida menor a 1, resto a 0  
igual <= '1' when (A=B)else '0'; --A=B, salida igual a 1, resto a 0 

END situacion;

Click aquí para descargar el código

Código para comparador de 2 y 4 bits, no pondré de nuevo el mismo código con un número cambiado ya que así de sencillo es tener un comparador de "X" bits si observamos en el código del comparador de 8 bits en la línea número 6, donde dice "port(A,B: in std_logic_vector(7downto 0);" y está el número 7 en color azul.

Significa que allí es donde daremos la cantidad de bits, llamado comúnmente en VHDL como vector es donde definimos la cantidad de bits por ejemplo si tu comparador es de 2 bits irá de 1 a 0 si es de 4 bits irá de 3 a 0 y de 8 bits irá de 7 a 0.

Para comparador de 2 bits:
port(A,B: in std_logic_vector(1downto 0);

Para comparador de 4 bits:
port(A,B: in std_logic_vector(3downto 0);

Listo hasta aquí si lo que buscabamos era el código ya estuvo. Ahora veamos un poco sobre como funciona y como comprobar que funciona en Quartus.

Explicación y comprobación del comparador en Quartus  

IMPORTANTE: Al crear un proyecto en Quartus debes darle el mismo nombre que tiene el código en la entity o cambiar para el entity el nombre que tu quieras.

En el código anterior:

- De la línea 1 a la 3 se cita la librería y bases que harán que nuestro archivo funcione.

- En la línea 5 se escribe el entity del proyecto allí irá el nombre que le demos recuerda poner un nombre fácil que sea igual que el archivo con extesión .vhdl

- En la línea 6 y 7 declaramos nuestras variables de entrada y salida (IN-OUT)

- En la línea 11 se llama la arquitectura ya para iniciar a escribir lo que hará nuestro código.

- En la línea 14 a 16 se escriben todos los procesos que lleva a cabo el código para establecer un comparador (código ya comentado).


Comprobando funcionamiento con Quartus

Ahora probaremos que nuestro comparador funcione para ello lo haremos en Quartus la versión que yo tengo es la 13.0 si tienes otra no hay mucho complique ya que es casi similar el proceso.

Lo primero luego de tener el código y guardarlo como proyecto (IMPORTANTE) será compilarlo para ello damos click en el icono encerrado en azul:

  Luego, esperamos que cargue un poco los archivos etc.- al final debe salirte algo similar a este mensaje:





Damos en ok ya compiló sin problema, ahora vamos a File > New > University program VWF Damos en ok:



Nos saldrá una ventana en donde se ve la zona marcada con el uno darán doble clic para que despliegue otra ventana: 


Damos clic en "Node Finder" aparecerá otra ventana más donde daremos en "List":


En list en la casilla de "Nodes Found" nos botará las variables de entrada y salida que ya tenemos de nuestro código, cuando salgan daremos en el siguiente icono para pasarlas al otro lado casilla 2 y luego dan en ok paso 3 y una vez más en ok:


Nos debe salir en la primer ventana algo más o menos así un diagrama:


Vamos a seleccionar la variable A (click izquierdo sobre ella una vez) luego, en donde se ven los ceros encerrados al otro lado damos click derecho y seleccionamos value > overwrite clock o presionan CTRL + ATL + k:


Nos saldrá una ventanita de este tipo:



Le cambiaremos el periodo a 100 ns, esto es para alternar la comparación con nuestro código y así sacar más fácil el análisis.

Ahora repetimos los mismos pasos con la variable "B" pero en el período le pueden dejar entre 60 y 80 yo pondré 75 ns quedando al final así:



Ahora daré click en ese gráfico anterior pero en el icono que está encerrado en azul:



Te cargará una ventana temporal similar a esta si te pide guardar o confirmar algo le darás YES:



Luego, la ventanita anterior de cargar se cerrará sola y por último por fin el paso final nos mostrará el diagrama final del comparador si lo dejaron con los mismos datos míos les debe salir así:


click sobre la imagen para ver ampliada

Muy bien, ahora analicemos si el comparador está bien bajo estos factores:

1. Tenemos todas nuestras variables las de entrada (A,B) y las de salida (igual, mayor, menor).

2. El comparador trabaja en función de A para determinar si es mayor o menor la variable igual no nos importa.

3. Sea igual, mayor o menor se distingue con una línea más marcada en el diagrama que las otras dos.

Tomemos un fragmentos para analizarlo:



- Antes de los 40 ns, "A" y "B" valen 00 por lo cual la variable de salida igual debe resaltarse.

- Entre los 38 ns aprox. y los 50 ns "A" es menor en binario que "B" A=00=0, B=11=3; por lo tanto la línea menor debe resaltarse recordemos que trabaja en función de "A" el comparador.


- de los 50 ns en adelante "A" y "B" vuelven a valer lo mismo en este caso 11 (binario) por lo cual la salida igual debe resaltarse.

todo correcto, y listo con esto comprobamos que nuestro comparador para el ejemplo del diagrama de dos bits está funcionando 10/10 espero les guste este tutorial y más adelante como cargar nuestro comparador a nuestra placa.

Hasta la próxima,


0 comentarios:

Publicar un comentario

SÍGUENOS EN: