- Как собрать 8-битный компьютер: 18 шагов (с картинками) 2021
- ÐÑÐµÐ¼Ñ Ð¸ СÑекло Так вÑпала ÐаÑÑа HD VKlipe Net
- Table of Contents:
- Расходные материалы:
- Шаг 1: Что такое компьютер?
- Шаг 2: Введение в электронику
- Шаг 3: двоичные числа
- Шаг 4: Логические ворота
- Шаг 5: двоичный подсчет (счетчик программ)
- Шаг 6: Регистрируется
- Шаг 7: АЛУ
- Шаг 8: Программная память и оперативная память
- Шаг 9: Регистрация инструкций
- Шаг 10: Выходной регистр
- Шаг 11: Часы
- Шаг 12: Архитектура
- Шаг 13: Матрица управления
- Шаг 14: Микропрограммирование
- Шаг 15: Покупка деталей
- Шаг 16: Строительство
- Шаг 17: Программирование
Как собрать 8-битный компьютер: 18 шагов (с картинками) 2021
ÐÑÐµÐ¼Ñ Ð¸ СÑекло Так вÑпала ÐаÑÑа HD VKlipe Net
Table of Contents:
Создание 8-битного компьютера TTL звучит как непростая и сложная задача, или, по крайней мере, мне это удалось, когда я начал свое путешествие, чтобы понять архитектуру базового процессора. Когда дело доходит до этого, процессор довольно прост в работе, как только вы изучите основы всех его процессов. Этот проект призван помочь всем, кто заинтересован в создании собственного компьютера и получении замечательных знаний, которые приходят вместе с процессом. Не бойся пробовать, ты можешь только учиться.
Этот проект начнется с описания основ электроники. После этого будут описаны основы бинарной и булевой логики. Наконец, мы перейдем к функциям различных частей простого компьютера (с некоторыми изменениями), как описано в тексте Мальвино. Цифровая компьютерная электроника , Это означает, что конечным продуктом этого Instructable будет компьютер, который вы можете запрограммировать с помощью уникального набора инструкций. Этот проект также оставляет многие аспекты дизайна компьютера на ваше усмотрение и служит руководством для создания вашего собственного компьютера. Это потому, что есть много способов подойти к этому проекту. Если вы уже хорошо понимаете булеву логику и работу двоичного кода, не стесняйтесь переходить к сути проекта. Я надеюсь, что вы все наслаждаетесь и получаете что-то из сборки, как это, я знаю, что я уверен, что сделал.
Для этого проекта вам понадобится:
1.) Блок питания
2.) Макеты + много проводов
3.) Светодиоды для выхода
4.) Различные логические ИС (обсуждаются позже)
5.) Свободное время
6.) Готовность испортить и учиться на ошибках
7.) много терпения
Необязательно (но очень полезно):
1.) Осциллограф
2.) Цифровой мультиметр
3.) программист EEPROM
4.) Звуковая отвертка
Полезные ссылки для такого проекта:
Цифровая компьютерная электроника: http://www.amazon.com/Digital-computer-electronics-Albert-Malvino/dp/007039861
TTL Cookbook: http://www.amazon.com/TTL-Cookbook-Understanding-Transistor-Transistor-Integrated/dp/B0049UUV38
Расходные материалы:
Шаг 1: Что такое компьютер?
Это может показаться очень упрощенным вопросом, на который не нужно отвечать, хотя на самом деле это вопрос, на который многие люди не знают истинного ответа. Компьютеры существовали намного дольше, чем транзистор в механическом и теоретическом виде. Фактическое определение компьютера было придумано очень умным человеком по имени Алан Тьюринг. Он описал машину, которая была названа машиной Тьюринга. Каждый компьютер, который мы используем сегодня, от компьютера или сотового телефона, на котором вы читаете это, до суперкомпьютеров, может быть классифицирован как машина Тьюринга на самом простом уровне.
Что такое машина Тьюринга? Машина Тьюринга состоит из 4 частей: ленты, головки, стола и государственного регистра. Чтобы визуализировать работу такой машины, вы должны сначала представить полосу пленки, бесконечно простирающуюся в каждом направлении. Теперь представьте, что каждая ячейка этой кинопленки может содержать только один из определенного набора символов (например, алфавит). Для этого примера давайте представим, что каждая ячейка может содержать только «0» или «1». Эти ячейки могут быть перезаписаны бесконечное количество времени, но сохраняют свою информацию бесконечно, пока они не будут изменены снова. Часть Машины Тьюринга, известная как голова, может записывать символы в ячейки, а также увеличивать или уменьшать свое положение на полосе пленки на заданное целое число (целое число) ячеек. Следующая часть — это таблица, в которой содержится заданный набор инструкций для головы, например, «переместить правильные 4 ячейки» и «установить ячейку в 1». Четвертая и последняя часть машины Тьюринга — это государственный регистр, целью которого является сохранение текущего состояния машины. Состояние включает инструкцию, а также текущие данные на ленте.
Вот как просто работа компьютера. Когда ваш компьютер работает, он фактически работает как машина Тьюринга. Он обрабатывает данные, хранящиеся на вашем компьютере, с помощью заданного набора инструкций и алгоритмов. Компьютер, описанный в данном руководстве, является очень упрощенной моделью компьютера, но он по-прежнему работает как тот, который вы можете запрограммировать с помощью набора инструкций, которым он будет следовать и выполнять.
Полезные ссылки:
Википедия о машинах Тьюринга:http://en.wikipedia.org/wiki/Turing_machine
Шаг 2: Введение в электронику
Перед созданием 8-битного компьютера чрезвычайно полезно понять элементарные свойства электричества и аналоговых схем. На компьютере, на котором вы будете собирать детали, потребуются аналоговые компоненты. Есть много руководств по самообучению в области электроники, доступных по минимальной цене, которые обеспечивают ускоренный курс по электротехнике. Я лично нашел Самоучитель по электронике Гарри Кибет и Эрл Бойсен — замечательная книга для изучения мира аналоговой электроники.
Самоучитель по электронике : http://www.amazon.com/Electronics-Self-Teaching-Guide-Teaching-Guides/dp/0470289619/
Общие компоненты:
Резистор — ограничение тока, измеряется в омах.
Конденсатор — хранит заряд, может быть полярным или неполярным (полярный означает, что он должен быть расположен в правильном направлении для работы). Измеряется в фарадах.
Диод — позволяет току течь только в одном направлении, пробивается при определенном напряжении, когда находится в неправильном направлении.
Транзистор — Токовый затвор, управляемый третьим контактом, который действует как посредник. Существует много типов транзисторов, но здесь мы будем говорить о BJT (биполярный переходный транзистор), который бывает двух типов: NPN и PNP.
Ток, напряжение и сопротивление идут рука об руку в цепи. Соотношение между ними можно выразить с помощью закона Ома: V = IR. Другими словами, напряжение равно току в амперах, умноженному на сопротивление в омах. Закон Ома — это одна из самых важных формул в электронике, и ее стоит знать по уши.
Чтобы применить закон Ома, вам нужно знать сопротивление цепи. Чтобы найти значение резистора, вы должны использовать его цветовой код. Цветовой код резистора основан на видимом спектре и может быть запомнен во многих модах. Для тех, кто не хочет запомнить его, существует множество инструментов, которые помогут вам найти правильное значение для вашего резистора. Для расчета полного сопротивления в цепи вам понадобятся две формулы для двух разных конфигураций резисторов: последовательного и параллельного. Последовательно один резистор следует за другим, тогда как параллельно они работают рядом друг с другом. В серии формула очень проста:
Резисторы в серии: R (всего) = R (1) + R (2) +. , , + R (N)
Это означает, что вам просто нужно сложить значения резисторов.
Параллельные резисторы: R (всего) = 1 / <1 >
Хороший инструмент для защиты от цветового кода: http://www.csgnetwork.com/resistcolcalc.html
Легче понять формулу для резисторов параллельно, если вы думаете, что резисторы работают вместе, как два человека, работающие вместе над проектом. Эта же формула используется для словесных задач, когда вам дают скорость, с которой работают два человека, и вы должны выяснить, насколько быстро будет завершен их проект, если работать вместе.
Чтобы выяснить, какой ток подается на данный компонент с данным значением сопротивления, вы просто вставляете значения сопротивления и напряжения в закон Ома и решаете для I. Например:
В цепи находится источник света, и два резистора по 1 кОм (одна тысяча Ом) расположены перед ним параллельно. При напряжении 9 вольт, какой ток подается на свет?
1.) Рассчитать R (всего):
R (всего) = 1 / (1/1000 + 1/1000) = 1 / (2/1000) = 1000/2 = 500 Ом
2.) Рассчитать ток, используя закон Ома:
9 = I * 500
I = 9/500 = 0,018 A = 18 мА (миллиампер)
Вы также можете расположить резисторы в цепи для регулирования напряжения. Это называется делителем напряжения и включает в себя два резистора последовательно. Выходное напряжение двух резисторов находится на их стыке. Для лучшей идеи, посмотрите на картинку, которую я приложил. В этой схеме формула для выходного напряжения:
V (out) = V (источник) * R (2) /
Конденсаторы будут полезны на вашем компьютере с постройкой часов. Часы — это просто цепь, которая включается и выключается с постоянной скоростью. Как и резисторы, конденсаторы имеют две формулы для определения общего значения для последовательных и параллельных конфигураций.
Серия: C (всего) = 1 / <1 >
Параллельно: C (всего) = C (1) + C (2) +. , , + C (N)
Скорость, с которой конденсатор заряжается, зависит от сопротивления цепи до (или после разряда) конденсатора, а также от его емкости. Зарядка конденсатора измеряется в постоянных времени. Требуется 5 постоянных времени, чтобы полностью зарядить или разрядить конденсатор. Формула для нахождения постоянной времени конденсатора в секундах:
Т (постоянная) = сопротивление * емкость
Диоды просты в эксплуатации и пригодятся при сборке компьютера TTL. Они позволяют току течь только в одном направлении. Когда они расположены в правильном направлении, это то, что называется смещенным вперед. Когда они перевернуты, они ломаются при определенном напряжении. Когда диод работает против тока, он имеет обратное смещение.
Транзистор работает как клапан, управляемый током. BJT имеет три контакта: коллектор, эмиттер и основание. Для простоты на этом шаге я опишу NPN-транзистор, в котором ток течет от коллектора к эмиттеру. Ток, приложенный к базе, контролирует, сколько тока течет от коллектора к эмиттеру. Транзисторы идеальны для многих применений благодаря своей способности усиливать сигнал. Это связано с тем, что ток, подаваемый на базу транзистора, может быть значительно меньше, чем ток, управляемый. Это усиление по току называется текущим усилением транзистора, или бета. Формула для беты:
Бета = Ток (Коллектор) / Ток (База)
Когда транзистор полностью включен, он называется насыщенным. Булев транзистор — это тот, который находится либо в своем насыщенном, либо в выключенном состоянии и никогда не находится между ними. Это тип транзистора, с которым вы будете иметь дело в основном в цифровой электронике. Транзисторы образуют логические элементы, необходимые для работы компьютера. Это будет описано позже.
Полезные ссылки:
http://en.wikipedia.org/wiki/Resistor
http://en.wikipedia.org/wiki/Capacitor
http://en.wikipedia.org/wiki/Diode
http://en.wikipedia.org/wiki/Transistor
Шаг 3: двоичные числа
Сегодня мы привыкли к всемирной системе нумерации, основанной на числе десять. Под этим я подразумеваю, что в нашей системе счисления нет числа, которое стоит значение десяти, и, следовательно, наша система счисления является базовой десяткой.
Думайте о нашей системе счисления как об одометре. Одометр отсчитывает от самой младшей цифры до самой высокой цифры, а затем вынуждает следующий ротор последовательно продвигаться на одно место. Например:
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
1 0
Шаг 4: Логические ворота
Компьютер состоит из тысяч логических элементов, предназначенных для выполнения определенных функций. Логический элемент — это компонент в цифровой электронике, выход которого зависит от состояния его входов. Большинство логических вентилей имеют два входа и один выход. Вы можете думать о логических элементах как о лицах, принимающих решения в цифровой электронике. Шесть основных логических элементов, используемых в цифровой электронике:
AND Gate: выходной сигнал высокий, когда все, если его входы высокие.
ИЛИ Gate: выход высокий, когда любой из его входов высокий.
NOT Gate: только один вход. Выход высокий, когда его вход низкий.
NAND Gate: выходной сигнал высокий, если не все его входы высокие.
NOR Gate: выход высокий, когда ни один из его входов не высокий.
XOR Gate: выходной сигнал высокий, если нечетное количество входов высокое.
Tri-State Buffer: буфер, который управляется третьим логическим сигналом.
Теперь важно упомянуть разницу между высоким сигналом «1» и низким сигналом «0». Высокий сигнал может быть либо подключением к положительному напряжению, либо плавающим входом. Плавающий вход — это тот, который не подключен ни к какому выходу. Примером плавающего входа может быть тот, который вообще не подключен, или тот, который подключен к выходу буфера с 3 состояниями, который не активирован. Низкий сигнал присутствует, когда вход находится на земле.
Логические вентили можно вводить друг в друга, чтобы создать практически любую функцию, какую только можно вообразить. Например, два вентиля NOR могут быть поданы друг в друга для хранения одного бита данных в защелке RS_NOR, когда питание подается на схему.
Шаг 5: двоичный подсчет (счетчик программ)
Одна из наиболее важных частей компьютера — его счетчик программ. Счетчик программ предоставляет компьютеру текущий адрес выполняемой инструкции. Однако для того, чтобы счетчик программы работал, его нужно считать в двоичном виде. Для этого используются JK-шлепки. Триггер — это схема логических вентилей, которая хранит один бит (как защелка RS_NOR, описанная на шаге логических вентилей). Триггер JK меняет свое состояние, когда его вход тактового импульса становится высоким, а затем снова низким (его входы J и K также должны быть высокими). Другими словами, всякий раз, когда триггер JK получает передний фронт тактового импульса, его состояние меняется с «0» на «1» или с «1» на «0».
Если вы подключаете выход одного JK-триггера к другому и каскадируете их, то получается двоичный счетчик, который действует как одометр. Это связано с тем, что когда первый JK-триггер в последовательности становится высоким, а затем низким, он запускает следующий в последовательности. Частота часов (сколько раз они включаются и выключаются за секунду) уменьшается вдвое при каждом последующем добавлении триггера JK. Вот почему триггер JK также называется схемой деления на два. Результирующий шаблон для четырех триггеров JK будет 0000, 0001, 0010, 0011, 0100 и т. Д. , ,
Однако для простейшего компьютера, описанного в данном руководстве, есть еще несколько функций, которые необходимы для его работы. Для того чтобы компьютер мог перезапустить свою программу, ему нужна возможность очистить или установить все свои выходы на ноль. Счетчику программ также требуется возможность загружать двоичное слово для кода операции JMP, которое позволяет компьютеру переходить к определенной инструкции. Логические ворота используются для достижения этой цели. К счастью для нас, двоичные счетчики поставляются в удобных микросхемах со всеми необходимыми вам функциями.
Шаг 6: Регистрируется
Регистры потенциально могут быть самой важной частью компьютера. Регистр временно сохраняет значение во время работы компьютера. 8-битный компьютер, описанный в этом Instructable, имеет два регистра, подключенных к его ALU, регистр для хранения текущей инструкции и регистр для вывода компьютера.
В зависимости от чипа регистр будет иметь 2 или 3 контрольных контакта. Регистры, которые мы будем использовать, имеют два управляющих контакта: выходное разрешение и входное разрешение (оба активны при низком уровне). Когда вывод разрешения выхода подключен к земле, сохраненное в настоящий момент двоичное слово отправляется через выводы вывода. Когда входной контакт подключен к земле, двоичное слово, присутствующее на входных контактах, загружается в регистр.
Примером использования регистра на компьютере является аккумулятор на АЛУ (блок арифметической логики, который выполняет математические операции). Аккумулятор похож на блокнот для компьютера, в котором хранятся выходные данные АЛУ. Аккумулятор также является первым входом для АЛУ. Регистр B является вторым входом. Для операции сложения первое значение загружается в аккумулятор. После этого второе значение, которое будет добавлено к первому значению, загружается в регистр B. Выходы аккумулятора и регистра B слиты воедино и постоянно подаются в ALU. Последний шаг для сложения — перенести результат операции в Аккумулятор.
Все регистры работают в общей линии данных, называемой шиной. Шина представляет собой группу проводов, количество которых равно архитектуре любого процессора. Это действительно ставит лошадь перед тележкой, учитывая, что ширина шины является определяющим измерением для архитектуры ЦП. Поскольку цифровой 1 означает положительное напряжение, а 0 означает заземление, было бы невозможно, чтобы все регистры использовали одну и ту же шину, не давая им возможность выборочно подключаться и отключаться от шины. К счастью для нас, существует третье состояние между 1 и 0, которое амбивалентно текущему импульсу, который отлично подходит для этого. Введите три состояния буфера: чип, который позволяет выборочно подключать группы проводов к шине. Используя некоторые из этих буферов с тремя состояниями, вы можете иметь все регистры и микросхемы на всем компьютере, которым требуется связь, по тем же проводам, что и шина. В случае с моим компьютером это была 8-проводная полоса слотов для макетов, которая охватывала нижние контакты макета. Поэкспериментируйте с шинами, так как они несут всю информацию от компьютера к компьютеру, неисправная шина может означать ошибочные данные, которые распространяются по линии.
Шаг 7: АЛУ
АЛУ (арифметико-логическое устройство) компьютера — это часть, которая выполняет математические операции. Для компьютера SAP он должен иметь только две функции: сложение и вычитание. Сложение и вычитание в двоичном коде работает очень похоже на сложение и вычитание в десятичных терминах, например:
1 1 1
10 1010
+(-5) +1011
5 0101
Для управления инверсией битов мы используем вентили XOR с одним обычно низким входом. С одним обычно низким входом, выход эквивалентен другому входу. Когда вы устанавливаете высокий уровень управляющего входа, вы инвертируете другой вход. Если мы соединяем эту инверсию с битом, переданным для переноса полных сумматоров, результатом является операция вычитания.
Шаг 8: Программная память и оперативная память
В памяти программы вашего компьютера будут храниться инструкции, которые будут выполнены. Он также будет действовать как ОЗУ, которое может хранить значения во время работы компьютера. Память программ состоит из трех основных частей: памяти, регистра адресов памяти (MAR) и мультиплексора. Память представляет собой чип, имеющий 16 байт памяти. В память подается четырехбитный адрес, который сообщает, какой байт он должен прочитать или записать. MAR хранит текущий адрес для байта, который будет прочитан или записан из памяти. Он постоянно подается в чип памяти, если компьютер не находится в состоянии программирования. Мультиплексор позволяет выбирать между двумя входами и выводить данный вход. Мультиплексор, используемый на моем компьютере, позволяет вам выбирать из двух четырехбитных входов (MAR и ручной ввод). Когда компьютер находится в состоянии программирования, ручной адрес вводится в память и позволяет программировать байты в памяти компьютера по указанному вами адресу.
Шаг 9: Регистрация инструкций
Регистр команд компьютера хранит текущую инструкцию, а также адрес, по которому будет действовать инструкция. Это очень простой компонент с очень важной целью. Во время работы компьютера содержимое данного адреса в памяти передается в регистр команд. В моем компьютере самые левые биты fout — это код OP или текущая инструкция, которую необходимо выполнить. Правильные четыре бита или младшие четыре бита сообщают компьютеру, какой адрес использовать для операции. Первые четыре бита постоянно подают код OP в матрицу управления, которая сообщает компьютеру, что делать с данной инструкцией. Четыре правых бита возвращаются обратно в компьютер, так что адрес может быть передан в MAR или счетчик программы.
Шаг 10: Выходной регистр
Если бы компьютер просто передавал вывод шины оператору, считывание показало бы мало смысла. Вот почему существует выходной регистр, целью которого является сохранение значений, предназначенных для вывода. Выходными данными для вашего компьютера могут быть либо простые светодиоды, которые отображают необработанный двоичный код, либо у вас может быть дисплей, который считывает реальные цифры на семисегментных дисплеях. Все зависит от того, сколько работы вы хотите поставить на свой компьютер. Для моего компьютера я использую несколько русских трубок Numitron IV-9 для выхода моего компьютера в сочетании с Arduino для преобразования из двоичной системы в десятичную.
Шаг 11: Часы
Каждая часть в компьютере должна быть полностью синхронизирована, чтобы правильно функционировать. Для этого вашему компьютеру нужны часы или схема, выход которой включается и выключается с постоянной скоростью. Самый простой способ сделать это — использовать таймер 555. Таймер 555 — чрезвычайно популярный таймер, изобретенный в эпоху появления компьютера, который сегодня очень популярен среди любителей. Чтобы построить схему 555, вам нужно знать, как она работает.
Поначалу часы для вашего компьютера должны быть относительно медленными. 1 Гц, или один цикл в секунду, является хорошим начальным значением. Это позволяет вам просматривать работу вашего компьютера и проверять наличие ошибок. Для работы микросхемы 555 необходимы два резистора и конденсатор. Два резистора определяют длительность импульсов высокого и низкого уровня, а также общую частоту. Конденсатор изменяет длительность импульса для обоих. Если у вас нет опыта работы с 555 таймерами, я рекомендую поэкспериментировать с ними.
Полезные ссылки:
http://en.wikipedia.org/wiki/555_timer_IC
Шаг 12: Архитектура
Это шаг, где все объединяется. Настало время разработать архитектуру вашего компьютера. Архитектура — это то, как регистры и различные компоненты вашего компьютера организованы. Аспект дизайна полностью зависит от вас, хотя он помогает помнить цель (то, что вы хотите, чтобы ваш компьютер делал) и модель, от которой вы исходите. Если вы хотите создать свой компьютер после моего, это вполне нормально. Я изменил архитектуру SAP-1, найденную в Цифровая компьютерная электроника для моего 8-битного компьютера.
Всегда нужно помнить о том, как данные передаются между различными компонентами вашего компьютера. Самый распространенный способ — это иметь общую «шину» для всех данных на компьютере. Входы и выходы регистров, ALU, счетчик программ и RAM все подключены к шине компьютера. Провода расположены в порядке от младшего значащего бита (1) до старшего значащего бита (128).
Любые и все выходы, которые подключены к шине, должны быть полностью отключены, когда они неактивны, иначе они могут сливаться друг с другом и приводить к ошибочному выводу. Для этого мы используем буферы Tri-State для управления выводом определенных элементов, которые выводятся по умолчанию, таких как аккумулятор, ALU и фактический вход для программирования компьютера.
Шаг 13: Матрица управления
Управляющая матрица компьютера сообщает каждой отдельной детали, когда следует вводить и выводить ее значение. Есть несколько состояний каждой операции на компьютере. Эти состояния вызываются типом счетчика, который называется счетчиком колец. Кольцевой счетчик имеет только один бит за раз и последовательно переключает свои выходы. Например, если счетчик звонка имеет 4 выхода, сначала будет активен первый выход. При следующем тактовом импульсе он установит свой второй выходной высокий (и первый низкий). Следующий тактовый импульс увеличит выходной бит на один бит и так далее. Эти стадии называются T состояниями. Компьютер в этом Instructable использует 6 T состояний для выполнения одной команды. Первые три состояния T — это то, что называется циклом выборки, в котором текущая команда выбирается и помещается в регистр команд. Счетчик программы также увеличивается на единицу. Второй набор из трех состояний T зависит от того, какой код OP подается в матрицу управления из регистра команд. Т состояния следующие:
T1: содержимое счетчика программ передается в регистр адреса памяти. (Адрес государства)
T2: счетчик программы увеличивается на единицу. (Увеличение состояния)
T3: Адресный байт в памяти программы передается в регистр команд. (Состояние памяти)
T4: зависит от того, какая команда выполняется.
T5: зависит от того, какая команда выполняется.
T6: зависит от того, какая команда выполняется.
Существует два основных способа создания матрицы управления: использование дискретной логики и использование ПЗУ. Метод ROM является самым простым и эффективным. Использование дискретной логики включает разработку массивной логической схемы, которая будет выводить правильные контрольные слова для вашего компьютера на основе ввода кода OP. ROM расшифровывается как постоянная память. Существует несколько типов ПЗУ, которые вы можете использовать в своей сборке. Для моего компьютера я первоначально использовал EEPROM (электронное стираемое программируемое ПЗУ), но затем переключился на NVRAM (энергонезависимую оперативную память) после того, как чипы EEPROM не смогли записать. Я не рекомендую NVRAM, так как он предназначен для оперативной памяти, а не для постоянного хранения. EEPROM является наиболее эффективным решением на мой взгляд.
Управляющая матрица будет иметь три микросхемы ПЗУ, каждая из которых имеет по меньшей мере 32 адреса 8-битного хранилища (а также элементы синхронизации и счетчика). Двоичное слово, которое отправляется из матрицы управления, называется ПЗУ управления и содержит все биты управления для каждого компонента вашего компьютера. Вы хотите быть уверены, чтобы организовать биты управления и знать их порядок. Для операции не требуется контрольное слово, которое делает каждую часть компьютера неактивной (кроме, конечно, часов). Управляющее слово для компьютера, описанное в этом руководстве, имеет длину 16 битов и хранится в двух чипах ПЗУ управления. Первые три адреса чипов ПЗУ управления содержат контрольные слова для цикла выборки. Остальные адреса на чипе содержат контрольные слова в парах по три для каждого кода OP. Третья микросхема ПЗУ содержит ячейку памяти для начала последовательности управляющих слов для каждого кода OP и адресуется самим кодом OP. Например, на моем компьютере, если вы дадите элементу управления код операции 0110, он выдаст двоичный код 21, который является адресом начала команды JMP. Между операционным ПЗУ и управляющим ПЗУ имеется 8-разрядный счетчик, который отсчитывает от 0 до 2 (первые три состояния Т), затем в третьем состоянии Т загружает адрес, выводимый ОП-ПЗУ, и считает от этой позиции до момента Т1 состояние очищает счетчик снова. Кольцо и двоичный счетчик для матрицы управления управляются инверсией тактового импульса, так что управляющие слова присутствуют, когда нарастающий тактовый импульс поступает на элементы компьютера. Весь процесс по порядку выглядит следующим образом:
1.) Состояние T1 очищает счетчик до 0, контрольное слово, сохраненное в 0, отправляется
2.) Часы идут высоко и состояние адреса имеет место
3.) Часы сбрасываются, и, в свою очередь, увеличивается счетчик управления и отправляется управляющее слово 1
4.) Часы идут высоко, и цикл приращения имеет место
5.) Часы сбрасываются, а счетчик управления увеличивается до 2, командное слово 2 отправляется
6.) Часы становятся высокими, и состояние памяти имеет место, и код OP поступает в регистр команд, T3 также активен, что означает, что при следующем низком тактовом импульсе будет загружен адрес управления OP
7.) Часы сбрасываются и загружают счетчик с адресом для первого из трех контрольных слов для данного кода операции.
8.) T4, T5 и T6 выполняют код OP
9.) T1 сбрасывает счетчик, процесс продолжается до получения HLT OP. Команда HLT останавливает часы.
Шаг 14: Микропрограммирование
Теперь это часть, где вы решаете, какие команды вы хотите, чтобы ваш компьютер был способен. Я дал своему компьютеру 6 уникальных операций, которые дадут ему основные функции программирования, которые мне понадобятся. Команды, которые вы будете программировать на своем компьютере, называются языком ассемблера. Сборка является одним из самых ранних языков программирования и до сих пор может использоваться на компьютерах. Команды на языке включают загрузку аккумулятора, добавление, перемещение, вывод и сохранение переменных. Каждая команда имеет свой собственный 4-битный код OP на этом 8-битном компьютере. Команды, которые я выбрал для своего компьютера:
NOP: нет операции. (0000)
LDA: загрузить аккумулятор со значением по этому адресу. (0001)
ДОБАВИТЬ: Добавить значение по указанному адресу к значению в аккумуляторе. (0010)
SUB: вычесть значение по указанному адресу из значения в аккумуляторе. (0011)
STO: Хранить содержимое аккумулятора по указанному адресу. (0100)
OUT: сохранить содержимое аккумулятора в регистре вывода, чтобы оператор мог его увидеть. (0101)
JMP: переход к определенной инструкции в памяти по указанному адресу. (0110)
HLT: остановить работу компьютера. (0111)
Чтобы определить, какие контрольные слова должны быть отправлены для каждого OP, вам нужно знать, какие биты должны быть активны в каждом T-состоянии. Для моего компьютера я организовал биты следующим образом (подчеркивание обозначает активный младший бит):
CE CO J MI RO II IO OI BI EO SU AI AO RI HLT X
CE — Count Enable (включает тактовый вход программного счетчика)
CO — включение таймера
J — прыжок включить
MI — MAR Вход
RO — память программы вышла
II — Регистр инструкций в
IO — Инструкция по регистрации
OI — Выходной регистр в
BI — B зарегистрироваться в
EO — разрешение выхода ALU
SU — вычесть
AI — аккумулятор в
AO — Активация выхода аккумулятора
RI — память программы в
HLT — остановка
X — не используется
Вот какие биты должны быть активны для каждого состояния Т для данной инструкции, а также адрес, которым они должны быть в ПЗУ управления:
Выборка:
0: CO, MI — Счетчик программы выводится в MAR
1: CE — счетчик включен для следующего тактового импульса
2: RO, II — Адресный байт выводится из ОЗУ в регистр команд
NOP:
3: X
4: X
5: X
LDA:
6: IO, MI — адрес в регистре команд передается в MAR (младшие четыре бита)
7: RO, AI — Адресный байт выводится из памяти в аккумулятор
8: X
ДОБАВЛЯТЬ:
9: IO, MI — адрес в регистре команд передается в MAR (младшие четыре бита)
10: RO, BI — адресуемый байт выводится из памяти в аккумулятор
11: EO, AI — сумма аккумулятора и B-регистр загружаются в аккумулятор
SUB:
12: IO, MI — адрес в регистре команд передается в MAR (младшие четыре бита)
13: RO, BI — адресуемый байт выводится из памяти в аккумулятор
14: AI, SU, EO — разность аккумулятора и регистра B загружается в аккумулятор
STO:
15: IO, MI — адрес в регистре команд передается в MAR (младшие четыре бита)
16: AO, RO, RI — Аккумулятор выводит в память программы в указанном месте (RO и RI должны быть активны для записи в чип, который я использовал)
17: X
ИЗ:
18: OI, AO — аккумулятор выводится в регистр вывода
19: X
20: Х
JMP:
21: J, IO — регистр команд загружает счетчик программ с его младшими четырьмя битами
22: X
23: X
HLT:
24: HLT — сигнал остановки отправляется на часы
25: X
26: X
Ваш OP ROM содержит кратные три в каждой ячейке памяти. Это, конечно, потому что каждый цикл принимает три состояния выполнения. Поэтому адресными данными для вашего OP ROM будут:
0 — 3
1 — 6
2 — 9
3 — 12
4 — 15
5 — 18
6 — 21
7 — 24
Для программирования выбранного вами чипа у вас есть много разных вариантов. Вы можете купить EEPROM и EPROM программатор, но они обычно стоят немалых денег. Я построил макетный программатор для своего ПЗУ, который управляет перемещением проводов и управлением кнопками включения записи и чтения с помощью кнопок. Позже я упростил процесс и разработал программатор Arduino специально для моей NVRAM. Я приложу код, так как он может быть легко модифицирован для программирования практически любого параллельного чипа памяти, который вы использовали бы для этого проекта.
Шаг 15: Покупка деталей
Самое замечательное в построении 8-битного компьютера состоит в том, что большинство деталей будут стоить вам меньше доллара за штуку, если вы купите их в нужном месте. Я приобрел 90% своих запчастей у Jameco Electronics и был полностью удовлетворен их услугами. Единственные детали, которые я действительно купил где-то еще, это макеты и провода (и трубки Numitron). Их можно найти значительно дешевле на таких сайтах, как Amazon. Всегда проверяйте, чтобы заказанные вами детали были правильными. Каждая часть, которую вы покупаете, должна иметь доступную в Интернете таблицу данных, которая объясняет все функции и ограничения элемента, который вы покупаете. Обязательно сохраняйте их организованными, так как вы будете использовать множество таблиц при создании вашего компьютера. Чтобы помочь вам с вашим компьютером, я перечислю части, которые я использовал для моей:
4-битный счетчик:
74161 — http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74161&langId=-1&storeId=10001&productId=49664&search_type=jamecoall&catalogId=10001&ddkey=http:illownatalog
4-битный регистр (я использую два для каждого 8-битного регистра):
74LS173 — http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74LS173&langId=-1&storeId=10001&productId=46922&search_type=jamecoall&catalogId=10001&ddkey=httpillStoreStore
2-1 Мультиплексор:
74LS157 — http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_46771_-1
16×8 RAM (выход должен быть инвертирован):
74189 — http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74189&langId=-1&storeId=10001&productId=49883&search_type=jamecoall&catalogId=10001&ddkey=http:illownatat
Полные сумматоры:
74LS283 — http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74LS283&langId=-1&storeId=10001&productId=47423&search_type=all&catalogId=10001&ddkey=http:rStoreCalog
Буферы трех состояний:
74S244 — http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_910750_-1
XOR Gates:
74LS86 — http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295751_-1
И ворота:
74LS08 — http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295401_-1
Нор Гейтс:
74LS02 — http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_283741_-1
Инверторы:
74LS04 — http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_283792_-1
Счетчик звонков:
CD4029 — http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=4029&langId=-1&storeId=10001&productId=12925&search_type=jamecoall&catalogId=10001&ddkey=http:storeCatalog
JK Вьетнамки:
74LS10 — http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295427_-1
Шаг 16: Строительство
Вот тут-то и приходит терпение. Я решил использовать макет для настоящего компьютера, но есть много других методов (таких как обмотка), которые будут работать так же хорошо. Чтобы сделать все намного проще, я включил блок-схему для фактической схемы моего компьютера. Однако я не включил номера деталей или номера контактов. Я верю, что это сделает вещи более простыми и открытыми для творчества. Выход 4-битного счетчика программы, вход MAR и выход регистра команд связаны с четырьмя младшими битами шины компьютера.
Вторая показанная схема — это логика управления для конца работы компьютера. Элементы управления спроектированы так, чтобы переключатели могли быть входом для компьютера. Защелки RS_NOR располагаются перед тумблерами для их отмены. Тумблеры часто имеют грязные соединения, которые могут отскакивать от включенного к выключенному состоянию и давать больше импульсов, чем вы хотите. Добавление триггера к выходу переключателя устраняет дополнительные импульсы. Это было бы чрезвычайно полезно при использовании опции ручных часов. Вы не хотели бы щелкнуть выключателем и запустить 8 тактовых импульсов. Кнопка чтения / записи записывает активный входной байт в адресную память. Путем изменения входного управляющего слова по умолчанию в ОЗУ на два бита с низким RO и RI, инициирующих цикл записи. Переключатель запуска / программирования изменяет, какой вход активен на мультиплексоре адреса памяти. Триггер JK после 555 означает, что при запуске компьютера он не запускается в середине тактового импульса. Низкий сигнал HLT остановит передачу часов либо на ручные часы, либо на 555. И, наконец, переключатель запуска / очистки подключен ко всем выводам сброса на компьютере, например, к регистрам и счетчикам.
Шаг 17: Программирование
Теперь, когда компьютер готов, его можно запрограммировать на выполнение инструкций. Для этого сначала необходимо установить компьютер в режим настройки программы, переместив тумблер запуска / программы в положение программы. После этого вы выбираете адреса, начиная с 0 до 15 и вставляя необходимые данные для вашей программы. Например, чтобы начать с 5 и добавлять 4 к каждому выводу, программа будет выглядеть следующим образом:
Адрес — Данные:
0000 — 00010111 LDA 7: загрузить аккумулятор со значением, хранящимся в адресе памяти 7 (5)
0001 — 00101000 ADD 8: добавить значение, сохраненное в адресе памяти 8 (4)
0010 — 01010000 OUT: выходной аккумулятор
0011 — 01100001 JMP 1: переход к инструкции 1
0100 — X
0101 — X
0110 — X
0111 — 00000101 5
1000 — 00000100 4
1001 — Х
1010 — Х
1011 — Х
1100 — X
1101 — X
1110 — X
1111 — X
Источник