← Volver al blogConstruir un ordenador con relés · 18/18

Memoria de 1 bit: el átomo de la RAM y el final de Construir un ordenador con relés

Construye una celda de memoria de relés de 1 bit: Write alto para guardar, bajo para retener. Recorre el camino del relé a la RAM, además del Z3 de Zuse, el Mark I de Aiken y el primer error informático de Grace Hopper.

Matthias KellerMatthias Keller
12 min de lectura
Chalkboard feature illustration for “Memoria de 1 bit: el átomo de la RAM y el final de Construir un ordenador con relés”

En la publicación anterior, construimos el latch D: un circuito que acepta una entrada Data y una línea de habilitación de escritura, y guarda fielmente lo que ve en Data en el momento en que se activa Write. Era la versión del mundo de los relés de una posición de memoria controlada, y casi una celda de memoria completa y reutilizable. Casi. Faltaba una pequeña pieza de empaquetado.

Esta es la publicación 18 de Construir un ordenador con relés, la última parada. Vamos a terminar esa celda de memoria, a llamarla por lo que es y después a hacer algo hacia lo que esta serie ha ido avanzando durante diecisiete publicaciones: recorrer juntos cada peldaño de la escalera que hemos subido, desde un único interruptor que hace clic hasta el bit almacenado.

Te damos la bienvenida al átomo de la RAM.

Empaquetar la celda de memoria de 1 bit

El latch D ya hace el trabajo difícil. Tiene una línea de habilitación de escritura (a menudo llamada EN o WE) y una línea Data (D), y conserva el último valor de D que vio mientras Write estaba alta. Pero como latch sin encapsular, expone su topología interna —la realimentación de relés acoplados en cruz y los pines de salida directos— e invita al usuario a cablear las cosas de maneras que causan problemas.

Una celda de memoria de 1 bit es el latch D empaquetado con un contrato de interfaz limpio:

  • Write — una única línea de control. Actívala a nivel alto (1) para escribir; mantenla a nivel bajo (0) para leer o simplemente retener.
  • Data — el bit que quieres almacenar: 0 o 1.
  • Q — la salida almacenada. Refleja Data mientras Write vale 1; conserva su último valor cuando Write vuelve a 0.

Todo lo demás —la realimentación acoplada en cruz, el inversor que evita el estado prohibido— queda sellado dentro. El usuario nunca necesita verlo. La tabla de estados de esta celda es refrescantemente pequeña:

WriteDataQ (siguiente)
0—Q (retenido)
100
111

Ese guion en la columna Data cuando Write vale 0 es la cuestión central. Cuando Write está baja, Data es irrelevante. La celda no escucha. Conserva lo último que oyó, y seguirá conservándolo mientras reciba alimentación.

Observa lo que la tabla de estados no puede decir: no puede indicarte cuál es Q en este momento sin saber qué se escribió antes. La memoria tiene estado. No es una función pura de sus entradas actuales: es una función de sus entradas y de su historia. Esa es la diferencia profunda entre los circuitos combinacionales (AND, OR, XOR, el sumador) y los circuitos secuenciales (latches, biestables, registros, RAM). Los circuitos combinacionales no tienen estado: aplicas entradas, lees salidas, listo. Los circuitos secuenciales llevan el pasado al presente. Tu latch recuerda.

Escalar: de un bit a un ordenador

Aquí es donde la abstracción demuestra su valor.

Ocho de estas celdas, escritas a la vez, almacenan un byte: un número de 0 a 255 que tu procesador puede cargar, modificar y almacenar en una única operación. Mil bytes forman un kilobyte. Un millón de bytes forman un megabyte. Mil millones de bytes forman un gigabyte. Los ordenadores modernos contienen decenas de miles de millones de estas celdas en un chip del tamaño de un sello postal, alternando entre Write y Hold millones de veces por segundo.

Cada celda obedece la misma tabla de estados de dos filas mostrada arriba. Nada de esa tabla cambia cuando reduces el relé hasta convertirlo en un transistor y empaquetas cuatro mil millones de ellos en un centímetro cuadrado de silicio. El interruptor se hizo más pequeño. La lógica no se movió.

Pruébalo tú mismo

Abajo está la celda memory-bit: el latch D empaquetado como una celda de memoria limpia de 1 bit, ejecutándose como una auténtica simulación de relés en tu navegador. No es una animación: los contactos de los relés están conmutando físicamente, la corriente circula y Q conserva un estado real.

Una celda de memoria de 1 bit hecha con relés. Activa Write y ajusta Data para guardar un bit; desactiva Write y los relés lo retienen sin ninguna entrada tuya.
Open in the Relay Lab

Sigue esta secuencia de forma deliberada:

  1. Guarda un 1. Ajusta Data = 1 y después activa Write = 1. La celda captura el valor; Q pasa a 1. Ahora vuelve a desactivar Write a 0. Data ya no importa: muévela, cámbiala a 0, desconéctala en tu imaginación. Q permanece en 1. Acabas de guardar un bit.

  2. Sobrescribe con un 0. Ajusta Data = 0 y luego vuelve a llevar Write brevemente a nivel alto. Q baja a 0. Desactiva Write. Q conserva 0. Acabas de sobrescribir el bit.

  3. Confirma que retiene en silencio. Deja Write y Data en 0. Q sigue en 0. La celda no reacciona a las entradas; simplemente recuerda lo último que le dijiste.

Acabas de guardar un bit a mano. Ahora imagina un millón de ellos: todos idénticos, cada uno conservando pacientemente su propio 0 o 1, cada uno sordo al mundo exterior hasta que se activa su línea Write. Esa imagen es la RAM.

La escalera que subiste

Esta serie tenía un plan desde el primer clic de la publicación 1. Antes de mirar los ordenadores de relés que funcionaban con circuitos como estos, repasemos juntos cada peldaño, porque, vistos todos de una vez, el recorrido es notable.

Publicación 1: el propio relé. Un interruptor que controla la electricidad. Una bobina atrae una armadura; la armadura mueve un contacto; un circuito acciona un interruptor en otro circuito. Cableado como normalmente abierto es un búfer; cableado como normalmente cerrado es un inversor. Ese clic no era solo un sonido agradable. Era la semilla de todo.

Publicaciones 2–3: serie y paralelo. Dos interruptores en serie, y la corriente solo fluye cuando ambos están cerrados: AND. Dos interruptores en paralelo, y la corriente fluye cuando cualquiera de ellos se cierra: OR. Aún no hay símbolos de puertas, solo cable y el comportamiento observable de la corriente. La lógica ya estaba allí, escrita en cobre.

Publicaciones 4–7: las puertas con nombre. AND, OR y NOT recibieron nombres y símbolos, gracias al álgebra de George Boole y a la demostración de Claude Shannon de 1937 de que las redes de relés y el álgebra booleana son la misma cosa. El búfer, el inversor, el trío de puertas: todas construcciones desde primeros principios en hardware de relés.

Publicaciones 8–9: las puertas universales. NAND y NOR: cada una capaz de implementar cualquier función lógica existente. La sencillez desorienta: un tipo de puerta, cableado con creatividad, produce todas las demás. Después vino el célebre uso predominante de puertas NOR en el Apollo Guidance Computer (AGC): la misión a la Luna voló con un circuito que ahora podría construirse en el simulador.

Publicaciones 10–11: XOR y XNOR. El detector de diferencias. XOR produce 1 cuando sus entradas no coinciden, una idea sorprendentemente poderosa que aparece en la detección de errores, el cifrado y, de forma crucial, la aritmética.

Publicaciones 12–13: el sumador. XOR produce el bit de suma; AND produce el acarreo. Dos interruptores, dos salidas, suma binaria. Después el semisumador se elevó a sumador completo con un acarreo de entrada: componible, encadenable, la arquitectura de acarreo en cascada que todos los procesadores aún usan en su núcleo. George Stibitz demostró que esto funcionaba en 1937 sobre la mesa de su cocina, usando relés y una lata de tabaco para los contactos.

Publicaciones 14–16: realimentación y reloj. La primera idea puramente secuencial de la serie: cablea un inversor de modo que su salida alimente su propia entrada y el circuito oscila. Domestica esa oscilación hasta convertirla en una onda cuadrada regular y tendrás un reloj: el latido que permite a los circuitos secuenciales actualizarse de forma sincronizada. Sin reloj, un ordenador es una red combinacional que calcula una vez y se detiene. Con reloj, calcula repetidamente, paso a paso, siguiendo un programa.

Publicación 17: el latch D. La realimentación se volvió constructiva: relés acoplados en cruz que conservan un estado hasta que se les ordena cambiarlo. La línea de habilitación Write que evita el estado prohibido —ambos relés activados—. Memoria controlada en un circuito de relés.

Publicación 18: la celda de memoria de 1 bit. Empaqueta el latch D tras una interfaz limpia. Write alta para guardar; Write baja para retener. Apila ocho para un byte. Apila millones para un megabyte.

Y ahora, la recompensa.

Un ordenador es, en el fondo, cuatro cosas:

  1. Un reloj: un oscilador regular que marca el tiempo e indica a todos los demás circuitos cuándo actuar.
  2. Una ALU: una unidad aritmética y lógica: sumadores, comparadores, operaciones booleanas.
  3. Memoria: almacenamiento que conserva su estado entre tics de reloj, durante los programas y a través de los ciclos de alimentación.
  4. Control y selección: multiplexores, decodificadores y lógica de instrucciones que encaminan los datos correctos al lugar correcto en el momento correcto.

Ahora has construido cada una de esas piezas con relés, a mano, desde primeros principios. El reloj: publicaciones 14–16. La ALU: publicaciones 12–14. La memoria: publicaciones 16–18. El control y la selección: publicaciones 7 y 12 (el multiplexor, el decodificador). El único paso que queda es la escala y organización: cablear miles de estos bloques de construcción bajo la dirección de un programa. Pero toda la física está aquí. No te falta ninguna idea fundamental. Solo te falta más cable.

Las máquinas que hicieron exactamente esto

Los ordenadores de relés reales de la década de 1940 hacían exactamente lo que has estado haciendo; simplemente lo hacían a una escala que llenaba salas y costaba millones de dólares.

El Z3 de Konrad Zuse (1941) es ampliamente reconocido como la primera máquina informática totalmente programable y controlada de forma automática. Zuse, un ingeniero civil alemán que construyó sus primeros ordenadores en el salón berlinés de sus padres, ensambló aproximadamente 2.000 relés en una máquina capaz de ejecutar un programa almacenado en una tira de película perforada. El Z3 utilizaba aritmética de coma flotante y podía reprogramarse sin recablearse. Fue destruido en un bombardeo aliado en 1943. Zuse fue presentado brevemente en esta serie cuando hablamos de aritmética, pero el Z3 merece aquí su momento completo: fue la primera máquina que coincidía con la arquitectura que hemos estado construyendo. Reloj, ALU, memoria y control, ensamblados con los mismos interruptores que hacen clic.

En Estados Unidos, Howard Aiken, en Harvard y trabajando con IBM, construyó el Mark I, formalmente el Calculador Automático Controlado por Secuencia de IBM, que se presentó en 1944. Con 51 pies de largo, ocho pies de alto y un peso de unas cinco toneladas, el Mark I contenía aproximadamente 3.300 relés junto a un bosque de contadores mecánicos, embragues y árboles de levas. Tardaba de 3 a 5 segundos en multiplicar dos números. Recibía instrucciones en una cinta de papel perforada y funcionó de manera continua durante años, calculando tablas balísticas, tablas logarítmicas y, más tarde, trabajos matemáticos para el Proyecto Manhattan. Los visitantes de Harvard podían oírlo desde fuera del edificio: el traqueteo rítmico de un ordenador de 3.300 relés en funcionamiento no era sutil.

Al Mark I le siguió el Mark II en 1947, una máquina electromecánica similar, también en Harvard. Y el Mark II nos dio una de las historias más perdurables de la informática.

El 9 de septiembre de 1947, un equipo de operadores que incluía a una joven oficial de la Marina y matemática llamada Grace Hopper encontró que el Mark II se comportaba de forma errática. Rastrearon el fallo hasta el relé n.º 70 del panel F. Al extraer el relé, encontraron una polilla —una polilla real y biológica— atrapada entre los contactos, que impedía que cerraran correctamente. Retiraron la polilla cuidadosamente con pinzas y la pegaron en el cuaderno de operaciones con una nota: “Primer caso real de un bug encontrado.”

La página del cuaderno de registro aún existe. Se exhibe en el Museo Nacional de Historia Estadounidense del Smithsonian. La polilla sigue allí, bajo su trozo de cinta.

La palabra «bug» para una avería técnica ya se había usado informalmente durante décadas: Thomas Edison la empleó ya en 1878 para describir fallos en su aparato. Pero esa polilla pegada es el incidente que todo el mundo recuerda, porque es perfectamente literal. Un insecto real, en un relé real, en un ordenador real. La metáfora hecha carne. Y ocurrió en un ordenador de relés porque los ordenadores de relés eran lo bastante grandes y abiertos para que las polillas entraran. Un transistor está sellado. Una polilla no tiene ninguna oportunidad.

El linaje: relé → válvula de vacío → transistor → chip

Los ordenadores de relés funcionaron desde finales de la década de 1930 hasta comienzos de la de 1950. Después fueron desplazados, rápida y completamente, por los ordenadores de válvulas de vacío. Las válvulas no tenían piezas móviles: en vez de una armadura mecánica, un electrodo de rejilla dentro de una envolvente de vidrio evacuada controlaba el flujo de electrones y realizaba la misma función de conmutación en microsegundos en lugar de milisegundos. La lógica era idéntica. La arquitectura era idéntica. Solo cambió el interruptor.

Las válvulas de vacío fueron desplazadas a su vez por los transistores, demostrados en Bell Labs en 1947 y comercializados durante la década de 1950. Un transistor es un interruptor semiconductor: un pequeño voltaje aplicado a un terminal de base controla una corriente mucho mayor entre colector y emisor. Sin piezas móviles, sin envolvente de vidrio, sin filamento que se funda. Millones de operaciones por segundo. La lógica era idéntica. La arquitectura era idéntica. Solo cambió el interruptor.

Después, los transistores se integraron por miles de millones en obleas de silicio: el circuito integrado, nacido en 1958 y aún la tecnología fundamental de todos los dispositivos informáticos que posees. La lógica es idéntica. La arquitectura es idéntica. Solo el interruptor es microscópico.

El relé que conociste en la publicación 1, haciendo clic de forma audible con su armadura cargada por un muelle, y el transistor que conmuta silenciosamente en tu teléfono 500 billones de veces por segundo hacen lo mismo. Ambos son interruptores controlados: electricidad que usa un circuito para gobernar otro. El álgebra de Shannon de 1937 describe ambos con los mismos símbolos y deriva las mismas tablas de verdad.

La historia del hardware informático es, en una interpretación, la historia del relé. Todo lo que vino después es una versión más rápida, silenciosa y pequeña de la misma idea.

Adónde ir desde aquí

Tres recomendaciones sinceras para quien ha llegado al final de esta serie.

Primera: construye algo más grande. Los circuitos de esta serie tenían el tamaño apropiado para una publicación de blog. ¿Qué ocurre cuando encadenas ocho sumadores completos, conectas un registro para conservar el resultado, añades un reloj y observas cómo se ejecuta de verdad una aritmética de 8 bits? DigiSim Relay Lab contiene exactamente esa progresión: una máquina sumadora de 8 bits en la que puedes ver cómo el acarreo se propaga por las ocho etapas, un contador de acarreo en cascada de 3 bits que hace clic recorriendo el binario en secuencia, un biestable D disparado por flanco que solo captura datos en el flanco ascendente del reloj y un divisor de frecuencia que reduce a la mitad una señal de reloj con un único biestable. Estas son las construcciones que asombran: programas reales ejecutándose sobre lógica de relés, con cada clic visible y audible. No están integradas en una publicación de blog porque una publicación de blog es demasiado pequeña para ellas. Merecen todo el lienzo.

Segunda: lee CODE, de Charles Petzold. Esta serie se inspiró profundamente en él. El libro de Petzold empieza con código Morse y linternas y termina en una CPU funcional, construida paso a paso desde primeros principios de una manera a la vez rigurosa y humana. Cubre el mismo terreno que hemos cubierto aquí y luego sigue adelante, hacia el lenguaje de máquina, el ensamblador y los sistemas operativos. Si quieres un libro que haga por la lectura lo que DigiSim hace por la simulación, CODE es ese libro.

Tercera: construye el tuyo. Abre el lienzo de DigiSim, coloca un relé y cablea algo que se te haya ocurrido mientras leías esta serie. El salto de «seguir el circuito de otra persona» a «diseñar el mío» es la verdadera graduación. No requiere conocimientos nuevos. Tienes todo lo que necesitas. Haz que los relés hagan clic según tus propias reglas.

Hace diecisiete publicaciones conociste un interruptor accionado por electricidad. Hoy construiste una celda de memoria que conserva un bit en el silencio y recorriste la línea desde ese clic hasta cada ordenador jamás construido. Esa línea no se ha roto.

Ve cómo un ordenador hecho de relés funciona de verdad: DigiSim Relay Lab.

Convierte la idea en un circuito funcional.