lunes, 8 de noviembre de 2021

Introducción a la tarjeta FPGA - EP2C5

 

Tarjeta FPGA - EP2C5T144

Empezando con buenas vibras y esperando aportar con un granito de arena en el aprendizaje de la electrónica digital, quiero agradecer tu visita a mi blog.

Hoy quiero hacer una introducción y comentar acerca de una placa o tarjeta de prototipado, de la que no encontré un nombre oficial que la identifique entre otras similares, por lo que yo la llamare Tarjeta EP2C5. 

Fig1. Placa EP2C5T
 

Esta tarjeta posee un chip FPGA de la marca Altera(Hoy adquirida por Intel) siendo mas precisos se trata del modelo Cyclone II EP2C5T144C8, que oficialmente esta descontinuado para nuevos desarrollos, por lo que su actual uso se enfoca mas al ámbito educativo, particularmente una de las razones de porque decidí utilizarla, es su bajo costo comparado con otros modelos, por lo que si en el peor de los casos se daña, adquirir otra no representaría un gran problema económico, en todo caso el mayor beneficio para un principiante es la posibilidad de entrar en el mundo de los dispositivos lógicos programables y empezar a ganar experiencia.

No es la finalidad del presente articulo explicar a detalle los conceptos de dispositivos lógicos programables(PLD) y lenguajes descriptores de hardware(HDL) por lo que recomiendo buscar otras fuentes de información al respecto. Dejo algunos enlaces muy interesantes:

Sabiendo esto, nos centraremos mas en conocer las herramientas necesarias para implementar circuitos digitales como apoyo los ejercicios que se publicaran posteriormente.

No olvides que cuando adquieras esta placa necesitaras también el programador UBS-Blaster, que te servirá incluso para otros modelos de FPGA producidos por Altera.

Fig2. Programador USB-Blaster
 

Características

El chip EP2C5T144 posee 4.608 elementos lógicos LE, para tener una idea de lo que representa esto, imaginemos que cada LE esta conformado por una combinación de compuertas y flip-flops con la que es posible llevar a cabo cualquier operación lógica en la entrada, y para este fin una tabla LUT determina la operación en concreto, los valores de la tabla LUT se almacenan en una memoria volátil razón por la que un FPGA no retiene la configuración del circuito(firmware) cuando se quita la energía. Por eso adicionalmente la placa EP2C5 integra una memoria serial EEPROM de 4Mbit que almacena el firmware y transfiere su contenido a la FPGA cuando esta se energiza, adicionalmente, este modelo cuenta con 26 bloques M4K de RAM, 2 PLL y 13 multiplicadores para diversos requerimientos, la placa ya incluye los elementos necesarios para trabajar con una fuente DC entre 5 a 9V, un cristal de 50MHz y hasta 89 pines E/S distribuidas de forma organizada.

La siguiente figura muestra esta asignación y algunos pines que ya tienen conexiones establecidas por lo que debemos considerar su uso según el caso, por ejemplo las patillas 3,7 y 9 están conectados a unos leds, la patilla 144 a un pulsador y podemos utilizarlos como parte de nuestro circuito a diseñar. así mismo los pines 17(Cristal 50MHz), 26, 27, 73, 80, 81 no pueden ser utilizados para otro fin.

Fig3. Pines conectados


Herramientas necesarias

Al ser un producto propietario, la única opción que se tiene para desarrollar aplicaciones con esta tarjeta, es utilizar el software Quartus Web, este software es un entorno de desarrollo integrado con el que podremos diseñar, simular, sintetizar e implementar nuestros circuitos digitales.

Te dejo el siguiente enlace para efectuar la descarga: Quartus II Web Edition 13. Debes registrarte y aceptar las condiciones para realizar la descarga. Comentar también que a partir de las versión 13.0 ya no hay soporte para el modelo Cyclone II que tiene nuestra placa EP2C5T, por lo que si descargas una versión mas actualizada, al menos debes contar con una Cyclone IV. 

Fig4. Selección de Quartus Web

La instalación de Quartus en Windows es relativamente simple, en mi caso yo utilizo Linux Debian 10 de 64 bits y tuve que instalar previamente algunas librerías de 32 bits adicionales, una vez finalizado el proceso de instalación estaremos listos para crear proyectos digitales.

Creación y configuración del proyecto

Una vez abierto Quartus, utilizando el asistente o en el menú File, procedemos a crear un proyecto nuevo, completando los campos en una serie de cinco ventanas de configuración.

Fig5. Ventana de configuración 1

Fig6. Ventana de configuración 3


Las ventanas de los pasos 2,4 y 5 no requieren cambios en los valores por defecto, y solo bastara confirmar y avanzar.

Hasta el momento ya hemos creado y configurado un proyecto Quartus para nuestra Tarjeta EP2C5, de aquí en adelante nos resta diseñar el circuito digital que se quiere implementar. Como es de conocimiento el diseño de circuitos con FPGA implica la construcción de hardware y esto puede llevarse a cabo en diferentes niveles de abstracción, empezando desde una descripción del circuito utilizando el lenguaje HDL hasta la interconexión gráfica de bloques lógicos como si estuviéramos montando
físicamente el circuito, véase la siguiente imagen. 

Fig7. Construcción del circuito en diagrama



 

Así mismo, un módulo descriptivo HDL elaborado con Verilog o VHDL pueden convertirse en símbolo gráfico y utilizarse en el diagrama de bloques.

Una vez que terminado el diseño del circuito y posterior a la verificación mediante la simulación, solo resta asignar que pines de la placa FPGA corresponderán a los pines entrada y salida del diagrama de circuito, para este fin en Quartus tenemos la utilidad pin-planner, la lista de pines se genera automáticamente luego de compilar el proyecto.

Como ultimo paso nos queda cargar el firmware conectando el USB-Blaster al nuestro ordenador, el cual sera detectado y nos permitirá pasar el bitstream a nuestro FPGA. hay dos modos para este fin. 

  • JTAG. proceso volátil, memoria RAM(LUT)
  • ASP. proceso no volátil, usa el chip EEPROM de la placa


Fig8. Cargando el firmware

 

Aquí dejo algunos enlaces que contiene información adicional de la tarjeta FPGA EP2C5T144. 

Creando un circuito de prueba

Daremos algo de vida a nuestra placa creando un circuito sencillo que hará destellar un led a una una frecuencia aproximada de 0.7Hz. 

Para este circuito consideramos el led conectado al pin3 y el pin 17 donde esta el cristal oscilador de 50MHz, utilizare el lenguaje Verilog para crear un modulo descriptivo de la funcionalidad lógica(Algoritmo).

Un contador de 26-bits se incrementara con cada pulso del reloj, por lo tanto el valor de este contado sera desde 0 hasta 2^26. Si el periodo de cada pulso es 0.02us (50MHz), entonces nuestro contador se desbordara a los 0.02us * 2^26, es decir 1.34 segundos. Ahora mediante una asignación concurrente conectaremos el led al bit mas significativo(bit 26) del contador, considerando este punto, el bit 26 mantendrá un nivel según el rango en que se encuentra el contador.

  • rango 0000000h - 1FFFFFFh -> bit 26 = 0, led apagado
  • rango 2000000h - 3FFFFFFh -> bit 26 = 1, led encendido

Entonces, creamos un archivo HDL a nuestro proyecto con la siguiente descripción.

module test(clk, ledpin);
input clk;     //Fosc=50MHz en pin 7, Tosc=0.02us
output ledpin; //Led del pin3
reg [25:0] cnt; //Contador de 26bit
always @(posedge clk)  //Con cada pulso de reloj
begin
   cnt <= cnt + 25'd1; //Incrementa y desborda en (2^25)*Tosc
end
assign ledpin = cnt[25]; //Asigna el bit 26 del contador al pin del LED
                    //Este bit cambia cada (2^25 *Tosc) / 2
endmodule

Aquí les comparto un vídeo donde se crea, configura, diseña y carga el firmware de este circuito a la EP2C5.


Continuando con el ejemplo, en este vídeo muestro como convertir nuestro código verilog a un símbolo y luego utilizarlo en una diagrama de bloques para efectuar un diseño gráfico del circuito. 



Para finalizar solo quiero agradecer tu visita a mi blog, espero que estas cuantas lineas hubieran sido de ayuda, se que no detalle muchos pasos pero cualquier consulta al respecto puede escribirme al correo y con mucho gusto tratare de colaborar con lo que se pueda. 


Pablo Zarate Arancibia.
Ing. Electrónico
pablinzte@gmail.com