FPGA's, como si los micros no fueran suficiente...

Todo cuanto tiene que ver con la obtención, almacenamiento y proceso de la información digital, sus aplicaciones y el software y hardware utilizado.
Mensaje
Autor
Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

FPGA's, como si los micros no fueran suficiente...

#1 Mensaje por Anilandro »

Estos días, en el trabajo, han cambiado una de las tres viejas bombas de calor de 80 KW, y para conectarla a nuestro sistema de monitorización y control he tenido que volver a meterme con el lenguaje de programación de los autómatas Sauter, que hacía años que no miraba. El sistema es curioso para quienes estamos acostumbrados a los lenguajes clásicos, porque el concepto no es secuencial, con una lista de órdenes que se ejecutan una tras otra, sino paralelo, como un circuito electrónico formado por puertas lógicas, biestables, comparadores y generadores de pulsos...

...El lenguaje Sauter CASE FBD, muy parecido al que utiliza Siemens, es de este tipo, y tuve que abordarlo hace dieciséis años cuando tras la inauguración del nuevo edificio quedó claro que con la programación original de la empresa instaladora (y con las cuatro o cinco chapuzas posteriores que llevaron a cabo) la cosa no funcionaba ni a tiros...

El caso es que al trastear de nuevo con puertas, líneas de conexión, módulos de entrada de hardware y de comunicación con el software, me ha recordado unos gráficos que últimamente veo bastante por la red asociados a unos componentes denominados FPGA, o Field Programmable Gate Array, es decir, una matriz de puertas programables, con la que podemos crear casi cualquier circuito digital, desde un simple controlador de semáforos a un verdadero microcontrolador...

...No obstante el concepto es también comparable a la diferencia entre el CASE FBD y el C, ya que estos dispositivos, a diferencia de los secuenciales, funcionan principalmente en paralelo. En ellos el concepto de impulsos de reloj no es determinante y pueden acometer distintas tareas de manera simultánea y atender distintos eventos al instante sin utilizar las socorridas interrupciones de los microcontroladores. Otra de las características es que su velocidad es muy alta incluso en los chips sencillos, pudiendo controlar entradas, procesar y activar salidas a varios cientos de Megaciclos sin dificultad.

Los chips FPGA hace ya muchos años que se usan, pero siempre habían sido sistemas propietarios, cerrados por el fabricante, algunos incluso programados una sola vez para tareas específicas, pero hace poco tiempo un informático llamado Clifford Wolf aplicando ingeniería inversa, consiguió romper el sistema del fabricante de los Lattice iCE40, que hizo público y dio lugar al proyecto open IceStorm, y una vez roto el maleficio, han ido apareciendo otros sistemas abiertos en forma de placas de desarrollo...

El problema es que la mayoría de estas placas siguen siendo caras y sobre todo el lenguaje de descripción (ya que en realidad no es "programación") se las trae con respecto a los habituales. Por ejemplo, el más conocido es el denominado VHDL, que viene a significar "lenguaje de descripción de hardware para circuitos integrados de alta velocidad", aunque mucha gente prefiere llamarlo por su complicación Very High Difficulty Language... También he leído que existen entornos más amigables como el Verilog e implementaciones de sistemas gráficos, pero de ellos sólo conozco el nombre y por lo tanto aún es pronto para realizar comentarios sobre ellos.

Pero bueno, sigo enrollándome en un tema que me interesa pero del que reconozco no saber prácticamente nada, y que estoy seguro que Heli podría explicar de forma mucho más clara y concisa... El caso es que, aunque sea para experimentar un rato, he encargado por Ebay una placa de desarrollo FPGA muy sencilla y económica, del tipo Altera Cyslonell EP2C5T144, que con el programador USB incluido sale por unos 15€... Cuando la reciba ya veré que partido puedo sacarle...

Imagen


Un saludo
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Avatar de Usuario
Rovellat
Mensajes: 9611
Registrado: Mar May 26, 2009 9:39 pm
Ubicación: Palma de Mallorca (España)

Re: FPGA's, como si los micros no fueran suficiente...

#2 Mensaje por Rovellat »

Yo empezé con esto hace ya muuuuchos años:

https://en.wikipedia.org/wiki/Programmable_Array_Logic

Es lo mismo, y no es lo mismo, según como se mire. El tema tiene dos vertientes, la primera diseñar la lógica a medida; la segunda desanimar a los clonadores; luego ya me metí en ordenadores, microprocesadores, y la vaca (el tiempo) no da para tanto.

Con FPGAs, creo que hasta puedes diseñar facilmente una ALU, con las microinstrucciones que quieras; pero en el fondo para que, si las hay a cientos.

Suerte en la nueva aventura, y ya nos iras contando.
Cielo azul sobre campo de mieses, ánimo.
Constitución Española:
Todos los españoles tienen el deber de trabajar y el derecho al trabajo.
Todos los españoles tienen derecho a disfrutar de una vivienda digna y adecuada.

Avatar de Usuario
heli
Mensajes: 1946
Registrado: Mié Sep 06, 2006 7:28 am
País: España
Ciudad: Alcalá de Henares
Ubicación: Alcala de Henares (Madrid, España)
Contactar:

Re: FPGA's, como si los micros no fueran suficiente...

#3 Mensaje por heli »

Con FPGAs, creo que hasta puedes diseñar facilmente una ALU
Es mucho mejor que eso, puedes meter todo un micro dentro de la FPGA, cableado junto con toodos los periféricos que necesites!
En esta página hay muuchos micros estándar (para facilitar la programación, siempre puedes diseñar uno pero necesitaras un compilador para programarlo de forma facil) y otros bloques funcionales ya diseñados: https://opencores.org/projects

Puedes meter una VGA y un 486 en una FPGA, junto con un timer, DMA etc y hacerte un PC en un chip!
O un PACMAN: https://github.com/skiphansen/pano_man

Imagen
¡No es imposible, lo que pasa es que no sabes como hacerlo!
Aka: no es difícil si sabes como.
http://heli.xbot.es

Avatar de Usuario
fusion
Mensajes: 4573
Registrado: Lun Feb 20, 2006 1:12 pm
País: Madrid
Ciudad: Alcobendas
Ubicación: Madrid

Re: FPGA's, como si los micros no fueran suficiente...

#4 Mensaje por fusion »

Yo usaba CPLDs, que también es lógica programable. El problema es que programarlos en paralelo es complicado y además hay que simular a ver si las latencias permiten velocidad es suficiente.
La lógica programable suele emplearse cuando hace falta mucha potencia de cálculo en paralelo y mucha velocidad, por ejemplo cuando hacen falta muchas salidas digitales. Un uso que se le está dando es paralelizar la RAM de los ordenadores
El problema es que programarlas empleando lenguaje VHDL es complicado, por eso Xilinx permite programarlas en lenguaje C pero las tarjetas que valen para ello cuestan 3500 euros y el programador otros tantos

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: FPGA's, como si los micros no fueran suficiente...

#5 Mensaje por Anilandro »

Sí, he visto algunas placas de desarrollo de FPGA's incluso por 15.000 $, un disparate. Pero desde que se han roto los candados de los fabricantes hay cosas interesantes por menos de 100 €. En concreto hay una placa de código abierto, la Alhambra II, con una matriz Lattice de potencia media, creo que desarrollada en España por un tal Obijuan y compatible con el IDE gráfico también de código abierto Icestudio. El precio viene a salir por unos 60 € con envío incluido, toda la documentación y muchos recursos y ejemplos colgados en Github

Además creo que es compatible a nivel de patillaje con los shields de Arduino

Imagen

Imagen

https://alhambrabits.com/alhambra/

Características de la placa Alhambra II:

Placa de desarrollo FPGA (iCE40HX1K-TQ144 de Lattice) (1.280 células lógicas)
Hardware abierto
Compatible con el conjunto de herramientas de código abierto Icestorm, de Clifford Wolf
Multiplataforma: Linux / Mac / Windows
Distribución de pines similar a Arduino UNO / BQ Zum.
Puede reutilizar la mayoría de los escudos disponibles Arduino / Zum
Controla tus robots/printbots desde un FPGA
Oscilador MEMS de 12 MHZ
Interruptor ON/OFF
Voltaje de alimentación: 6 - 17v
Corriente de entrada máxima: 3A (Perfecto para alimentar sus robots)
20 pines de entrada/salida de 5V.
8 pines de entrada/salida de 3,3 V.
Conector micro-B USB para programar el FPGA desde la PC (igual que la Zum Board)
El dispositivo USB FTDI 2232H permite la programación FPGA y la interfaz UART a una PC
Botón de reinicio
8 leds de propósito general (leds de usuario)
2 pulsadores de uso general
Leds TX / RX
4 entradas analógicas a través de bus I2C
Protección del hardware contra cortocircuitos, polaridad inversa, etc.

...No es nada cara, pero como aún no sé de qué va la cosa, he elegido algo menos potente pero mucho más barato (16 €, incluyendo programador y portes)

Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Avatar de Usuario
heli
Mensajes: 1946
Registrado: Mié Sep 06, 2006 7:28 am
País: España
Ciudad: Alcalá de Henares
Ubicación: Alcala de Henares (Madrid, España)
Contactar:

Re: FPGA's, como si los micros no fueran suficiente...

#6 Mensaje por heli »

A Obijuan le conozco de la asociación de robótica.. estaba en la Uni Rey Juan Carlos, parece que ha prosperado bien.
Sí, he visto algunas placas de desarrollo de FPGA's incluso por 15.000 $, un disparate
Todas las herremientas de desarrollo profesionales suelen tener un precio disparatado. Los ICE (In Circuit Emulator) con los que empecé a programar valían decenas de miles de € actuales. Son productos muy específicos de los que se venden pocas unidades y su clientes potenciales son empresas tecnológicas que les sacan muuucho benefico.
Estan fuera del alcance de los aficionados. Pero también hay herramientas GNU, y placas Open Hardware etc!!! No llegan a las prestaciones de los equipos profesionales pero nos valen para cacharrear.
¡No es imposible, lo que pasa es que no sabes como hacerlo!
Aka: no es difícil si sabes como.
http://heli.xbot.es

Avatar de Usuario
fusion
Mensajes: 4573
Registrado: Lun Feb 20, 2006 1:12 pm
País: Madrid
Ciudad: Alcobendas
Ubicación: Madrid

Re: FPGA's, como si los micros no fueran suficiente...

#7 Mensaje por fusion »

Creo se utilizan en las tarjetas gráficas. Hay una batalla abierta Intel-Nvidia-Xilinx-Google-Amazon-Microsoft por desarrollar el chip más potente a fin de emplearlo en inteligencia artificial para superar la de los humanos, en medio de la batalla Intel ha comprado Altera: la compañía líder mundial en procesadores compra a la líder mundial en FPGAs

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: FPGA's, como si los micros no fueran suficiente...

#8 Mensaje por Anilandro »

Sobre la placa FPGA de 15€ que he pedido, la Altera Cyclone II EP2C5T144, he encontrado una web con bastante información, pdf's, vídeos, tutoriales, etc:

https://naylampmechatronics.com/cpld-y- ... 5t144.html


Imagen


Donde figuran las principales características:

Voltaje de alimentación: 5 - 9V DC
Regulador de voltaje en placa de 1,2V para el core del FPGA y otro de 3,3V para los puertos de entrada/salida.
FPGA: Altera (ahora Intel) Cyclone II EP2C5T144
Número de IO E/S: 89
Elementos lógicos: 4608 (16 elementos lógicos por bloque)
Bloques de memoria RAM M4K (4 Kbits + 512 bits de paridad): 26 (total: 119898 bits)
Memoria embebida (Kbits): 117
Multiplicadores embebidos de 18x18 bits: 13
PLLs: 2
Canales diferenciales: 58
Oscilador en la placa de 50Mhz, conectado al pin 17 (soporta hasta 300Mhz)
Conector de programación: JTAG
Memoria EEPROM EPCS4 de 4Mbit en placa (sólo programable a través del puerto ASP)
Todos los pines de E/S están conectados a las cabeceras y están bien identificados en el PCB
Leds programables en placa: 3 (conectados a los pines 3, 7 y 9)
Led indicador de alimentación
Pulsador de reset
Compatible con el software IDE Altera Quartus 2 y su edición web libre
Soporta desarrollo basado en Nios II
Temperatura de funcionamiento: 0-70ºC
Dimensiones: 80*60mm


Imagen


Saludos a todos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: FPGA's, como si los micros no fueran suficiente...

#9 Mensaje por Anilandro »

Bueno, he recibido la placa Altera Cyclone II y me he puesto a entrarle un sencillísimo programa, aunque no interaccionar con el exterior no puede calificarse ni de "Hola Mundo"...

El IDE Altera Quartus II (ahora de Intel) es bastante complejo, con muchísimas opciones y configuraciones cuyo sentido no está claro para un novato, y no es fácil comenzar con él sin perder antes algunos días. Por cierto, en mi ordenador portátil de casa he instalado sin problemas la versión 11. Este chip concreto, el EP2C5T144C8, se contempla hasta la versión 13, pero es absurdo cargar esta última que ocupa más de 14 GB, cuando la 11 se reduce a "solo" 4,5 GB... En el trabajo, en cambio, también con un ordenador con W7, no hubo forma de instalarlo directamente. El proceso se interrumpía casi al final con un "error exception no sé qué". Al fin pude arrancarlo copiando el contenido de mis carpetas "Altera" desde el portátil hasta este último.

Tras muchos ejemplos de prueba y error he podido hacer el primer programa, que en forma gráfica tiene esta forma:

Imagen


...Lo cual en código VHDL es equivalente a...

***************************************

LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
ENTITY p1 IS
PORT
(
Ent_1 : IN STD_LOGIC;
Ent_2 : IN STD_LOGIC;
Sal_1 : OUT STD_LOGIC
);
END p1;
ARCHITECTURE bdf_type OF p1 IS
BEGIN
Sal_1 <= Ent_1 AND Ent_2;
END bdf_type;

***************************************

...Y en Verilog...

***************************************

// Archivo Verilog
module p1(
Ent_1,
Ent_2,
Sal_1
);
input wire Ent_1;
input wire Ent_2;
output wire Sal_1;
assign Sal_1 = Ent_1 & Ent_2;
endmodule

***************************************

Básicamente primero se definen las entradas (Ent_1 y Ent_2) y salidas (Sal_1), y luego la fórmula boleana que relaciona ambas cosas, y que en este caso es el resultado de una función AND.

En VHDL es: Sal_1 <= Ent_1 AND Ent_2;

En Verilog es: assign Sal_1 = Ent_1 & Ent_2;

...Posteriormente a compilar el programa se tienen que asignar los pines físicos a las entradas y salidas.
Cargar el programa desde el Quartus II a la FPGA tampoco es fácil. Hay dos maneras, a través del JTAG se carga en RAM, con lo cual al quitar la alimentación se pierde, si se carga a través del ASP en cambio queda guardada en memoria permanente (no sé si en EEPROM o en FLASH), y al hacer un reset o dar alimentación, la propia FPGA lo copia a RAM y se configura...

En fin, ya iré poniendo un pequeño tutorial de la secuencia, porque el Quartus II es sin duda muy potente pero cualquier cosa menos intuitivo...


Saludos a todos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Avatar de Usuario
Anilandro
Mensajes: 4905
Registrado: Dom Feb 11, 2007 10:16 pm
Ubicación: Islas Baleares, España
Contactar:

Re: FPGA's, como si los micros no fueran suficiente...

#10 Mensaje por Anilandro »

La plaquita Altera Cyclone-II incorpora tres LED conectados directamente a los pines 3, 7 y 9, y un pulsador conectado entre el pin 144 y masa. El verdadero programa "Hola Mundo" consistirá en que en reposo estén encendidos los LED 7 y 9, y apagado el 3, pero en el momento de accionar el pulsador se apaguen el 7 y el 9 y se encienda el 3.

Abrimos el Quartus II y trazamos el siguiente diagrama:

Imagen

Observamos que la entrada, que hemos llamado pulsador va al la salida Led3 a través de una puerta inversora NOT. Como la entrada estará conectada a un pulsador que va a masa, va a necesitar una resistencia de PULL-UP para mantenerse a HIGH en estado normal y a LOW con el pulsador apretado. Por este motivo, en reposo la entrada del NOT estará normalmente a HIGH y la salida a LOW, y por tanto el Led3 estará apagado.

...Pero a la vez la entrada también irá directamente a los Led 7 y 9, que en reposo estarán encendidos y se apagarán al apretar el pulsador.

...Y todo esto muy bien, pero ya dije que para llegar a este punto había hecho hecho falta dedicar un par de días probando opciones con el Quartus-II. Más o menos el camino seguido ha sido éste:

==================================================

PARA CREAR UN NUEVO PROYECTO

01 ) Arrancamos el Quartus II
02 ) File > New Project Wizart
03 ) Indicamos el directorio del proyecto (si no existe, lo crea)
04 ) En Pag 1, "What is the name of projetc" y el de "Top-Level Design entity" ponemos el mismo nombre del directorio del proyecto y "Next"
05 ) En Pag 2, nada y "Next"
06 ) En Pag 3, elegir FPGA: Family: Cyclone II, Available Devices: EP2C5T144C8 y "Next"
07 ) En Pag 4, nada y "Next"
08 ) En Pag 5, muestra el sumario y "Finish"
09 ) Los proyectos se guardan en formato .qpf

==================================================

PARA CREAR EL ARCHIVO GRÁFICO

01 ) Una vez creado el proyecto...
02 ) "File" > "New" > "Block Diagram/Schematic File"
03 ) En este caso debemos crear un gráfico con 1 entrada, 3 salidas y una puerta NOT
04 ) Doble click sobre zona de diseño abre la ventana "Symbol"
05 ) El "Libraries" abrimos carpeta raíz > "Primitives" > "Pin" > "Input" > "OK"
06 ) Ahora fijamos con un click el pin de entrada "pin_name1"
07 ) Nuevo doble click y de igual forma elegimos el pin "Output" > "OK"
08 ) Fijamos uno, luego con "ctrl + click" copiamos y arrastramos un segundo y luego un tercero, en columna uno sobre otro, que se identifican como originalmente "pin_name2", "pin_name3", "pin_name4",
09 ) Doble click y vamos a "Logic" > "NOT" > "OK", y fijamos la puerta inversora NOT
19 ) Ahora realizaremos las conexiones. Pulsamos "Ortogonal Node Tool", para crear líneas
20 ) Si es necesario ampliamos el gráfico con el botón "Zoom Tool" en forma de lupa, y click izquierdo (derecho reduce)
21 ) Creamos conexión desde la salida del Imput a la entrada de la NOT, y de la salida de ésta a la entrada del Output superior "pin_name2"
22 ) Desde un punto de la conexión Input-NOT trazamos otra hasta la entrada del Output medio "pin_name3"
23 ) Desde cualquier punto de esta última conexión trazamos otra a entrada de Output inferior "pin_name4"
24 ) Ahora podemos cambiar los nombres de los pines. Pulsamos botón de texto "A".
25 ) Al pin de entrada "pin_name1" lo llamaremos "Pulsador"
26 ) A los pines de salida los llamaremos "LED3", "LED7" y "LED9", que corresponderán a los LED's físicamente unidos a los pines 3, 7 y 9
27 ) Una vez acabado el gráfico lo guardamos en formato ".bdf"

...Lo siguiente será asignar los pines físicos y cargar este archivo en la placa Altera Cyclone-II. Pero eso lo dejaré para otro mensaje.

Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados