Это широкий вопрос, на который нет простого ответа; от медленных проводов по медным проводам до создания веб-сайта в Firefox далеко. Я постараюсь дать вам общий обзор снизу вверх и указать вам правильные вещи, чтобы посмотреть вверх.
Кодировка чисел
Основная мотивация - вычислять вещи, как в арифметике ». Первое, на что нужно обратить внимание - как представлять числа. Было много подходов, использующих десятичную или троичную систему, и я думаю, что даже восьмеричные системы, но, в конце концов, двоичная система победила. Теперь мы знаем, что должны создавать устройства, которые работают с двумя значениями - давайте назовем их и .101
Обратите внимание, что есть также несколько способов кодирования чисел в двоичном виде. После того, как вы соберете свой первый процессор, вы осознаете преимущества определенных действий. Популярные примеры - поплавки с двумя дополнениями и IEEE . Для начала ограничимся простыми натуральными числами.
ворота
Предположим, мы используем двоичное кодирование. Подумайте, как вы научились добавлять в начальную школу и запишите то же самое для двоичных чисел. Как оказалось, строительные блоки булевой алгебры уже существуют для вас; легко построить базовый сумматор (и другие арифметические функции), используя логические элементы .
Как построить такие ворота выходит за рамки компьютерных наук; электротехника предоставила несколько решений с использованием, например, труб или транзисторов . Направляйтесь в Электротехническую биржу для вопросов по этому вопросу.
Часы и состояние
Не все ворота одинаково быстрые, и не все части вычислений имеют одинаковое количество ворот. Поэтому мы должны проявлять особую осторожность, чтобы отдельные операции не обгоняли друг друга. Оказалось полезным использовать глобальные часы ; Результатом заданной сети вентилей является состояние выходных проводов в конце цикла (которое может сильно изменяться, пока каскад вентилей приближается к своим отдельным конечным состояниям).
Это означает, что результаты одного цикла могут быть сохранены до начала следующего цикла, например, если вы подключите петли. Есть ряд базовых элементов, которые вы можете использовать для различного эффекта, все они создаются из ворот; некоторые называются шлепанцами . Они также используются для создания регистров , элементов, которые хранят числа столько раз, сколько необходимо.
Архитектура и Команды
Теперь у вас есть множество вариантов дизайна. Какие арифметические операции предоставляет ваш процессор? Как выглядят ваши команды? Может быть полезно взглянуть на архитектуру MIPS, чьи ранние формы просты по сравнению с другими проектами. Посмотрите на планы :
Оригинал с http://ube.ege.edu.tr/~erciyes/CENG311
По сути, это выборка и разборка команд, набор регистров, ALU и управление. Команды кодируют, какую операцию ALU выполнять с какими операндами (по номеру регистра, в котором они хранятся), как манипулировать счетчиком программ² или каким регистром загружать / сохранять из / в память³.
Дальнейшие соображения
К настоящему времени у вас есть работающий процессор в современном смысле, предполагая, что вы выяснили, как построить память и как передавать ей команды. На пути к современной машине нужно сделать много выборов. Вот некоторые:
альтернативы
Вышесказанное сильно зависит от того, как сложилась история. В другом мире с разными умами компьютеры могут работать по-разному. На самом деле существует множество моделей вычислений , некоторые из которых имеют преимущества, которые во многих случаях делают их полезными в качестве абстракции для реальных машин. Есть также попытки подражать тому, как работает наш мозг, то есть дать возможность нейронным вычислениям или, в более общем смысле, использовать стратегии решения проблем и хранения информации, наблюдаемые в природе , в первую очередь ДНК и квантовые вычисления.
Так что, может быть (надеюсь?) Информация выше - это вся древняя история еще через 50 или 100 лет.
- Все причудливые вещи, которые мы делаем сегодня с компьютерами, разбиты на множество небольших арифметических задач, которые процессор выполняет одну за другой.
- Если ваша модель позволяет программе манипулировать потоком управления, это будет адрес памяти, с которого процессор получает следующую инструкцию. Вы также можете представить машины, которые читают только фиксированный набор инструкций, скажем, с ленты. Фактически, ранние реализации сделали это. Никакие прыжки не означали никаких петель; программа была полностью развернутой / развернутой серией инструкций в зависимости от данных. Очевидно, что возможность использовать одну и ту же программу для нескольких входных данных более мощная.
- Предполагая, что у вас есть память; ваш процессор работает нормально, но может работать только с таким количеством значений одновременно. Ранние компьютеры считывали все свои данные с лент и хранили их в регистрах. Не было памяти, не говоря уже о доступном для записи постоянном хранилище, как мы его знаем сегодня.