Sistemas programables y memorias
Dos temas que parecen distintos y son el mismo: guardar bits en un lugar y leerlos después. Una memoria guarda datos; un dispositivo lógico programable guarda la función que va a cumplir el circuito.
01El mapa de las memorias
| Tipo | Volátil | Escritura | Ciclos | Dónde se la encuentra |
|---|---|---|---|---|
| SRAM | Sí | Inmediata | Ilimitados | Variables del micro, caché del procesador. Rápida y cara: seis transistores por bit. |
| DRAM | Sí | Inmediata | Ilimitados | Memoria principal de una PC. Un transistor y un capacitor por bit: barata y densa, pero necesita refresco constante. |
| ROM de máscara | No | En fábrica | — | Grabada en el silicio. Sólo se justifica en producciones enormes. |
| PROM | No | Una vez | 1 | Se «queman» fusibles internos. Histórica. |
| EPROM (UVPROM) | No | Eléctrica | ~100 | La de la ventanita de cuarzo: se borra con luz ultravioleta en 20 minutos. Todavía aparece en equipos industriales viejos. |
| EEPROM | No | Byte a byte | ~106 | Configuración y calibración. Lenta para escribir (milisegundos por byte). |
| Flash NOR | No | Por bloques | ~105 | Programa de micros y BIOS. Se lee byte a byte, lo que permite ejecutar desde ella. |
| Flash NAND | No | Por páginas | 103–105 | Pendrives, tarjetas SD, discos SSD. Mucho más densa y barata, pero sólo se lee por páginas. |
| FRAM | No | Inmediata | 1014 | Registro continuo de datos sin desgaste. Cara y de poca capacidad. |
- ¿Pierde el contenido al cortar la alimentación? Volátil o no volátil.
- ¿Cuántas veces se puede escribir? Ese número —la endurance— decide si sirve para guardar un dato que cambia todo el tiempo.
- ¿Qué tan rápido responde? Nanosegundos en SRAM, microsegundos en Flash de lectura, milisegundos para escribir una EEPROM.
Una celda de Flash NAND de un pendrive barato aguanta unos 3000 ciclos de borrado. Si un programa escribiera siempre en la misma posición, el pendrive moriría en minutos. Lo que lo evita es el wear leveling: el controlador reparte las escrituras por todo el chip y lleva un mapa de qué bloque físico corresponde a cada dirección lógica. Es un sistema completo, con su propio procesador, adentro de cada pendrive y de cada SSD.
02Cómo se organiza y cómo se selecciona
Una memoria es una matriz de celdas con tres grupos de patas: direcciones, datos y control. La capacidad se escribe como «palabras × bits»: una 62256 es de 32 K × 8, es decir 32 768 posiciones de un byte.
| Señal | Nombre | Qué hace |
|---|---|---|
| CS̄ / CĒ | Chip select | Habilita el chip. Es lo que permite tener varias memorias en el mismo bus: sólo responde la seleccionada. |
| OĒ | Output enable | Saca el dato al bus. Sin él, las salidas quedan en alta impedancia. |
| WĒ | Write enable | Escribe lo que hay en el bus de datos en la dirección presente. |
| A0…An | Direcciones | Eligen la posición. |
| D0…D7 | Datos | Bidireccionales, con salidas de tres estados. |
- Cada chip de 32 K necesita 15 líneas de dirección (A0 a A14), porque 215 = 32 768.
- La línea A15 no va a los chips: se usa para elegir cuál responde. Con A15 = 0 se habilita el primero (direcciones 0000 a 7FFF) y con A15 = 1 el segundo (8000 a FFFF).
- Si hubiera cuatro chips, se usarían A15 y A16 con un decodificador 2 a 4; con ocho, tres líneas y un 74HC138.
Si dos chips quedaran habilitados a la vez, ambos pondrían datos en el bus: es un cortocircuito entre salidas, exactamente lo que el ERC del esquemático advierte.
03Dispositivos lógicos programables
Un circuito con cincuenta compuertas se puede armar con quince integrados de la serie 74 —y ocupar media plaqueta— o con un solo chip programable que se configura por software. Esa es toda la idea, y su evolución tiene tres etapas.
Una matriz de conexiones programables entre las entradas y un conjunto de compuertas AND-OR. Reemplazan una decena de integrados 74. La GAL22V10 fue durante años el comodín de cualquier diseño digital.
Varios bloques tipo GAL unidos por una matriz de interconexión. Cientos de macroceldas, configuración no volátil —funciona apenas se enciende— y tiempos muy predecibles. Ideal para lógica de pegado y decodificación.
Miles o millones de bloques lógicos con memoria, multiplicadores y hasta procesadores adentro. Se configura al encender desde una Flash externa. Es lo que permite crear hardware a medida: veinte contadores funcionando en paralelo, sin que ninguno espere al otro.
No se dibujan compuertas: se describe el comportamiento en un lenguaje de descripción de hardware —VHDL o Verilog— y una herramienta de síntesis lo convierte en conexiones concretas.
-- VHDL: un contador de 8 bits. No es un programa: es una descripción de circuito.
process(clk)
begin
if rising_edge(clk) then
if reset = '1' then cuenta <= (others => '0');
else cuenta <= cuenta + 1;
end if;
end if;
end process;
La diferencia conceptual con C es enorme: acá no hay instrucciones que se ejecuten una tras otra. Todo lo descrito ocurre a la vez, en cada flanco de reloj. Si se escriben diez procesos, los diez funcionan simultáneamente, como diez circuitos separados.
| Microcontrolador | FPGA | |
|---|---|---|
| Ejecución | Secuencial: una instrucción por vez | Paralela: todo al mismo tiempo |
| Se programa en | C, assembler | VHDL, Verilog |
| Costo | Dólares | Decenas o cientos de dólares |
| Consumo | Bajo | Alto |
| Fuerte en | Lógica compleja, cuentas, comunicación, control | Muchas señales rápidas en paralelo, procesamiento de video, adquisición veloz |
| Ejemplo típico | Termostato, tablero, instrumento | Analizador lógico, procesamiento de imagen, radio definida por software |
Si el problema entra en un microcontrolador, va en microcontrolador: es más barato, más simple y más fácil de mantener. La FPGA se justifica cuando hace falta paralelismo real o tiempos de nanosegundos: contar veinte encoders a la vez, procesar un video cuadro por cuadro, generar señales con precisión de un ciclo de reloj. Elegir FPGA «porque es más moderna» suele terminar en un proyecto caro que hace lo mismo que un chip de dos dólares.
04En el laboratorio
Con una EPROM o SRAM en protoboard, llaves en las líneas de dirección y LED en las de datos, recorrer posiciones y anotar el contenido. Manejar CS̄ y OĒ a mano y observar qué pasa con las salidas cuando el chip está deshabilitado: quedan en alta impedancia, ni en 1 ni en 0.
Con un 74HC138 y dos memorias, armar el mapa de 64 KB del ejemplo. Verificar con LED cuál chip se habilita según A15. Después conectar mal a propósito los dos CS̄ juntos y observar en el osciloscopio el conflicto en el bus de datos.
Escribir la misma posición de EEPROM del micro en un lazo rápido y llevar la cuenta de escrituras mostrándola por el puerto serie. Calcular cuánto tardaría en llegar al millón de ciclos. Después escribir el mismo dato rotando entre 16 posiciones y comparar la vida útil resultante.
Si hay una placa disponible, describir en VHDL el contador de la sección anterior, sintetizarlo y verlo funcionar en LED. Después duplicar el proceso para tener dos contadores con distinto divisor y comprobar que corren en paralelo, sin que uno demore al otro. Ese experimento es la diferencia entre hardware y software.
05Errores frecuentes
| Síntoma | Causa habitual |
|---|---|
| El bus de datos muestra valores raros | Dos chips habilitados a la vez: conflicto entre salidas. Revisar la decodificación. |
| La memoria lee siempre lo mismo | Alguna línea de dirección quedó sin conectar o en corto, y varias direcciones apuntan al mismo lugar. |
| La escritura no se guarda | WĒ y OĒ activos a la vez, o el tiempo de escritura no se respetó. |
| Un dato guardado en EEPROM se corrompe | Escritura interrumpida por una caída de tensión. Habilitar brown-out y no escribir en cada vuelta del lazo. |
| El pendrive «se murió» | Celdas agotadas, o la tabla de asignación corrupta por desconectarlo durante una escritura. |
| La FPGA no arranca al encender | Es volátil: necesita cargar su configuración desde la Flash externa. Si esa Flash no está programada, no hay circuito. |
| El diseño en VHDL «anda mal el orden» | Se lo pensó como un programa secuencial. En hardware todo ocurre a la vez: el orden de las líneas no define el orden temporal. |
06Autoevaluación
¿Cuántas líneas de dirección necesita una memoria de 8 K × 8?
8 K = 8192 = 213, así que 13 líneas (A0 a A12) y 8 líneas de datos.
¿Qué diferencia hay entre SRAM y DRAM?
La SRAM guarda cada bit en un biestable de seis transistores: es rápida y no necesita mantenimiento, pero cara y poco densa. La DRAM usa un capacitor por bit: es densa y barata, pero se descarga y necesita refresco permanente.
¿Para qué sirve la señal CS̄?
Para habilitar el chip. Permite conectar varias memorias al mismo bus: la decodificación de direcciones activa sólo una por vez, y las demás quedan con sus salidas en alta impedancia.
¿Por qué una Flash NAND aguanta menos ciclos que una EEPROM?
Porque prioriza densidad y costo: celdas más chicas, guardando incluso varios bits por celda. Eso desgasta más el óxido en cada borrado. La EEPROM es mucho menos densa pero soporta del orden de un millón de ciclos por byte.
¿Qué es el wear leveling y dónde está implementado?
Repartir las escrituras entre todos los bloques para que ninguno se desgaste primero. Lo hace el controlador que está dentro del pendrive, la tarjeta o el SSD, con su propio procesador y su tabla de traducción.
¿Qué hay adentro de una FPGA en lugar de compuertas?
Tablas de consulta (LUT): memorias muy chicas que guardan la tabla de verdad de la función deseada, con un flip-flop asociado. Programar la FPGA es escribir esas tablas y las conexiones entre bloques.
¿Cuál es la diferencia esencial entre programar en C y describir en VHDL?
En C las instrucciones se ejecutan una tras otra; en VHDL se describe hardware que funciona todo al mismo tiempo. Diez procesos en VHDL son diez circuitos simultáneos, no diez pasos.
¿Cuándo conviene una FPGA en vez de un microcontrolador?
Cuando hace falta paralelismo real o tiempos de nanosegundos: muchas señales rápidas atendidas a la vez, procesamiento de video, adquisición de alta velocidad. Para control, comunicación y cálculo moderado, el micro es más barato y más simple.
Un CPLD funciona apenas se enciende y una FPGA no. ¿Por qué?
Porque la configuración del CPLD es no volátil y vive dentro del chip, mientras que la FPGA carga su configuración al arrancar desde una memoria Flash externa. Si esa memoria falla, la FPGA queda sin función.
¿Por qué una EPROM tiene una ventanita de cuarzo?
Porque se borra exponiendo el chip a luz ultravioleta, que descarga las compuertas flotantes de las celdas. Por eso, una vez grabada, la ventana se tapa con una etiqueta: la luz del sol la borraría con el tiempo.