El primer borrador de un informe sobre el EDVAC (comúnmente abreviado como Primer borrador ) es un documento incompleto de 101 páginas escrito por John von Neumann y distribuido el 30 de junio de 1945 por Herman Goldstine , oficial de seguridad del proyecto clasificado ENIAC . Contiene la primera descripción publicada del diseño lógico de una computadora que utiliza el concepto de programa almacenado , que se ha conocido como la arquitectura de von Neumann ; el nombre se ha vuelto controvertido debido a que von Neumann no nombró a otros contribuyentes.
Von Neumann escribió el informe a mano mientras viajaba en tren a Los Álamos, Nuevo México , y envió por correo las notas manuscritas a Filadelfia . Goldstine hizo mecanografiar y duplicar el informe. Si bien la fecha del informe mecanografiado es el 30 de junio, cinco días antes, el 25 de junio, se distribuyeron 24 copias del primer borrador a personas estrechamente relacionadas con el proyecto EDVAC. El interés en el informe hizo que se enviara a todo el mundo; Maurice Wilkes, de la Universidad de Cambridge , citó su entusiasmo por el contenido del informe como el impulso para su decisión de viajar a los Estados Unidos para las Conferencias de la Escuela Moore en el verano de 1946.
Von Neumann describe un diseño detallado de un "sistema de computación digital automático de muy alta velocidad". Lo divide en seis subdivisiones principales: una parte aritmética central, CA; una parte de control central, CC; memoria, M; entrada, I; salida, O; y memoria externa (lenta), R, como tarjetas perforadas , cinta de teletipo o cinta de acero o de alambre magnético .
El CA realizará sumas, restas, multiplicaciones, divisiones y raíces cuadradas. Otras operaciones matemáticas, como logaritmos y funciones trigonométricas, se realizarán con búsquedas en tablas e interpolación , posiblemente bicuadrática . Señala que la multiplicación y la división se podrían realizar con tablas de logaritmos, pero para mantener las tablas lo suficientemente pequeñas, se necesitaría interpolación y esto a su vez requiere multiplicación, aunque quizás con menos precisión.
Los números se deben representar en notación binaria . Calcula que 27 dígitos binarios (no utilizó el término " bit ", acuñado por Claude Shannon en 1948) serían suficientes (lo que daría una precisión de 8 decimales), pero redondea a números de 30 bits con un bit de signo y un bit para distinguir los números de los órdenes, lo que da como resultado una palabra de 32 bits que él llama ciclo menor. Se debe utilizar la aritmética del complemento a dos , lo que simplifica la resta. Para la multiplicación y la división, propone colocar el punto binario después del bit de signo, lo que significa que todos los números se tratan como si estuvieran entre −1 y +1 [a] y, por lo tanto, los problemas de cálculo deben escalarse en consecuencia.
Se deben utilizar tubos de vacío en lugar de relés debido a la capacidad de los tubos de funcionar en un microsegundo frente a los 10 milisegundos de los relés.
Von Neumann sugiere (Sección 5.6) mantener la computadora lo más simple posible, evitando cualquier intento de mejorar el rendimiento mediante la superposición de operaciones. Las operaciones aritméticas deben realizarse con un dígito binario a la vez. Calcula que la suma de dos dígitos binarios lleva un microsegundo y que, por lo tanto, una multiplicación de 30 bits debería llevar alrededor de 30 2 microsegundos o aproximadamente un milisegundo, mucho más rápido que cualquier dispositivo informático disponible en ese momento.
El diseño de Von Neumann se basa en lo que él llama "elementos E", que se basan en la neurona biológica como modelo, [1] [2] pero son dispositivos digitales que, según él, pueden construirse utilizando uno o dos tubos de vacío. En términos modernos, su elemento E más simple es una puerta AND de dos entradas con una entrada invertida (la entrada de inhibición). Los elementos E con más entradas tienen un umbral asociado y producen una salida cuando el número de señales de entrada positivas alcanza o supera el umbral, siempre que la (única) línea de inhibición no esté pulsada. Afirma que los elementos E con más entradas pueden construirse a partir de la versión más simple, pero sugiere que se construyan directamente como circuitos de tubos de vacío, ya que se necesitarán menos tubos.
A partir de estos elementos E se construyen bloques de funciones más complejos. Muestra cómo utilizar estos elementos E para construir circuitos de suma, resta, multiplicación, división y raíz cuadrada, así como bloques de memoria de dos estados y circuitos de control. No utiliza terminología de lógica booleana .
Los circuitos deben estar sincronizados con un reloj de sistema maestro derivado de un oscilador de tubo de vacío , posiblemente controlado por cristal . Sus diagramas lógicos incluyen un símbolo de punta de flecha para indicar un retardo de tiempo unitario, ya que los retrasos de tiempo deben tenerse en cuenta en un diseño sincrónico. Señala que en un microsegundo un pulso eléctrico se mueve 300 metros, de modo que hasta velocidades de reloj mucho más altas, por ejemplo 10 8 ciclos por segundo (100 MHz), la longitud del cable no sería un problema.
Se menciona la necesidad de detectar y corregir errores, pero no se explica en detalle.
Un concepto de diseño clave enunciado, y posteriormente denominado arquitectura de Von Neumann , es una memoria uniforme que contiene tanto números (datos) como órdenes (instrucciones).
"El dispositivo requiere una memoria considerable. Aunque parece que las distintas partes de esta memoria tienen que realizar funciones que difieren un poco en su naturaleza y considerablemente en su propósito, es tentador tratar la memoria entera como un órgano y hacer que sus partes sean lo más intercambiables posible para las distintas funciones enumeradas anteriormente". (Sección 2.5)
"Las órdenes que recibe CC provienen de M, es decir, del mismo lugar donde se almacena el material numérico." (Sec. 14.0)
Von Neumann estima la cantidad de memoria necesaria basándose en varias clases de problemas matemáticos, incluyendo ecuaciones diferenciales ordinarias y parciales , ordenamiento y experimentos de probabilidad . De estos, las ecuaciones diferenciales parciales en dos dimensiones más tiempo requerirán la mayor cantidad de memoria, mientras que las tres dimensiones más tiempo están más allá de lo que se puede hacer utilizando la tecnología que estaba entonces disponible. Concluye que la memoria será la subdivisión más grande del sistema y propone 8.192 ciclos menores (palabras) de 32 bits como objetivo de diseño, con 2.048 ciclos menores todavía útiles. Calcula que unos pocos cientos de ciclos menores serán suficientes para almacenar el programa.
Propone dos tipos de memoria rápida: la línea de retardo y el tubo iconoscopio . Cada ciclo menor debe ser direccionado como una unidad (direccionamiento de palabras, Sec. 12.8). Las instrucciones deben ejecutarse secuencialmente, con una instrucción especial para cambiar a un punto diferente en la memoria (es decir, una instrucción de salto).
Los dígitos binarios de una memoria de línea de retardo pasan a través de la línea y se devuelven al principio. Acceder a los datos en una línea de retardo impone una penalización de tiempo mientras se espera que vuelvan a aparecer los datos deseados. Después de analizar estos problemas de tiempo, propone organizar la memoria de línea de retardo en 256 "órganos" de línea de retardo (DLA), cada uno de los cuales almacena 1024 bits, o 32 ciclos menores, llamados ciclo mayor. Un acceso a la memoria selecciona primero el DLA (8 bits) y luego el ciclo menor dentro del DLA (5 bits), para un total de 13 bits de dirección.
En cuanto a la memoria del iconoscopio, reconoce que cada punto de escaneo en la cara del tubo es un capacitor y que un capacitor puede almacenar un bit. Se necesitará un escaneo de muy alta precisión y la memoria durará poco tiempo, quizás tan poco como un segundo, y por lo tanto será necesario volver a copiarla ( refrescarla ) periódicamente.
En la sección 14.1, von Neumann propone el formato de las órdenes, al que llama código. Los tipos de órdenes incluyen las operaciones aritméticas básicas, mover ciclos menores entre CA y M (carga y almacenamiento de palabras en términos modernos), una orden ( s ) que selecciona uno de dos números en función del signo de la operación anterior, entrada y salida y transferir CC a una ubicación de memoria en otro lugar (un salto). Determina la cantidad de bits necesarios para los diferentes tipos de órdenes, sugiere órdenes inmediatas donde la siguiente palabra es el operando y analiza la conveniencia de dejar bits de repuesto en el formato de órdenes para permitir una memoria más direccionable en el futuro, así como otros propósitos no especificados. Se analiza la posibilidad de almacenar más de una orden en un ciclo menor, con poco entusiasmo por ese enfoque. Se proporciona una tabla de órdenes, pero no se incluyó ninguna discusión sobre las instrucciones de entrada y salida en el Primer Borrador.
La publicación y distribución del informe fue fuente de amarga acritud entre las facciones del equipo de diseño de EDVAC por dos razones. [3] En primer lugar, el informe fue posteriormente considerado una divulgación pública que se produjo más de un año antes de que se presentara la solicitud de patente de EDVAC, lo que hizo que la patente final no fuera ejecutable; en segundo lugar, algunos miembros del equipo de diseño de EDVAC sostuvieron que el concepto de programa almacenado había evolucionado a partir de reuniones en la Escuela Moore de Ingeniería Eléctrica de la Universidad de Pensilvania anteriores a la actividad de von Neumann como consultor allí, y que gran parte del trabajo representado en el Primer Borrador no era más que una traducción de los conceptos discutidos al lenguaje de la lógica formal en el que von Neumann era fluido. Por lo tanto, el hecho de que von Neumann y Goldstine no mencionaran a otros como autores en el Primer Borrador llevó a atribuir el crédito solo a von Neumann. (Véase el efecto Matthew y la ley de Stigler ).