Curso VHDL – Diseño esquemático

En esta entrega del curso, utilizaremos el editor de diagramas esquemáticos dentro de ISE Project Navigator para crear un sumador de cuatro bits.
Iniciemos, abrimos el programa ISE Project Navigator, creamos un nuevo proyecto, pero en esta ocasión indicaremos que el módulo principal será de tipo esquemático:

Ahora toca indicar el dispositivo al que pretendemos descargar este proyecto, en mi caso se trata de una tarjeta Nexys 2, por lo que la configuración del proyecto queda:

En el proyecto anterior iniciamos con la definición de algunas compuertas básicas, después las utilizamos como bloques de componentes poco a poco más complicados, primero un medio sumador, y a partir de este un sumador completo de 1 bit. Sin embargo, no es necesario siempre proceder así para crear nuestros diseños, por ejemplo, ahora nuevamente crearemos un sumador completo de 1 bit, pero en esta ocasión lo haremos utilizando las ecuaciones booleanas que lo definen en lugar de crealo a partir de la conexión de otros componentes. Para tal efecto, debemos conocer las ecuaciones que definen un sumador completo, veamos primero su tabla de verdad:

Acarreo
de entrada
Entrada B Entrada A Acarreo
de salida
Suma
Cin B A Cout S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1


Y estas son las ecuaciones que definen el funcionamiento de un sumador completo de 1 bit:

S = A ⊕ B ⊕ Cin
Cout = AB + Cin( A ⊕ B )

(Como ejercicio pueden hacer el desarrollo para obtener estas ecuaciones, y si encuentran algún error, por favor coméntenlo).
Muy bien, teniendo las ecuaciones que definen un sumador completo de un bit, podemos ahora fácilmente crear uno en VHDL.
Agregamos un nuevo archivo fuente al proyecto, será un módulo VHDL de nombre sumador_completo:


El código, basado en las ecuaciones que tenemos del sumador completo de 1 bit, quedaría así:

----------------------------------------------------------------------------------
-- Sumador completo por comportamiento
-- Mexchip - Tutorial VHDL
-- Septiembre 2011
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity sumador_completo is
	port(
		Cin : in STD_LOGIC;
		A   : in STD_LOGIC;
		B   : in STD_LOGIC;
		Cout: out STD_LOGIC;
		S   : out STD_LOGIC
	);
end sumador_completo;

architecture Behavioral of sumador_completo is

begin

	S <= A xor B xor Cin;
	Cout <= ( A and B ) or ( Cin and ( A xor B ) );

end Behavioral;

Guardamos el archivo y le revisamos su sintaxis, si no hay problema continuamos. Vamos a simularlo, para comprobar que el código hace lo que debe:

Perfecto, ya hicimos nuestro componente sumador_completo de un bit y comprobamos que funciona. Ahora, vamos a utilizarlo para crear un sumador de 4 bits, pero no lo haremos mediante código, sino mediante un diseño esquemático. Antes de poder poder utilizar nuestro componente sumador_completo en un diseño esquemático, debemos generar su símbolo esquemático, lo cual es bastante sencillo: seleccionamos nuestro componente en la ventana de diseño, después, en la ventana de procesos, dentro de la categoría Design Utilities, encontraremos el comando Create Schematic Symbol, hacemos doble clic sobre él para generar el símbolo esquemático de nuestro componente:

Tras ejecutar el proceso Create Schematic Symbol aparece el siguiente icono al lado del nombre del proceso sabremos que el símbolo esquemático se ha creado exitosamente:

Ahora, agregaremos un nuevo módulo fuente al proyecto, pero en esta ocasión será de tipo Schematic, lo llamaremos sumador_4bits:

Una vez agregado el nuevo fuente al proyecto, se abrirá automáticamente el editor de diagramas esquemáticos donde, si hacemos clic en la pestaña Symbols, veremos en la parte de la izquierda, en la sección Categories la ruta completa a nuestro proyecto, si hacemos clic en ella para seleccionarla, dentro de la sección Symbols aparecerá el componente sumador_completo (si no hubiéramos creado el símbolo esquemático del componente sumador_completo, no aparecería listado aquí):

Si notamos, existen muchas otras categorías que ya vienen incluídas en ISE Project Navigator, cada una con muchos componentes que podemos utilizar en nuestros diseños, por ejemplo, en la categoría Logic podemos encontrar una gran variedad de compuertas lógicas con diferentes números de entradas (algunas con hasta 16 entradas).
Ahora, si hacemos clic en el nombre del componente sumador_completo, y movemos el cursor al área de edición del diagrama esquemático, veremos que el cursor cambia por una cruz y a su lado lleva un pequeño rectángulo con líneas que le sobresalen a la izquierda y a la derecha, si hacemos un clic en el área de edición, colocaremos el símbolo en el editor y podremos ver que corresponde a nuestro componente sumador_completo, y que las líneas que le sobresalen corresponden a sus entradas y salidas, como podemos ver en esta imagen en la que se ha hecho un acercamiento (zoom) al símbolo del componente para apreciarlo mejor:

Continuemos, como mencionamos al principio, nuestra intención es crear un sumador de 4 bits, para ello replicaremos cuatro veces el símbolo del sumador completo de 1 bit, y los conectaremos en cascada para construir un sumador completo de 4 bits (si no recuerdan cómo conectar los sumadores de un bit para crear uno de 4 bits, no se preocupen, solo sigan los pasos), primero coloquemos cuatro componentes sumador_completo:

Podemos apreciar que, en cada extremo de las líneas que sobresalen de cada símbolo, se encuentra un pequeño cuadro, esto indica que son puertos o puntos donde podemos crear una conexión mediante un cable. Para crear una conexión, utilizamos la herramienta Add Wire, que en la barra de herramientas se identifica por un lápiz que está dibujando una línea roja:

Hacemos clic en la herramienta Add Wire y luego movemos el cursor a la salida Cout del primer sumador, al colocar el cursor en el cuadro del extremo de esta salida, el cuadro cambia ahora por cuatro cuadrados más pequeños, indicando que podemos hacer clic para iniciar la conexión, hacemos clic y después movemos el cursor a la entrada Cin del segundo sumador, donde haremos clic en el recuadro del pin Cin para confirmar la unión entre estos dos pines (Cout del primer sumador y Cin del segundo). Mientras hacemos esto podemos hacer clic en los botones de acercamiento (Zoom o mover la rueda central del ratón mientras mantenemos presionada la tecla Control) para ayudarnos, debería quedarnos así:

Para apreciarlo mejor, podemos ver este video:



Como podemos ver, el editor de esquemáticos de ISE Project Navigator es similar a algunos otros editores, ya sea de diagramas o simuladores.
Bien, conectemos ahora los acarreos de salida de los siguientes sumadores:

Prácticamente ya hemos terminado con las conexiones de los sumadores de un bit para crear el sumador de 4 bits, pero, si recordamos, cuando creamos el módulo principal de nuestro anterior proyecto, los puertos del componente (dentro de la sección port en el código de la entidad) fueron los que usamos para asociar con pines del chip en el que está contenido el FPGA, que se encuentran conectados con elementos de entrada y salida en la tarjeta de desarrollo, ¿cómo indicamos en un módulo esquemático cuáles son esos puertos? Esta tarea se realiza con la herramienta Add I/O Marker

El acarreo de entrada de nuestro sumador de 4 bits será el acarreo de entrada del primer sumador, entonces agregaremos un marcador a este pin, hacemos clic en la herramienta Add I/O Marker y a continuación movemos el cursor al pin Cin del primer sumador y hacemos clic como si fuéramos a crear una conexión, aparecerá un marcador como este:

O nuevamente, queda más fácil con un video:


Con esto hemos agregado un puerto de entrada a nuestro sumador de 4 bits, el programa automáticamente le asigna un nombre (en la forma XLXN_X, donde X es un número consecutivo que aumenta según se vayan agregando marcadores), si deseamos modificarlo, debemos seleccionar la herramienta Select (el cursor negro) y hacer doble clic sobre el marcador, aparecerá la ventana Object Properties, aquí podemos editar algunas propiedades del marcador como su dirección, tamaño de fuente para el nombre y, si vamos a la categoría Nets, podremos editar el nombre del marcador en la propiedad Name:

Modificaremos el nombre para que ahora sea Cin, al aceptar el cambio se debe actualizar el nombre del puerto:

Muy bien, ahora procederemos agregando marcadores de entrada/salida a todos los puertos que nos faltan, vamos a numerar cada sumador completo de un bit a partir de 0, es decir, de 0 a 3. Las entradas de cada sumador serán AX y BX, donde X es el número del sumador, las salidas de suma serán SX y el acarreo de salida del último sumador se llamará Cout, que es el acarreo de salida de nuestro sumador de cuatro bits, nos debe quedar algo como esto:

Podemos observar que los marcadores de entrada/salida son diferentes según sea el caso de estar conectados a una entrada o a una salida: la conexión al pin cambia a la "punta" o a la parte posterior:

Recordemos que nuestro sumador completo de 4 bits tendrá una entrada de un bit Cin y dos entradas de cuatro bits: A y B, nosotros hemos numerado cada bit de estas entradas de 0 a 3, tenemos así que A0, A1, A2 y A3 son los cuatro bits de la entrada A, siendo A3 el más significativo; de manera similar, tenemos que B0, B1, B2 y B3 son los cuatro bits de la entrada B, siendo B3 el más significativo. Asimismo, tendremos una salida de cuatro bits, conformada por S0, S1, S2 y S3, siendo este último el más significativo; y una salida de un bit: Cout, que es el acarreo de salida de nuestro sumador de 4 bits.
Finalmente, guardamos nuestro sumador de 4 bits ya terminado. Si vamos a la vista Design, observaremos que aparecen anidados cuatro componentes sumador_completo dentro del módulo sumador_4bits, de manera similar a lo que ocurría cuando en nuestro anterior proyecto instanciábamos algún componente:

Como observamos, el programa ha asignado las etiquetas para cada instancia, si queremos modificarlas, volvemos al editor de esquemáticos, con la herramienta Select hacemos doble clic sobre el símbolo de alguno de los sumadores y podremos cambiar su nombre de instancia:

Yo he cambiado todos los nombres de XLXI_X a SUM_X, tras guardar el módulo esquemático y cambiar a la pestaña Design ha quedado así:

Muy bien, hemos llegado al final de esta entrega del curso, en la próxima continuaremos con la simulación y descarga del proyecto a una tarjeta Nexys 2, estén al pendiente.

1 comentario

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*