Введение

Первый проект доклада о EDVAC (обычно сокращаемый до «Первый проект») — это неполный документ объёмом 101 страница, написанный Джоном фон Нейманом и распространенный 30 июня 1945 года Германом Голдстином, сотрудником службы безопасности секретного проекта ENIAC. Он содержит первое опубликованное описание логической схемы компьютера, использующего концепцию хранимой программы, которая впоследствии получила название архитектуры фон Неймана; само название стало предметом споров из-за того, что фон Нейман не упомянул других авторов.

История

Фон Нейман написал отчет от руки во время поездок на поезде в Лос-Аламос, штат Нью-Мексико, и отправлял рукописные заметки обратно в Филадельфию. Голдстайн распорядился напечатать и сделать копии отчета. Несмотря на то, что дата на напечатанном отчете – 30 июня, 24 экземпляра Первого проекта были распространены среди лиц, тесно связанных с проектом EDVAC, на пять дней раньше, 25 июня. Интерес к отчету привел к тому, что его разослали по всему миру; Морис Уилкс из Кембриджского университета отметил, что его энтузиазм от содержания отчета послужил стимулом для его решения поехать в Соединенные Штаты на Лекции в школе Мура летом 1946 года.

Синопсис

Фон Нейман описывает детальный проект "сверхбыстрой автоматической цифровой вычислительной системы". Он разделяет её на шесть основных подразделений: центральное арифметическое устройство, CA; центральное устройство управления, CC; память, M; ввод, I; вывод, O; и (медленная) внешняя память, R, такая как перфокарты, ленты телетипа или магнитная проволока или стальная лента. CA будет выполнять сложение, вычитание, умножение, деление и извлечение квадратного корня. Другие математические операции, такие как логарифмы и тригонометрические функции, должны выполняться посредством поиска в таблицах и интерполяции, возможно, биквадратической. Он отмечает, что умножение и деление можно было бы реализовать с использованием логарифмических таблиц, но для поддержания таблиц достаточно компактными потребуется интерполяция, которая, в свою очередь, требует умножения, хотя, возможно, и с меньшей точностью. Числа должны быть представлены в двоичном формате. Он полагает, что 27 двоичных разрядов (он не использовал термин "бит", который был введен Клодом Шенноном в 1948 году) будет достаточно (обеспечивая точность в 8 десятичных знаков), но округляет до 30-битных чисел, включая знаковый бит и бит для различения чисел и команд, что приводит к 32-битному слову, которое он называет малым циклом. Для упрощения вычитания используется арифметика дополнительного кода. Для умножения и деления он предлагает размещать двоичную точку после знакового бита, что означает, что все числа рассматриваются в диапазоне от -1 до +1, и, следовательно, задачи вычислений должны быть соответствующим образом масштабированы.

Конструкция схемы

Вместо реле используются вакуумные лампы, поскольку лампы способны работать за одну микросекунду, в то время как реле – за 10 миллисекунд. Фон Нейман предлагает (раздел 5.6) максимально упрощать компьютер, избегая любых попыток повышения производительности за счет перекрытия операций. Арифметические операции должны выполняться по одному двоичному разряду за раз. Он оценивает, что сложение двух двоичных разрядов занимает одну микросекунду, а значит, умножение 30-битного числа должно занять около 302 микросекунд, или примерно одну миллисекунду, что значительно быстрее любого вычислительного устройства, доступного в то время. Конструкция Фон Неймана основана на так называемых "E-элементах", которые, будучи цифровыми устройствами, смоделированы по образу биологического нейрона и, по его словам, могут быть построены из одной или двух вакуумных ламп. В современных терминах его простейший E-элемент представляет собой двухвходовую логическую И-операцию с одним инвертированным входом (ингибирующий вход). E-элементы с большим количеством входов имеют пороговое значение и выдают выходной сигнал, когда число положительных входных сигналов достигает или превышает этот порог, при условии, что (единственный) ингибирующий канал не выдает импульс. Он утверждает, что E-элементы с большим количеством входов можно построить из простейшей версии, но предлагает создавать их непосредственно в виде вакуумно-ламповых схем, так как это потребует меньше ламп. Более сложные функциональные блоки должны быть построены из этих E-элементов. Он показывает, как использовать эти E-элементы для построения схем сложения, вычитания, умножения, деления и извлечения квадратного корня, а также блоков памяти на два состояния и управляющих схем. Он не использует терминологию булевой логики. Схемы должны быть синхронными, с главным системным тактовым генератором, полученным от вакуумного генератора, возможно, с кварцевой стабилизацией. Его логические схемы включают символ стрелки для обозначения единичной задержки времени, поскольку задержки времени необходимо учитывать при синхронном проектировании. Он отмечает, что за одну микросекунду электрический импульс проходит 300 метров, поэтому до значительно более высоких тактовых частот, например, 10⁸ циклов в секунду (100 МГц), длина проводов не будет представлять собой проблему. Упоминается необходимость обнаружения и исправления ошибок, но она не детализируется.

Конструкция памяти

Ключевой концепцией дизайна, сформулированной и впоследствии названной архитектурой фон Неймана, является единая память, содержащая как числа (данные), так и команды (инструкции). "Устройство требует значительной памяти. Хотя различные части этой памяти должны выполнять функции, несколько отличающиеся по своему характеру и существенно различающиеся по назначению, тем не менее, соблазнительно рассматривать всю память как единый орган, а ее части – как можно более взаимозаменяемыми для перечисленных выше функций." (Раздел 2.5)

"Команды, поступающие в CC, приходят от M, то есть из того же места, где хранятся числовые данные." (Раздел 14.0)

Фон Нейман оценивает необходимый объем памяти, исходя из нескольких классов математических задач, включая обыкновенные и частные дифференциальные уравнения, сортировку и вероятностные эксперименты. Из них уравнения с частными дифференциальными уравнениями в двух измерениях плюс время потребуют наибольшего объема памяти, а в трех измерениях плюс время – превысят возможности доступных в то время технологий. Он приходит к выводу, что память будет самым крупным подразделением системы, и предлагает 8192 младших цикла (слова) по 32 бита в качестве целевого показателя, при этом 2048 младших циклов также будут полезны. Он полагает, что для хранения программы будет достаточно нескольких сотен младших циклов. Он предлагает два типа быстрой памяти: линия задержки и иконоскопическая трубка. Каждый младший цикл должен рассматриваться как единица (адресация по словам, раздел 12.8). Инструкции должны выполняться последовательно, со специальной инструкцией для перехода к другой точке в памяти (то есть инструкцией перехода). Двоичные цифры в памяти на линии задержки проходят по линии и возвращаются в начало. Доступ к данным в линии задержки требует временных затрат на ожидание возврата нужных данных. После анализа этих вопросов синхронизации он предлагает организовать память на линии задержки в 256 "органов" линии задержки (DLA), каждый из которых хранит 1024 бита или 32 младших цикла, называемых основным циклом. Доступ к памяти сначала выбирает DLA (8 бит), а затем младший цикл внутри DLA (5 бит), в общей сложности 13 адресных бит. Для иконоскопической памяти он отмечает, что каждая точка сканирования на лицевой стороне трубки является конденсатором, способным хранить один бит. Потребуется очень высокая точность сканирования, а память будет работать лишь короткое время, возможно, всего секунду, и поэтому ее необходимо будет периодически переписывать (обновлять).

Приказы (инструкции)

В разделе 14.1 фон Нейман предлагает формат для команд, который он называет кодом. Типы команд включают в себя основные арифметические операции, перемещение малых циклов между CA и M (загрузка и сохранение слова в современных терминах), команду (ы), выбирающую одно из двух чисел на основе знака предыдущей операции, ввод и вывод данных, а также передачу CC в другое местоположение памяти (переход). Он определяет количество битов, необходимых для различных типов команд, предлагает команды с непосредственной адресацией, где следующее слово является операндом, и обсуждает целесообразность оставления резервных битов в формате команды для обеспечения возможности адресации большего объема памяти в будущем, а также для других не указанных целей. Обсуждается возможность хранения более одной команды в малом цикле, однако этот подход не вызывает особого энтузиазма. Приведена таблица команд, но обсуждение инструкций ввода и вывода не было включено в Первый Проект.

Противоречия

Выпуск и распространение доклада стали источником ожесточенных разногласий между группами разработчиков EDVAC по двум причинам. Во-первых, впоследствии было установлено, что доклад являлся публичным раскрытием информации, произошедшим более чем за год до подачи заявки на патент EDVAC, что лишило будущий патент юридической силы. Во-вторых, некоторые члены команды разработчиков EDVAC утверждали, что концепция хранимой программы сформировалась в ходе встреч в Школе электротехники Университета Пенсильвании, предшествовавших работе фон Неймана в качестве консультанта, и что значительная часть работы, представленной в Первом проекте, не более чем перевод обсуждавшихся концепций на язык формальной логики, в которой фон Нейман был силен. Таким образом, отказ фон Неймана и Голдстайна указать других авторов в Первом проекте привел к тому, что заслуга в создании доклада была приписана исключительно фон Нейману. (См. эффект Мэтью и закон Стиглера.)