4 битный процессор своими руками

Центральный процессор – дома с нуля

Если в последние лет 40 для выполнения задачи нужен микропроцессор – единственный рассматриваемый вариант это купить готовый. Ну или в крайне редких случаях «накатить» стандартное конфигурируемое FPGA ядро (например Nios II) с парой дополнительных инструкций. Многие сейчас даже не могут представить, что процессоры могут получаться каким-то другим путем 🙂 Это всё равно что считать что продукты беруться в магазине, а вырастить их самому – абсолютно невозможно.

С одной стороны, зачем помнить основы технологии если все производится промышленно? На мой взгляд – чтобы быть уверенным, что технология не будет утеряна, что даже если случиться ядерная война компьютеры можно будет собирать из подручных материалов (так же как и с продуктами в начале 90 — многим пришлось возвращаться к технологии 100-летней давности из-за краха инфраструктуры производства и доставки).

Оказывается есть такие люди, которые до сих пор в качестве хобби делают центральные процессоры из дискретных компонент(транзисторов, реле) и микросхем низкой степени интеграции (счетчики, регистры). Единственные применяемые микросхемы – память (оперативная и перепрограммируемая).

В этой статье я хочу рассказать кратко об архитектуре и о нескольких реально работающих процессорах, сделаных в домашних условиях.

Общие архитектурные заметки:

Большинство самодельных процессоров работают (почти как и большинство современных процессоров )– на микрокоде, считываемого из flash/SRAM-памяти – тут обычно и находится самое медленное место: за последние лет 20 прогресс в латентности работы flash памяти остался почти на месте, и для широко доступных микросхем составляет 70нс, следовательно быстрее 14 МГц на процессоре на микрокоде во флеше не разогнаться. Процессоры обычно имеют шину данных 8 или 16 бит, адресную шину 16-20-24 бита (ограничивать себя 65Кб никому не хочется, особенно с нынешними ценами на память). ALU(вычислительное ядро) делается либо однобитным (т.е. для 16-и битной операции надо 16 тактов), либо используется готовое ALU на 2-4 бита (из которых собирается 8-16-и битное ALU). Процессоры на микрокоде обычно и код и данные хранят в одной и той же памяти (архитектура Фон-Неймана). RISC-подобные процессоры без микрокода обычно работают по Гарвардской архитектуре (данные и код отдельно, зачастую программа не может ничего писать в память кода). В абсолютно всех самодельных процессорах длина всех инструкций одинакова – переменная длина инструкций создает трудности даже при разработке «промышленных» процессоров. В качестве памяти используют обычно SRAM – раньше её использовали только для кэша из-за большой цены. От обычной SDR/DDR памяти отличается крайней простотой и неприхотливостью интерфейса, не нужно следить за «обновлением» памяти (в обычной SDR/DDR памяти данные выживают всего 32-64 миллисекунды).

Маленькие хитрости

Несмотря на то, что обычно используются простые микросхемы, есть некоторые хитрости, которые раньше(30 лет назад) были не доступны: готовые ALU (не совсем простая микросхема), SRAM память(например 1Мб SRAM памяти — это около 48млн транзисторов) и использование EEPROM-памяти как ALU (например, на микросхеме памяти 65кб 8бит можно сделать сумматор или мультипликатор, а на 1Мб микросхеме можно «проводить» 16 разных 8-битных операций — FPGA использует тот же принцип для построения произвольных логических схем). Также, сейчас можно использовать намного больше памяти для хранения микрокода и самого программного кода в памяти.

А теперь несколько самых выдающихся реализаций:

BMOW – Big Mess of Wires


http://www.stevechamberlin.com/cpu/bmow1
Собран из простых микросхем. Тактовая частота – 2 МГц.

MyCPU


http://www.mycpu.eu/
Собран из простых микросхем. Тактовая частота – 8 МГц. Развитая переферия – вплоть до доступа к сети. Кстати, сам Web-сайт http://www.mycpu.eu/ обслуживается именно этим самодельным сервером. Конструкция посторяемая, собрано много экземпляров.

Harry Porter’s Relay Computer

harry/Relay/index.html
Собран на 415 реле, на взгляд около 7Гц 🙂

Magic-1

200 простых микросхемах, рабочая частота до 4МГц. Порт Minux, сам сайт работает на этом самодельном сервере.

Mark-1 Forth computer


http://www.holmea.demon.co.uk/Mk1/Architecture.htm
Собран на простых микросхемах, рабочая частота 1МГц. Как нетрудно понять из названия, оптимизирован для программ на языке Форт. Микрокод хранится в диодной матрице, вместо «неспортивных» микросхем флеш-памяти.


http://www.6502.org/users/dieter/
Самое вкусное на последок: 16-и битный процессор, собранный на самых простых низкочастотных биполярных транзисторах (около 3000 штук). Тактовая частота – 500КГц, из микросхем только память и генерация синхросигнала. Производство таких транзисторов на кухне вполне реально наладить уже через год после ядерной войны

Источник

Как создать микропроцессор в домашних условиях. Энтузиаст создал интегральную схему с 1200 транзисторами у себя в гараже

Прошлая его ИС имела лишь 6 транзисторов

Современные процессоры опираются на сверхтонкие техпроцессы и включают миллиарды транзисторов, упакованных в крошечных чипах. Можно ли создать подобный CPU дома? Конечно, нет, но всё же создать в домашних условиях примитивный процессор вполне возможно.

Несколько лет назад известный в определённых кругах энтузиаст-самоучка Сэм Зелуф (Sam Zaloof) создал первый в своём роде чип Z1 в домашних условиях. Он состоял всего из 6 транзисторов. Теперь Зелуф решил повторить эксперимент, создав нечто существенно более сложное. И у него получилась интегральная схема Z2 с 1200 транзисторами, выполненными по техпроцессу 10 мкм. Для сравнения, Intel 4004 — первый в мире коммерчески доступный однокристальный микропроцессор — производился по тому же техпроцессу и содержал 2300 транзисторов.

Читайте также:  Как сделать кукле барби аксессуары своими руками

Процесс изготовления достаточно подробно описывается как на сайте Зелуфа, так и в видео. Основное — не было никаких чистых помещений и чистых химикатов.

Для изготовления ИС энтузиасту понадобилась вода, алкоголь, ацетон, фосфорная кислота, фоторезист, 2-процентный раствор гидроксида калия, SOG-плёнка Filmtronics P509, 1-процентная плавиковая кислота и азотная кислота. Последние два вещества можно заменить. Что касается оборудования, нужно иметь электроплиту, трубчатую печь, специальный аппарат для литографии, микроскоп и вакуумную камеру для плавки металла.

Источник

Процессор и ПК своими руками: проект BMOW 1

Никому не известный инженер Стив Чемберлин (Steve Chamberlin) решил изменить общепринятое мнение о том, что процессор своими руками создать невозможно. Точнее, процессор достаточно сложного ПК, который смог бы дублировать функции 8-битных вычислительных устройств, получивших распространение в начале 80-х. Вначале это было небольшой проект, который со временем вырос в нечто большее. Сейчас BMOW 1 представляет собой полноценный ПК на основе самодельного процессора, который запускает программы, имеет клавиатуру, VGA-видео, аудио-систему. Программная среда для BMOW 1 — Basic.

Процессор, созданный Стивом Чемберлином, состоит из десятков простейших логических чипов, так что не все в этом ПК — проволока и текстолит. Однако собиралось все это вручную, на что у Стива ушло несколько лет. Как уже говорилось выше, вначале он хотел просто создать процессор, собранный самостоятельно, но в конце-концов было принято решение создать рабочий ПК, который смог бы выполнять определенные задачи.

Стив поставил перед собой несколько целей, все из которых были выполнены:

— создать процессор из простых элементов, были использованы чипы 7400 серии, без компонентов серий 6502, Z-80 и т.д.;

— свести сложность аппаратной части к минимуму;

— компьютер должен был запускать «реальные» программы, не являясь чисто «игрушкой»;

— процессор должен стать элементом системы полноценного ПК;

— система должна быть достаточно быстрой для интерактивного запуска и работы программ.

Сама идея возникла у Стива в ноябре 2007, а к реализации инженер приступил в феврале 2008 года. В апреле 2008 система BMOW 1 запустилась в первый раз, чему наш создатель был несказанно рад. Постепенно были добавлены VGA-видео, аудио-система, BASIC, бутлоадер, который позволял взаимодействовать с подключенным ПК. Через некоторое время BMOW 1 стал достаточно сложным, чтобы обеспечивать работу непростых программ. Основные работы по созданию BMOW 1 были завершены в феврале 2009 года, ПК дорабатывался до настоящего времени.

Вот некоторые подробности о конфигурации устройства:

— текущая частота работы процессора около 2 МГц. Процессор может быть «разогнан» до 3 МГц (теоретически, пока не проверено);

— 512 КБ RAM, 512 КБ ROM;

— потребление энергии 10 Ватт, 2А при 5В;

— картинка на «выходе» имеет разрешение 512*480, два цвета, или же 128*240 — 256 цветов;

— аудио — трехканальный звуковой генератор;

— обычная клавиатура с PS\2-коннектором;

— дополнительный дисплей для вывода текста, 24*2 символа;

— 1250 проволочных проводника, т.е. около 2500 соединений;

Источник

Процессор

Сколько я себя помню, всегда мечтала сделать процессор. Наконец, вчера я его сделала. Не бог весть что: 8 бит, RISC, текущая рабочая частота — 4 кГц, но он работает. Пока что в программе моделирования логических цепей, но все мы знаем: «сегодня — на модели, завтра — на деле!».

Под катом несколько анимаций, краткое введение в двоичную логику для самых маленьких, короткий рассказ про основные микросхемы логики процессора и, собственно, схема.

Двоичная логика

Двоичная система счисления (для тех, кто не в курсе) — это такая система счисления, в которой нет цифр больше единицы. Такое определение многих сбивает с толку, пока они не вспомнят, что в десятичной системе счисления нет цифр больше девятки.
Двоичная система используется в компьютерах потому, что числа в ней легко кодировать напряжением: есть напряжение — значит, единица; нет напряжения — значит, ноль. Кроме того, «ноль» и «один» легко можно понимать как «ложно» и «истинно». Более того, большая часть устройств, работающих в двоичной системе счисления, обычно относится к числам как к массиву «истинностей» и «ложностей», то есть оперирует с числами как с логическими величинами. Для самых маленьких и тех, кто не в курсе, я расскажу и покажу, как работают простейшие элементы двоичной логики.

Элемент «Буфер»


Представьте, что вы сидите в своей комнате, а ваш друг — на кухне. Вы кричите ему: «Друг, скажи, в коридоре горит свет?». Друг отвечает: «Да, горит!» или «Нет, не горит». Ваш друг — буфер между источником сигнала (лампочкой в коридоре) и приемником (вами). Более того, ваш друг — не какой-нибудь там обычный буфер, а буфер управляемый. Он был бы обычным буфером, если бы постоянно кричал: «Лампочка светится» или «Лампочка не светится».

Элемент «Не» — NOT


А теперь представьте, что ваш друг — шутник, который всегда говорит неправду. И если лампочка в коридоре светится, то он скажет вам «Нет, в коридоре совсем-совсем темно», а если не светится — то «Да, в коридоре свет горит». Если у вас есть такой друг на самом деле, значит, он воплощение элемента «Не».

Элемент «Или» — OR


Для объяснения сути элемента «Или» одной лампочки и одного друга, к сожалению, не хватит. Нужно две лампочки. Итак, у вас в коридоре две лампочки — торшер, к примеру, и люстра. Вы кричите: «Друг, скажи, хотя бы одна лампочка в коридоре светит?», и ваш друг отвечает «Да» или «Нет». Очевидно, что для ответа «Нет» все лампочки обязательно должны быть выключены.

Читайте также:  Декоративная сосна своими руками
Элемент «И» — AND


Та же самая квартира, вы, друг на кухне, торшер и люстра в коридоре. На ваш вопрос «В коридоре обе лампочки горят?» вы получаете ответ «Да» или «Нет». Поздравляю, теперь ваш друг — это элемент «И».

Элемент «Исключающее Или» — XOR


Повторим еще раз эксперимент для элемента «Или», но переформулируем свой вопрос к другу: «Друг, скажи, в коридоре только одна лампочка светит?». Честный друг ответит на такой вопрос «Да» только в том случае, если в коридоре действительно горит только одна лампочка.

Сумматоры

Четвертьсумматор


Четвертьсумматором называют элемент «Исключающее Или». Почему? Давайте разберемся.
Составим таблицу сложения для двух чисел в двоичной системе счисления:
0+0= 0
0+1= 1
1+0= 1
1+1= 10

Теперь запишем таблицу истинности элемента «Исключающее Или». Для этого обозначим светящуюся лампочку за 1, потухшую — за 0, и ответы друга «Да»/«Нет» как 1 и 0 соответственно.
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

Очень похоже, не так ли? Таблица сложения и таблица истинности «Исключающего Или» совпадают полностью, кроме одного-единственного случая. И этот случай называется «Переполнение».

Полусумматор

При переполнении результат сложения уже не помещается в столько же разрядов, во сколько помещались слагаемые. Слагаемые — два однозначных числа (одна значащая цифра, понимаете?), а сумма — уже двузначное (две значащих цифры). Две цифры одной лампочкой («Светится»/«Не светится») уже не передать. Нужно две лампочки. Нужно — сделаем!

Кроме XOR, для сумматора нам потребуется элемент «И» (AND).
0 XOR 0 = 0 0 AND 0 = 0
0 XOR 1 = 1 0 AND 1 = 0
1 XOR 0 = 1 1 AND 0 = 0
1 XOR 1 = 0 1 AND 1 = 1

Тадам!
0+0= 00
0+1= 01
1+0= 01
1+1= 10

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

Я не буду вдаваться в подробности работы полных и многоразрядных сумматоров, просто надеюсь, что основную идею вы уловили.

Более сложные элементы

Мультиплексор


Предлагаю снова включить воображение. Итак, представьте. Вы живете в частном одноквартирном доме, возле двери этого дома стоит ваш почтовый ящик. Выходя на прогулку, вы замечаете странного почтальона, который стоит возле этого самого почтового ящика. И вот что он делает: достает кучу писем из сумки, читает номер на почтовом ящике, и в зависимости от номера на ящике бросает в него то или иное письмо. Почтальон работает мультиплексором. Он определенным образом (номер на конверте) определяет, какой отправить сигнал (письмо) по сигнальной линии (почтовый ящик).

Мультплексоры состоят обычно только из сочетаний элементов «И», «Или» и «Не». У одноразрядного мультиплексора один вход называется «выбор адреса», два входа с общим названием «входной сигнал» и один выход, который так и называется: «выходной сигнал».
Когда на «выбор адреса» подается 0, то «выходной сигнал» становится таким же, как первый «входной сигнал». Соответственно, когда на «выбор» подается 1, то «выходной сигнал» становится равным второму «входному сигналу».

Демультиплексор


А вот эта штучка работает с точностью до наоборот. На «выбор адреса» даем адрес, на «вход данных» даем данные, на выходе с номером «адрес» имеем данные со входа.

Счетчик


Для понимания работы счетчика вам опять понадобится ваш друг. Позовите его из кухни (надеюсь, он не сильно там скучал, и, главное, не съел всю вашу еду), и попросите делать вот что: пусть он запомнит число 0. Каждый раз, когда вы будете прикасаться к нему, он должен прибавить единицу к тому числу, которое помнит, сказать результат и запомнить его. Когда результат будет равен (допустим) 3, он должен выкрикнуть «Абракадабра!» и отвечать при следующем прикосновении, что сейчас он помнит число 0. Немного сложно? Смотрите:

Вы прикасаетесь к другу. Друг говорит «Один».
Вы прикасаетесь к другу. Друг говорит «Два».
Вы прикасаетесь к другу. Друг говорит «Три». Друг выкрикивает «Хабрахабр!». Критическая атака! Вы временно парализованы и не можете двигаться.
Вы прикасаетесь к другу. Друг говорит «Ноль».

Ну, и так далее. Очень просто, верно?
Вы, конечно, поняли, что ваш друг сейчас — это счетчик. Прикосновение к другу можно считать «тактирующим сигналом» или, попросту говоря, сигналом продолжения счета. Крик «Абракадабра» показывает, что запомненное значение в счетчике — максимальное, и что при следующем тактирующем сигнале счетчик будет установлен в ноль. Есть два отличия двоичного счетчика от вашего друга. Первое: настоящий двоичный счетчик выдает запомненное значение в двоичном виде. Второе: он всегда делает только то, что вы ему говорите, и никогда не опускается до дурацких шуточек, способных нарушить работу всей процессорной системы.

Память

Триггер


Давайте продолжим издеваться над вашим несчастным (возможно, даже воображаемым) другом. Пусть теперь он запомнит число ноль. Когда вы касаетесь его левой руки, он должен запоминать число ноль, а когда правой — число один. При вопросе «Какое число ты помнишь?» друг должен всегда отвечать то число, которое запоминал — ноль или один.
Простейшей запоминающей ячейкой является RS-триггер («триггер» значит «переключатель»). RS-триггер может хранить в себе один бит данных («ноль»/«один»), и имеет два входа. Вход Set/Установка (совсем как левая рука вашего друга) записывает в триггер «один», а вход Reset/Сброс (соответственно, правая рука) — «ноль».

Читайте также:  Домик для кошечек своими руками
Регистр


Немного сложнее устроен регистр. Ваш друг превращается в регистр тогда, когда вы просите его что-нибудь запомнить, а потом говорите «Эй, напомни мне, что я говорил тебе запомнить?», и друг правильно отвечает.

Регистр обычно может хранить в себе чуть больше, чем один бит. У него обязательно есть вход данных, выход данных и вход разрешения записи. С выхода данных вы в любой момент можете прочитать то, что в этом регистре записано. На вход данных вы можете подавать те данные, которые хотите в этот регистр записать. Можете подавать данные до тех пор, пока не надоест. В регистр все равно ничего не запишется до тех пор, пока на вход разрешения записи не подать один, то есть «логическую единицу».

Сдвиговый регистр


Вы когда-нибудь стояли в очередях? Наверняка стояли. Значит, вы представляете, каково быть данными в сдвиговом регистре. Люди приходят и становятся в конец очереди. Первый человек в очереди заходит в кабинет к большой шишке. Тот, кто был вторым в очереди, становится первым, а тот, кто был третьим — теперь второй, и так далее. Очередь — это такой хитрый сдвиговый регистр, из которого «данные» (ну, то есть люди) могут убегать по делам, предварительно предупредив соседей по очереди. В настоящем сдвиговом регистре, разумеется, «данные» из очереди сбегать не могут.

Итак, у сдвигового регистра есть вход данных (через него данные попадают в «очередь») и выход данных (из которого можно прочитать самую первую запись в «очереди»). Еще у сдвигового регистра есть вход «сдвинуть регистр». Как только на этот вход приходит «логическая единица», вся очередь сдвигается.

Есть одно важное различие между очередью и сдвиговым регистром. Если сдвиговый регистр расчитан на четыре записи (например, на четыре байта), то первая в очереди запись дойдет до выхода из регистра только после четырех сигналов на вход «сдвинуть регистр».

Оперативная память

Если много-много триггеров объединить в регистры, а много-много регистров объединить в одной микросхеме, то получится микросхема оперативной памяти. У микросхемы памяти обычно есть вход адреса, двунаправленный вход данных (то есть в этот вход можно записывать, и с него же можно считывать) и вход разрешения записи. На вход адреса подаем какое-нибудь число, и это число выберет определенную ячейку памяти. После этого на входе/выходе данных мы можем прочитать то, что записано в эту самую ячейку.
Теперь мы одновременно подадим на вход/выход данных то, что хотим в эту ячейку записать, а на вход разрешения записи — «логическую единицу». Результат немного предсказуем, не так ли?

Процессор

BitBitJump

Процессоры иногда делят на CISC — те, которые умеют выполнять много разных команд, и RISC — те, которые умеют выполнять мало команд, но выполняют их хорошо. Одним прекрасным вечером мне подумалось: а было бы здорово, если бы можно было сделать полноценный процессор, который умеет выполнять всего одну команду. Вскоре я узнала, что существует целый класс однокомандных процессоров — OISC, чаще всего они используют команду Subleq (вычесть, и если меньше или равно нулю, то перейти) или Subeq (вычесть, и если равно нулю, то перейти). Изучая различные варианты OISC-процессоров, я нашла в сети сайт Олега Мазонки, который разработал простейший однокомандный язык BitBitJump. Единственная команда этого языка так и называется — BitBitJump (скопировать бит и перейти по адресу). Этот, безусловно эзотерический, язык является полным по Тьюрингу — то есть на нем можно реализовать любой компьютерный алгоритм.

Подробное описание BitBitJump и ассемблер для этого языка можно найти на сайте разработчика. Для описания алгоритма работы процессора достаточно знать следующее:
1. При включении процессора в регистрах PC, A и B записаны 0
2. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр A
3. Увеличиваем PC
4. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр B
5. Увеличиваем PC
6. Записываем в ячейку с адресом, записанным в регистре B, содержимое бита с адресом А.
7. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр B
8. Записываем в регистр PC содержимое регистра B
9. Переходим к пункту 2 нашего плана
10. PROFIT.

К сожалению, алгоритм бесконечный, и потому PROFIT достигнут не будет.

Собственно, схема

Схема строилась стихийно, поэтому правят бал в ней страх, ужас и кавардак. Тем не менее, она работает, и работает прилично. Чтобы включить процессор, нужно:
1. Ввести программу в ОЗУ
2. Нажать на включатель
3. Установить счетчик в положение 4 (это можно делать и аппаратно, но схема стала бы еще более громоздкой)
4. Включить тактовый генератор

Как видите, использованы один регистр, один сдвиговый регистр, одна микросхема ОЗУ, два двоичных счетчика, один демультиплексор (представленный компараторами), два мультиплексора и немного чистой логики.

Можете скачать схему в формате circ для программы Logisim, и поиграться.

Что дальше?

Во-первых, можно увеличить разрядность процессора — заменив 8-битные элементы на 16-битные.
Во-вторых, можно вынести ОЗУ из процессора, и добавить несложную схему, которая будет приостанавливать процессор, изменять ОЗУ и снова включать процессор. Такая схема будет выполнять функции простого контроллера ввода-вывода. Тогда можно будет сделать на базе этого процессора калькулятор, контроллер или еще какую-нибудь забавную бесполезную штуку.
В-третьих, можно воплотить всю эту схему в железе. Что я собираюсь сделать. Как только сделаю — обязательно расскажу и покажу.

Источник

Оцените статью