Inicio > CPLD's > Sumador completo de 1 Bit

Sumador completo de 1 Bit

7 noviembre, 2010

Vamos a realizar una descripción exhaustiva del proceso de diseño de un CPLD y tiene como fin, familiarizarnos con el entorno de XILIX y el ModelSim. Implementaremos en el CPLD XC-9572 un sumador completo de 1Bit.

Como primer paso debemos hacer un analisis de la tabla de verdad

 

Tabla de verdad

Tabla de verdad

Tabla de karnaugh S

Tabla de karnaugh S

Tabla de karnaugh Cout

Tabla de karnaugh Cout

Empleando Karnaugh obtenemos

Otra manera de expresar el acarreo de salida es, y asi nos ahorramos una puerta OR adicional.

EL ESQUEMA A DISEÑAR SERIA EL SIGUIENTE

 

Sumador completo

Sumador completo

Lo siguiente es empezar a familiarizarse con el programa de xilix, asi que vamos al escritorio y abrimos el programa.

 

Ventana de Xilix

Ventana de Xilix

Ya que estamos en el entorno de trabajo de xilix, lo primero que debemos hacer es crear un nuevo proyecto para poder empezar a trabajar.  Desde FILE y NEW PROJECT se nos abrira la sig ventana:

 

Pantalla de New project

Pantalla de New project

Primero vamos a localizar donde queremos guardar nuestro proyecto; luego debemos asignarle un nombre que en este caso yo he puesto sumador y como podemos ver, automaticamente nos crea una carpeta en el directorio que hemos elegido, y por ultimo, seleccionamos el tipo de entrada de nuestro proyecto, que en este caso sera Schematic, hecho estos pasos damos aceptar y aparecera una segunda ventana:

 

Seleccion de dispositivo y flujo de diseño

Seleccion de dispositivo y flujo de diseño

Device family nos permite seleccionar la familia del CPLD a utilizar, seleccionamos el XC9500 CPLD’s. Device selecciona el CPLD en concreto de la familia, en nuestro caso XC9572. Package permite seleccionar el tipo de encapsulado, elegimos PC. Speed Grade selecciona la velocidad de trabajo del CPLD. El dato viene en nano segundos y se refiere al retardo pin a pin. La selección depende del dispositivo que dispongamos. Design Flow en este apartado seleccionamos el tipo de entrada (Schematic), el sintetizador (XST para
VHDL), el simulador (ModelSim) y el lenguaje de simulación utilizado (VHDL), damos a siguiente y nos aparecera otra ventana:

 

Seleccion fichero fuente

Seleccion fichero fuente

Hacemos clic en new source y vamos a añadir una fuente a nuestro proyecto para especificar los requerimientos del sistema utilizando un lenguaje formal de presentación gráfico.
En la ventana que se nos despliega, seleccionamos la plantilla ‘Schematic’ y asignamos un nombre a la fuente, en nuestro caso pondremos ‘sumador1bit’. La opción de ‘Add to project’ deberá estar activada.

Nos crea un informe del nuevo fichero fuente y damos siguiente. Despues se nos da la posibilidad de añadir más ficheros fuentes. En nuestro caso no añadiremos más.Y se nos crea el siguiente informe con las especificaciones del nuevo proyecto:

 

Informe del nuevo proyecto

Informe del nuevo proyecto

Si todo está correcto, aparecerán dos nuevas entradas dentro de la ventana de ‘Fuentes de Diseño’ del proyecto. Una con el nombre del proyecto ‘sumador.ise’, y la otra con el nombre del dispositivo CPLD ‘XC9572-7pc84’.

 

Vista de nuevo proyecto

Vista de nuevo proyecto

Para empezar con el diseño debemos hacemos clic en la pestaña ‘Symbols’ y se nos abre la ventana de símbolos, mostrándonos las librerías y sus componentes correspondientes.

 

Ventana de seleccion de componentes

Ventana de seleccion de componentes

El primer componente que vamos a colocar es una puerta xor de 2 entradas ‘xor2’. Para ello, tenemos dos formas de hacerlo:
Seleccionando ‘All Symbols’ y escribiendo ‘xor2’ en ‘Symbol Name Filter’. Posteriormente arrastramos el símbolo con el ratón hasta colocarlo en el lugar deseado dentro del esquemático.
La otra manera, es seleccionando la categoría ‘Logic’ y escribiendo ‘xor2’ en ‘Symbol Name Filter’ o buscando directamente dentro de la librería. Posteriormente, arrastramos el símbolo con el ratón hasta colocarlo en el lugar deseado dentro del esquemático.

 

Seleccion y colocacion de simbolos

Seleccion y colocacion de simbolos

Para unir los componentes debemos hacer clic en el siguiente icono:

 

Icono para añadir lineas de conexion

Icono para añadir lineas de conexion

Si la línea a dibujar va de un pin hasta otro, haremos clic en el pin fuente y, llevando el ratón hasta el pin de destino, volveremos a hacer clic en este pin. Si la línea a dibujar comienza en un pin pero no llega a otro, apretaremos el botón izquierdo del ratón en el pin fuente y nos moveremos hasta el lugar de destino elegido, donde soltaremos el botón.

Conexion de componentes

Conexion de componentes

Desde la barra de menús, seleccionamos ‘Add->Net Name’ o hacemos clic en el icono de la barra de herramientas. Escriba el nombre ‘A’ en la caja de ‘Name’ tal y como señala la Figura. Notará cómo en el cursor del ratón se añade el nombre ‘A’ y haciendo clic en la línea que se quiera nombrar, esta tomará el nombre.

Nombre de Net

Nombre de Net

Ahora todas las líneas que vayan a tener conexión con el exterior del CPLD, deben ser marcadas. Desde la barra de menús, seleccionamos ‘Add->I/O Marker’ o hacemos clic en el icono de la barra de herramientas.

Icono para añadir I/O markers

Icono para añadir I/O markers

Las ‘I/O Markers’ pueden ser de entrada, salida o bidireccionales, por lo que deberemos elegir el tipo de marca antes de proceder a su colocación. Para colocar una marca basta con situarse encima del nombre de la net y hacer clic. En el caso de no haber sido nombrada la net, el ‘ECS’ pondrá un nombre tomando como referencia parámetros internos.

Esquema completo

Esquema completo

Antes de seguir con el proceso, es recomendable verificar los errores que hayamos podido cometer en el diseño a nivel de conexionado. Hacemos clic en el icono de la barra de herramientas.

Icono para deteccion de errores

Icono para deteccion de errores

Si todo sale bien, el resultado sera el siguiente:

Informe sobre el chequeo de errores

Informe sobre el chequeo de errores


Para verificar nuestro diseño, se va a utilizar la herramienta de simulación ‘ModelSim’, la cual necesita un fichero fuente de texto de entrada, escrito en un Lenguaje Descriptivo de Hardware (HDL) que contenga los vectores de prueba para poder realizar la simulación a la entidad creada. Para la obtención de este fichero ‘ISE’ dispone de una herramienta llamada ‘HDL Bencher’.

Una vez abierta la herramienta, tenemos dos posibilidades para generar el fichero de test ‘test bench’:

Empleando el formato gráfico que se nos brinda tras la apertura del programa. De manera que los estímulos los podremos meter gráficamente haciendo clic en las señales de entrada y salida. Este estilo recibe el nombre de ‘test bench waveform’. Antes de abrir el ‘ModelSim’ el test creado gráficamente será compilado y convertido a un formato HDL, en nuestro caso VHDL.

El test bench es un fichero VHDL en el que se instancia la entidad que se desea probar ‘uut’ (unit under test).

A esta unidad se le aplican un conjunto de vectores de prueba (estímulos), en modo texto o gráfico, de los cuales se conoce la salida esperada. Posteriormente, desde el ‘ModelSim’, se compara la salida que ofrece la ‘uut’ con la salida esperada, y si no son iguales es que ha habido algún error.

Por tanto, el primer paso es crear el fichero de test bench. Pulsando el botón derecho sobre el fichero ‘add1bit.sch’ seleccionamos la opción de ‘New Source’. En la siguiente pantalla elegimos la opción de ‘New->Test Bench Waveform’, y le llamamos ‘tb_add1bit’.

 

Seleccionado de Test Waveform

Seleccionado de Test Waveform

Hecho esto, se nos lanza una ventana desde la que podemos configurar los parámetros temporales de la simulación.
Nuestro diseño no dispone de reloj por lo que seleccionaremos una entrada combinacional para realizar la simulación
‘Combinatorial (or internal clock)’. Los tiempos de retardo los dejamos por defecto, es decir, chequearemos las salidas 50ns después de ser asignadas las entradas y asignaremos nuevas entradas 50ns después de ser chequeadas las salidas.

 

Configuracion de tiempos de simulacion del Test Waveform

Configuracion de tiempos de simulacion del Test Waveform

Ahora ‘HDL Bencher’ se nos abre dentro del entorno ‘ISE’ mostrándonos las formas de onda.

 

ventana de test bench

ventana de test bench

En nuestro caso, vamos a comprobar la tabla de verdad del sumador completo de un bit. Para ello, meteremos los estímulos haciendo clic con el botón izquierdo del ratón encima del fondo azul de las entradas, hasta realizar todas las combinaciones de la tabla en la línea de tiempo horizontal, tal como muestra la Figura:

 

Entrada de estímulos y respuestas esperadas en el ‘HDL Bencher’

Entrada de estímulos y respuestas esperadas en el ‘HDL Bencher’S

Simunlacion: Antes de arrancar la utilidad de simulación ‘ModelSim’, añadimos el fichero test bench al proyecto haciendo clic en
‘Add Test Bench to Project’. Esto genera un nuevo fichero en formato HDL, en nuestro caso VHDL, denominado
‘tb_add1bit_tb.vhd’, que será utilizado por ‘ModelSim’ para realizar la simulación.

Generar fichero para poder simular en Modelsim

Generar fichero para poder simular en

Teniendo seleccionada la fuente ‘tb_add1bit-testbench_arch [tb_add1bit_tb.vhd]’, pulsamos dos veces seguidas sobre el proceso ‘Simulate Behavioral VHDL Model’. De esta forma se lanzará la aplicación de simulación asociada al ‘Project Navigator’, en nuestro caso ‘ModelSim XE III v6.5c’. La simulación se ejecutará automáticamente dando como resultado la consola de ‘ModelSim’:

Pantalla del simulador Modelsim

Pantalla del simulador Modelsim

SÍNTESIS DEL SUMADOR DE 1 BIT, Hacemos doble clic en el proceso ‘Synthesize-XST’ situado en la ventana de procesos y se nos efectúa la síntesis del sumador.

sintesis del sumador de 1 bit

sintesis del sumador de 1 bit

CREANDO RESTRICCIONES (*.UCF), Antes de realizar el ‘Translate’, vamos a crear un fichero de restricciones (.ucf) en el cual podremos asignar periodos y retardos de tiempo a los distintos elementos del diseño, así como asignar localizaciones de pin y configurar los IOB’s, los bloques de RAM, BUFG’s, y demás recursos del CPLD que hayan sido utilizados, vamos a crear un fichero de restricciones para la localización de pines. Para ello, dentro de la ventana de procesos, abrimos la utilidad ‘Assign Package Pins’.

Antes de abrir la herramienta se nos informa de que el proceso requiere de un nuevo fichero fuente (*.UCF) para poder ser utilizado. También se nos sugiere la posibilidad de crearlo automáticamente, a lo que responderemos que ‘Si’.

 Generación del fichero de restricciones UCF

Generación del fichero de restricciones UCF

Asignación de pines con PACE (Pin-out Area Constraints Editor), proceso asociado al fichero de restricciones ‘add1bit.ucf’.

PACE (Pin-out Area Constraints Editor)

PACE (Pin-out Area Constraints Editor)

Una vez dentro del programa ‘PACE’ podemos realizar la localizacion, escribiendo el numero de pin con su respectiva ventana de esta manera:

Asignando pines

Asignando pines

Ahora con respecto a nuestro diseño para su análisis en la ‘TAD-XC9572’ hemos decidido utilizar, de forma aleatoria, la siguiente configuración de pines entrada/salida.

Diseño a implementar

Diseño a implementar

COLOCACIÓN (Translate), Realiza todos los pasos necesarios para convertir los ficheros netlist de entrada, en un formato propietario NGD que utiliza una representación interna de la tecnología que se está empleando(Algo muy parecido a lo que realizamos con el diseño de la placa en el layout). Este fichero describe el diseño en términos lógicos (puertas lógicas, decodificadores, RAM’s, flip-flop’s, etc).
Para ejecutar la utilidad nos ponemos encima de ‘Translate’ y hacemos doble clic.

Run traslate

Run traslate

CONEXIONADO (Fit)
Fit mapea la lógica definida por el fichero NGD dentro de los recursos del CPLD, tal como células lógicas, I/OB’s y otros componentes. La salida del proceso es un fichero VM6 que representa físicamente el conexionado de los componentes en el CPLD.
Para ejecutar la utilidad nos ponemos encima de ‘Fit’ y hacemos doble clic.

Sumario de informe del conexionado

Sumario de informe del conexionado

descargar memoria aqui

 

 

Si la línea a dibujar va de un pin hasta otro, haremos clic en el pin fuente y, llevando el ratón hasta el pin de destino, volveremos a hacer clic en este pin.

Si la línea a dibujar comienza en un pin pero no llega a otro, apretaremos el botón izquierdo del ratón en el pin fuente y nos moveremos hasta el lugar de destino elegido, donde soltaremos el botón.

About these ads
Categorías:CPLD's
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: