domingo, 30 de junio de 2013

Arquitectura de la FPGA




Básicamente  una FPGA ((Field Programmable Gate Array)  está estructurada  por un gran número de bloques lógicos configurables ( Formado por los Slices) interconectados a través de canales de enrutamiento también programables y todo el arreglo se encuentra  rodeado de bloques de entradas y salidas (I/O Pads).
  En los Slices se realiza la mayor parte dela funcionalidad de la FPGA y suelen estar agrupados de 2 en 2 o de 4 en 4 formando los  bloques lógicos configurables (CLBs). Dentro de este componente encontramos los módulos LUT, registros y multiplexores programables en un número que depende de familia de FPGA, y tal como se muestra en la siguiente figura:

Los elementos programables más importantes en el  Slice  son los generadores reprogramables de función lógica, realizadas por las denominadas LUT (Look-up Table) o tablas de búsqueda, que son celdas de memoria SRAM  volátiles  y multiplexores para seleccionar la salida.
 Veamos, por ejemplo,  una LUT para una función  F = X1' X2 + X1 X2'  =  X1 xor X2
 La LUT  se puede simplificar en su gráfica:
            
Se pueden tener LUTs de 3 o más variables.Veamos, por ejemplo una de tres variables que genera la función  F =   X3  X4    +    X3 X4' X5'

Observe que para generar la tabla en la RAM, la función simplificada debe expandirse en mintérminos.
En este caso, se hace:  X3 X4 = X3 X4 X5' + X3 X4 X5
Supongamos ahora que se desea implementar la función F = (X1 xor X2) + (  X3  X4    +    X3 X4' X5')
Expandiendo queda así:  F =  X1´ X2    +    X1 X2´  +    X3  X4 X5'     +    X3 X4' X5'   +   X3 X4 X5

Para su implementación se necesitan la LUT de 2 entradas que realiza la compuerta XOR, la LUT de 3 entradas, y otra LUT de 2 entradas para la OR requerida.


Luego :  F =  X1´ X2    +    X1 X2´  +    X3  X4 X5'     +    X3 X4' X5'   +   X3 X4 X5 se genera así:

Las LUTS  tal como se trabajan físicamente en la FPGA se muestran en la siguiente figura:
Observe que se implementan Multiplexores de 4 a 1, de 8 a 1, y de 16 a 1, utilizando sólo multiplexores 2/1.
Los bloques de Entrada/Salida de las FPGAs cumplen la misma función que las macroceldas de salida en otros dispositivos lógicos programables,  como las  CPLD o las GAL, pero con más controles lógicos, entre los que se incluyen, configuraciones de entrada y salida combinacionales o registradas, alta impedancia, elementos de retardo, controlesanalógicos y otros.
Según se dijo ya cada bloque lógico CLB en la FPGA se encuentra incrustado en la estructura de interconexión, que se componen en realidad de cables con conexiones programables para ello.

La FPGA Spartan 3E  de Xilinx   dispone además de diversos dispositivos embebidos como memorias, multiplicadores, DCMs (administradores de reloj), etc.
La programación de la FPGA se hace vía JTAG,un acrónimo para Joint Test Action Group (Grupo de acción conjunta de prueba).
La interfaz JTAG es un conector de 4 hilos:
  1. TDI (Entrada de Datos de Testeo)
  2. TDO (Salida de Datos de Testeo)
  3. TCK (Reloj de Testeo)
  4. TMS (Selector de Modo de Testeo)

  Ya que posee una sola línea de datos, el protocolo es necesariamente serial, como el Serial Peripheral Interface. La entrada de la señal de reloj es por el pin TCK. La configuración del dispositivo se realiza manipulando una máquina de estados de un bit empleando el pin TMS. Un bit de datos es cargado en TDI y otro sacado en TDO por cada pulso de reloj de la señal TCK.


sábado, 29 de junio de 2013

Contador de anillo con VHDL en Basys 2

EJERCICIO: Solo uno de los 8 leds disponibles en la tarjeta Basys 2 debe encender  cada segundo en una secuencia  contador de anillo.

Solución: 

1).Creamos nuevo proyecto: contador_de_anillo y guardamos en la carpeta apropiada efectuando la debida configuración de acuerdo a las propiedades del proyecto y características de la FPGA.

2) Como nueva fuente trabajamos el código en VHDL creando el archivo contadordeanillo.vhd

3) Se chequea sintasis y luego se efectúa la síntesis.Para este caso no efectuamos la simulación.

4) Asignamos pines en User Constraints ---> Floorplan Area / IO / Logic- Post-Synthesis

El reloj de 50 Mhz está localizado en el pin B8 de la tarjeta Basys 2.Para los LEDS vienen marcados en la tarjeta.

5) Implementamos el diseño, se genera el archivo de programación y se configura el dispositivo en la tarjeta.

6) Antes de alimentar la tarjeta  y programar la FPGA es conveniente en el Resúmen del Diseño de la FPGA  (FPGA Design Summary)  verificar que los pines del reloj y de los LEDs están todos correctos.


Para esto se da click en View Design Summary, luego en Pinout Report y por último en Signal Name.

5) Se alimenta la tarjeta a través del conector USB. Se llama el programa ADEPT y se busca y se programa la FPGA con el archivo contadordeanillo.bit. Se dice Si a las advertencias.

El led rojo titila indicando que se está efectuando la programación y en el mensaje de la ventana de Digilent Adept debe indicarse que la programación se ha efectuado exitosamente (Programming Successful).

Compuertas lógicas en Basys 2 con VHDL

EJERCICIO: Utilizando dos Switches se dan valores binarios a las entradas X,Y y se generan las diferentes compuertas lógicas para ser visualizadas en los leds de la tarjeta Basys 2.

Vamos a indicar los pasos básicos sin entrar en detalle. Si el lector requiere paso a paso las indicaciones se sugiere previamente  estudiar los laboratorios con la tarjeta Spartan 3E explicados en  entradas anteriores del blog para que adquiera habilidad en el manejo del software Xilinx ISE 10.1

1). Primero cerramos el proyecto existente en el navegador de Xilinx 10.1 y creamos un nuevo proyecto que vamos a guardar en una carpeta que previamente se ha creado para trabajar con Basys 2.
El proyecto lo llamamos compuertas  e indicamos  como HDL el tipo de nivel superior de fuente   en el que se van a trabajar las compuertas lógicas.

Indicamos las propiedades  del proyecto  y las características propias de la FPGA de la tarjeta basys 2:


2). Creamos como nueva fuente un módulo VHDL para indicar el programa respectivo:

 3). Se efectúa la síntesis del circuito para compilar el archivo VHDL después de haber chequeado su sintásis.

 4),  Se hace ahora la simulación respectiva:
5).. Se efectúa la asignación de pines y luego editamos el archivo compuertas.ucf para verificar que está correcto.



6).estando el circuito sintetizado y simulado, se procede a implementar el diseño, generar el archivo de programación y configurar la FPGA en la tarjeta Basys 2, tendiente a generar el archivo compuertas.bit, que es el objetivo final.  En las FPGA el archivo .bit es el equivalente al archivo .JED para programar  las GAL:

7) Se conecta el cable  USB que alimenta y permite la programación de la FPGA de la tarjeta Basys 2.
Abrimos el software ADEPT de la empresa Digilent, fabricante de la tarjeta.
Con Browse  buscamos el archivo compuertas.bit en la carpeta donde guardamos el proyecto.
Damos Si  en la advertencia que aparece.
Se da click en program, y si nuevamente a la ventana con adevertencia, y la tarjeta debe funcionar perfectamente despues de titilar brevemente el led rojo, indicativo de que la programación ha sido exitosa.
En Adept  debe aparecer en la parte de abajo un mensaje indicando que la programación de la FPGA se ha efectuado satisfactoriamente.
 Mediante Adept se puede chequear el correcto funcionamiento de la tarjeta con un test de prueba.

 Se muestra en tiempo real que switches o pulsadores se accionan.Los displays de 7 segmentos muestran un contador en hexadecimal desde 0000 hasta FFFF (4 dígitos unificados)

Después de realizado el test de prueba se requiere volver a grabar la FPGA para que vuelva a funcionar.
Si se desenergiza se pierde la programación.Ello es debido a que las LUTS (tablas de búsqueda) de la FPGA se efectúan sobre memorias RAM volátiles. Si se desea que el programa perdure aun cuando se quite  la alimentación hay que grabarlo en la memoria PROM Flash que dispone la tarjeta junto con la FPGA.

miércoles, 26 de junio de 2013

Manual de referencia de la tarjeta Digilent Basys 2

La tarjeta BASYS 2 es una tarjeta de desarrollo,fabricada por la compañía DIGILENT, que contiene una FPGA  Xilinx  Spartan 3E-100,XC3S100E-CP132, un arreglo lógico programable de campo con 100.000 compuertas. 
  Está diseñada para el aprendizaje de sistemas  digitales de complejidad media utilizando un entorno de desarrollo profesional. Es  la ideal para el estudio de Digitales 2 a nivel de Ingeniería Electrónica y Biomédica en la UAN.

Además de la FPGA, esta tarjeta contiene una serie de recursos que pueden ser utilizados en los diseños de los circuitos. Concretamente contiene:
• 4 pulsadores.
• 8  interruptores deslizables.
• 8 LEDS, cátodo común.
• 4 displays de 7 segmentos en visualización dinámica.
• Un conector de teclado de PC (PS2)
• Una salida VGA para monitor de computador.

Todos estos recursos se encuentran conectados a las patillas de la FPGA de la forma que se indica en la siguiente figura:
Observe que cada elemento se identifica con una Letra y un Número de uno o dos dígitos,  con el cual se identifica el Pin, por ejemplo el LD0 se localiza como M5, el Switche SW0 está asociado con el pin P11, etc.
 Además la FPGA posee una entrada conectada a un reloj de 50 MHz que  corresponde a  la localización de pin B8.
 Se entiende que para el conector de teclado o el monitor VGA del computador tambien hay pines asociados que por el momento no se requieren, debido al uso inicial que se pretende dar a la tarjeta en las primeras prácticas, solo utilizando Switches y pulsadores como Entradas  y los Leds y Displays de 7 segmentos en las salidas de los circuitos a implementar.  Mas adelante se puede utilizar el Teclado para introducir datos, y el Monitor del PC para visualizar la salida.

Adicionalmente existen 4 conectores para trabajar externamente entradas y salidas, por ejemplo con el protoboard. Los cuatro conectores de expansión estándar permiten a la tarjeta Basys2 crecer utilizando circuitos diseñados por el usuario o PMods. (Los PMods son módulos de E/S analógicos y digitales de bajo costo que ofrecen conversión A/D y D/A, drivers para motor, entradas de sensor y muchas otras características). 
Supongamos que por ejemplo se desea trabajar con 4 leds de alto brillo o leds de chorro. Digilent ofrece por 10 dólares  un módulo de expansión  de 6 pines con los leds y sus transistores para que los manejen.

 Veamos el diagrama lógico de los leds y transistores:

Si necesitamos un display de cristal líquido LCD, por 35 dólares Digilent ofrece la respectiva tarjeta expansora que utiliza  dos puertos, o sea 6 pines:

Veamos su diagrama eléctrico:

 Se ofrece adicionalmente documentos de soporte para cada módulo expansor.

El lector puede conocer todos los módulos de expansión disponibles con sus respectivos precios en https://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,401&Cat=9


Uno de los 6 pines del conector es tierra (GND) y otro es Vcc de 3,3 voltios en cada puerto de expansión.
  .
 Se pueden observar en el gráfico anterior las resistencias de protección contra corto circuitos a las salidas, lo mismo que Diodos de protección ESD a tierra contra descargas electrostáticas.
Las descargas electrostáticas, como su nombre lo indica, consisten en un flujo repentino de corriente a través de un material, que generalmente es un aislante, pero que la diferencia de potencial entre sus extremos genera un campo eléctrico de cierta magnitud, convirtiendo los átomos del material en iones que conducen corriente.
Estas descargas se convierten en una seria amenaza para algunos dispositivos electrónicos sensibles, ya que gran parte de ellos incorporan una capa delgada de aislante, como por ejemplo dióxido de silicio, la cual se rompe cuando es sometida a altos voltajes, dañando irreparablemente el dispositivo.

Síntesis de circuitos mediante la tarjeta BASYS 2:

La síntesis de circuitos se puede realizar por medio del editor esquemático o mediante el lenguaje de descripción hardware VHDL. Se compilará utilizando el entorno ISE de XILINX como el XILINX ISE 10.1 que está disponible en el laboratorio de Simulación de Electrónica-Biomédica en la UAN,sede Sur,Bogotá.   Este entorno es capaz de crear un archivo para la configuración de la FPGA a partir del código VHDL que se escribe(archivo de “bit stream” con extensión .bit). Dicho archivo debe ser cargado en la tarjeta BASYS 2. Esto hace que el hardware interno de la FPGA se configure para seguir las especificaciones de  lo que se requiere implementar.
Para volcar el contenido del archivo en la FPGA y configurarla es necesario utilizar el programa ADEPT de DIGILENT, el cual también debe estar  disponible en el PC adicional  al XILINX ISE.

Para implementar un circuito digital en la FPGA de la tarjeta Digilent Basys 2 deben seguirse los siguientes pasos:
1). Dibujar el circuito lógico en el Editor Esquemático o escribir un código en VHDL que describa el hardware que queremos sintetizar.
2). Compilar el esquemático o el código VHDL  y generar el archivo de “bit stream”. Evidentemente el archivo no se generará si el programa tiene errores.
3) Efectuar la simulación del circuito a implementar. 
4). Una vez generado el fichero de “bit stream”, deberá utilizarse el programa ADEPT para volcarlo en la FPGA.
5). En este momento, la FPGA se convierte en un circuito que deberá realizar la tarea que haya sido descrita mediante el esquemático o el código  VHDL.

Utilización del entorno ISE:
Para realizar una síntesis mediante el entorno ISE debe crearse un proyecto.
Vaya al menú FILE -> NEW PROJECT. Aparecerá una ventana donde tendrá que escribir el nombre del nuevo proyecto.  Asegúrese también que en la casilla de selección “Top level Source Type” aparece “HDL”.
En la siguiente pantalla deberá ajustar los siguientes valores:
Family: Spartan 3E
Device: XC3S100E
Package: CP132
Speed: -5
Synthesis tool: XST (VHDL/Verilog)
Simulator: ISim (VHDL/Verilog)
Preferred Language: VHDL

Por último sáltese las siguientes pantallas pulsando en “Next”. En la última aparecerá el botón “Finish”.

Para compilar el código y generar el “bit stream” , seleccione el fichero o archivo  principal del proyecto y haga doble click en “Generate Programming File” en la parte inferior izquierda, después de haber efectuado la asignación de pines con el editor respectivo “Edit Constraints" y generar el respectivo archivo con extensión UCF.

Programación de la FPGA de la tarjeta Digilent  Basys 2:

Contiene un cable USB que le proporciona energía y es utilizado como interfaz de programación, por lo que ninguna otra fuente de poder o cable de programación es requerido.

 Para el uso de las tarjetas de Digilent que cuentan con conector Mini-USB como  la Basys2  se requiere un software extra para poder realizar la comunicación: Adept de Digilent; El software puede descargarse de manera gratuita en el sitio web http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,66,828&Prod=ADEPT2, en la sección “Software”: Digilent Adept, el paquete a descargar para Windows es Adept 2.6.1 System, 32/64-bit. Su instalación es muy sencilla, basta con hacer doble clic en el icono del software descargado y seguir las instrucciones.


Conecte la tarjeta Basys2 a un puerto USB disponible de una computador, Windows reconocerá que se ha conectado un nuevo dispositivo y procederá a asociarlo con el controlador adecuado.  Arranque el  programa: ADEPT.   y si la tarjeta se encuentra conectada  adecuadamente, se debe tener algo como lo que se muestra en la figura siguiente:

 Mediante el botón “Browse…” situado en la línea superior puede seleccionar el archivo que desea cargar. El archivo debe tener extensión .bit  A continuación haga click en el botón “Program”.a la derecha de “Browse…   Acepte la ventana que aparece y el fichero será transferido a la FPGA configurándola de tal manera que obedezca  el circuito descrito en su diseño.
 Durante la programación, un led de color rojo, que se encuentra a un lado de los pines de alimentación externa de la tarjeta se enciende, una vez terminado el proceso se indica si ha sido exitoso en la ventana de mensajes de Adept.

Recomiendo consultar un excelente trabajo de investigación realizado por el ingeniero Mario Merino Marquez del Instituto  Tecnológico  de  Tehuacán, México, titulado "Viabilidad de la tarjeta Basys 2 para su implementación en el control de un proceso".http://es.scribd.com/doc/97695972/Vibilidad-de-La-Tarjeta-Basys2-Para-Su-Implementacion-en-El-Control-de-Un-Proceso