Mostrando entradas con la etiqueta FPGA. Mostrar todas las entradas
Mostrando entradas con la etiqueta FPGA. Mostrar todas las entradas

martes, 21 de octubre de 2014

Lógica progamable (III): Ejemplo sencillo, síntesis de una GAL en lugar de 4 puertas

Este ejemplo espero que sea sencillo de entender, aunque requiere saber un poco de electrónica digital, pero no creo que sea difícil de entender. voy a hacer un diseño con tres puertas, y luego reemplazarlos por una GAL, el caso es extrapolable a cualquier tamaño de circuito.

Disponemos de cuatro señales de entrada, que llamaremos A, B, C y D. Voy a hacer un circuito que haga lo siguiente, sume el producto de A con B con el contrario del producto de C con D. El esquema sería el siguiente:



Necesitamos dos puertas AND, una NOT y una OR, por tanto usaremos tres chips, uno con 4 puertas AND del que usaremos solo 2, otro con 4 puertas NOT del que usaremos solo una, y otro con 8 puertas NOT del que usaremos solo una.

Seguro que mas de uno se pone y lo desarrolla con un solo tipo de puertas usando álgebra de Boole, ya que siempre se puede reducir AND a NOR y al contrario OR a NAND, pero eso es cargarse el ejemplo, y a mi me salen de todas formas 5 puertas mínimo.

Esto se puede simplificar usando un solo chip con una pequeña GAL con al menos 5 celdas AND/OR, usando solo una línea de código:

Pin A,B,C,D entrada ;
Pin S Salida;

S = (A AND B)  OR (NOT(C AND D));


Un solo chip y una ecuación en una línea de Abel, Verilog o VHDL, y a correr. Lo puedo meter en un chip de los que se fabriquen hoy día, y si mañana dejan de hacerlo, busco otro chip, le meto mi línea y a funcionar.

Mi descripción del funcionamiento (mi "programa fuente") es la síntesis del circuito, y luego cuando genero (lo que podemos llamar "compilar") es el desarrollo interno del circuito. Solo tengo que mantener mi definición, y generar (que no compilar) el circuito específico para el chip que quiero usar, y si cambia el chip solo tengo que volver a generar mi definición.

lunes, 20 de octubre de 2014

Lógica progamable (II): ¿que es eso del HDL?

Los dispositivos lógicos necesitan configurarse, y la forma de hacerlo es usando un lenguaje similar a los de programación denominados genéricamente HDL, Hardware Description Language o Lenguaje de DESCRIPCION de Hardware, y subrayo el DESCRIPCION ya que no se comportan como lenguajes normales de programación.

Un ejemplo típico de la diferencia, usando C, para intercambiar dos variables entre si se usa una auxiliar, y si queremos cambiar el contenido de la variable A por el de la variable B, usando como auxiliar la C debemos introducir 3 líneas:

C = A;
A = B;
B = C;

Sin embargo en un HDL como Verilog o Abel, que usan la sintaxis del C, las variables no existen, solo existen señales, y para intercambiar una señal A y una señal B se usa:

A = B;
B = A;

En VHDL, para evitar el uso de la asignación y dejar claro que no son variables sino señales se usaría

A <= B;
B <= A;

Ambas sentencias se ejecutan SIMULTANEAMENTE, no secuencialmente, que es la gran diferencia en este tipo de lenguajes, estamos configurando un chip, por tanto todo se ejecuta a la vez, a no ser que expresamente lo sincronicemos con una señal de reloj.

El lenguaje por excelencia para esto es VHDL, basado en la sintaxis del ADA y que gusta mas a los electrónicos, pero es igual de ponente que Verilog, basado en C y que suele gustar mas a los programadores, o ABEL, también basado en C, que se suele usar mas en la definición de chips mas pequeños como las GAL, en el que el hardware puede definirse usando ecuaciones lógicas o tablas de verdad, y no requiere grandes recursos para generar el hard.

sábado, 18 de octubre de 2014

Lógica progamable (I): Que es y porque usar una FPGA no es ir contra el espítiru del retro

Voy a contar lo que es una FPGA, y espero que se entienda que usarlas no es ir contra el retro, sino que son los dispositivos que va a salvar a la larga nuestra afición.

Comienzo explicando que es un transistor de forma sencilla de entender, pero quiero advertir que la siguiente explicación no es técnica sino para que se entienda, si sabes como funciona un transistor sáltatelo (o ríete sin piedad).

Un transistor explicado de la forma mas sencilla posible es como una resistencia variable que se controla por una señal.
Un transistor tiene tres patas, colector, base y emisor. En su comportamiento como amplificador, si disponemos de una fuente de alimentación que proporciona 30 voltios y la conectamos al colector, y por la base introducimos una señal cuyo voltaje varía entre 0 y 3 voltios, en el emisor aparece una señal idéntica, pero amplificada en el rango de 0 a 30 voltios.

Pero también pude funcionar de otra manera, como conmutador. Si en el colector tenemos una fuente de 5 voltios, y en la base aplicamos menos de 2 voltios, en el emisor no hay corriente, pero si ponemos entre 2 y 5 voltios en el emisor aparecen los 5 voltios de la fuente. De esta manera el transistor se comporta como un interruptor controlado por una señal externa.

Los transistores pueden disponer de varias entradas de base, o combinarse varios entre entre sí, y de esta forma se forman las puertas lógicas, según la familia (TTL, CMOS, RTL, etc.) se varía su tipo y la forma de combinar los transistores para formar las puertas lógicas. Las tres puertas básicas son:

  • NOT de una entrada, un inversor, si en su entrada hay 0 voltios en su salida hay 5, y si en su entrada hay 5 voltios en su salida hay cero.
  • AND con dos entradas, si ambas son de 5 voltios hay 5 voltios en su salida, en cualquier otro caso hay 0.
  • OR con dos entradas, si en alguna de las dos o en ambas hay 5 voltios en su salida hay 5 voltios, y 0 voltios si ambas son cero.
Luego hay combinaciones, NAND y NOR añaden una puerta NOT a la salida, XOR combina AND y OR, etc.

Una puerta por tanto es una combinación de transistores, diodos, resistencias y condensadores, se puede usar directamente estos componentes como en la segunda generación de ordenadores.

Tener que usar tantos transistores era muy complejo, por lo que con el nacimiento de los circuitos integrados se introdujeron en chips, agrupando los componentes en puertas.

Aun simplificando el diseño con las puertas, hacía falta un buen puñado de ellas para formar los procesadores, y se consiguió unir un montón de puertas en un chip. Un procesador es un chip en el que hay un montón de puertas lógicas en su interior, podemos hablar de miles (hoy día de millones), que se comportan de una forma organizada para que en función de sus entradas aparezca una salida. Por tanto los procesadores son combinaciones preestablecidas de puertas lógicas. A esto se le llama lógica cableada, ya que las puertas han sido cableadas entre sí y no se puede alterar.

Tras la memoria de vídeo debe existir algo que tome el valor de la memoria y lo convierta en una señal de vídeo que entienda un monitor, para lo que existen unos chips auxiliares que con un criterio de temporización muy estricto leen la memoria, a partir de ella generan los puntos para el barrido de la pantalla y la envían a la salida de vídeo. En un ordenador antiguo eso se hacía con chips, entre 15 y 30 chips se dedicaba solo a esto, en un ZX80 por ejemplo hay un montón de chips para esto (en total 21 chips entre procesador, rom, memoria, etc). De aquí surgieron los chips gráficos, que simplificaban esto agrupando todos los componentes en un solo chip, por eso en un ZX81 hay muchos menos chips (4 en total), todos se agruparon en la ULA (agrupa 17 chips en su interior).

Alrededor del procesador se ubica la memoria, y para el acceso a la misma se requiere de unas puertas que habiliten los chips de memoria a usar en cada momento, en función de las señales del procesador, en un gomas son los 4 chips que están en la parte superior, entre la ULA y el procesador. Pero en los modelos posteriores se unieron estos 4 chips en uno solo, agrupando las funciones se consigue reducir el número de chips.

El problema que encontraron los diseñadores es que para estos nuevos chips que combinaban otros hacía falta hacer diseños específicos, y pronto buscaron soluciones para desarrollar un chip genérico con muchas puertas lógicas, que se pudiera configurar de forma sencilla y así en lugar de desarrollar chips a medida, lo que era caro, se diseñaron chips genéricos con las puertas sin enlazar entre sí, que se configuraban para combinarse en la forma que deseara el fabricante de ordenadores, por lo que se simplificó y abarató mucho el diseño de estos nuevos chips.

Los primeros se debían configurar en fábrica durante su producción, lo que se llama "programación con máscara" (programación como sinónimo de configuración, no hay un programa en su interior, solo puentes que conectan las puertas). La ULA del spectrum es un ejemplo de este tipo de chips configurados en fábrica.

Luego se diseñaron chips cuyas puertas podían enlazarse aplicando una señal eléctrica, por lo que los fabricantes de ordenadores compraban los chips en blanco y los configuraban con un "programador", similar a uno para las EPROM (nuevamente ni en estos ni en las EPROM hay un programa, se usa programar como sinónimo de configurar). Así nacieron las PAL (Programable Array Logic, matriz lógica programable) con un conjunto de puertas AND sin configurar y las PLA (Programable Logic Array, lógica programable en matriz), en las que había un conjunto de puertas AND y OR, ambos sistema se podían configurar solo una vez quedando fijas para siempre, y luego surgieron las GAL (Generic Array Lógic, matríz lógica genérica) que son un tipo de PLA que se pueden borrar y volver a configurar varias veces, hay GAL que añaden flip-flop a la salida para conseguir una lógica mas flexible.

En estos dispositivos las vías entre las puertas (esto nuevamente es una simplificación para que se entienda) dispone de un tipo especial de diodo, que mediante una corriente mas alta de los habitual se puede polarizar en sentido directo o inverso, una vez configurados pueden permitir o impedir el paso de la corriente a su través, por lo que se cablea el dispositivo.

Hoy día los dispositivos lógicos modernos son las FPGA y sus hermanas pequeñas las CPLD. En ambos dispositivos disponemos de una enorme matriz de puertas, que podemos unir como se desee, formando cualquier combinación de puertas lógicas, por lo que reemplazan directamente a las PAL, PLA y GAL con ventajas, ya que no hay planos AND/OR, sino puertas genéricas que podemos combinar como deseemos. Pero al ser de gran tamaño, pueden configurarse para reemplazar a cualquier chip, incluyendo los procesadores con sus miles de puertas.

En su interior no se ejecuta un programa que simule un comportamiento, sino que hay un circuito electrónico operativo, que es igual al de los chips a los que reemplaza, solo que usa otro tipo de componentes.

Tras toda esta explicación, que espero seguir ampliando, lo que deseo es que penséis que una FPGA o un CPLD no emulan nada, sino que son chips iguales a los demás, solo que se pueden configurar de millones de formas diferentes, pudiendo reemplazar a cualquier otro chip existente. Esto les hace ser el futuro de nuestra afición, si un chip deja de fabricarse se puede reemplazar por uno de estos dispositivos (eso ya pasa en muchas placas arcade), que es un reemplazo fiel del original, aunque internamente no tenga la misma estructura, el resultado es que si deseamos arreglar un Spectrum con la ULA estropeada, o si el procesador 6502 de nuestro Apple II muere, podemos reemplazarlo por algo que hará exactamente lo mismo, no emulando sino reemplazando al original.