Проектирование собственного компьютера. Часть 1

Вступительная часть. «Наполеоновские планы»


Почти год назад у меня возникла мысль понять, как устроен компьютер, как он работает. Ну и конечно же, появилось огромное желание создать свой собственный на элементарных логических элементах (если быть точнее — на транзисторах).
Тогда у меня было только маленькое представление о его работе: я знал, что вся цифровая электроника построена на логических элементах (для меня это было, как постулат), но никак не мог сообразить, как исполняется программа, суммируются числа, зачем прерывания… Этот перечень вопросов можно продолжать и дальше, но сейчас не об этом.
Определим характеристику разрабатываемого компьютера:
  • Вид логики: двоичная логика
  • Разрадность шины данных: 32 бита
  • Разрядность шины адреса: 24 бита (можно адресовать 16 777 216 32-разрядних чисел)
  • Исполнение основных арифметических, логических, побитовых операций над данными, а также операций над ячейками памяти (mov, xchg)
  • Реализация функции выделения памяти (предусмотрено 4 ассемлерных инструкции)
  • Обработка данных напрямую и с помощью указателей

Программное обеспечение


Для целей проектирования логических схем существует множество программ. Но для масштабного проектирования и отладки мои требования удовлетворили только две программы (наверное мои требования слишком суровы):
  1. Logic Circuit
  2. Logisim

Собственно требования:
  1. Интуитивный интерфейс
  2. Создание схем больших размеров
  3. Возможность создания модульных схем (схема в схеме)
  4. Разнообразие базовых логических элементов с возможностю редактирования их параметров
  5. Наличие элемента «ОЗУ» и\или «ПЗУ»
  6. Возможность загрузки бинарного файла в ОЗУ\ПЗУ и сохранения дампа ОЗУ в бинарный файл
  7. Наличие обширной элементной базы для ввода\вывода информации и отладки схем (кнопки, константы, пробники, генератор тактовых импульсов...)

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

План действий



Так как практика без теории не существует, то для создания чего-либо нужна теоретическая база. Поэтому сегодня в программе мы рассмотрим следующие теоретические аспекты:
  • Ключевой элемент всей цифровой электроники — транзистор;
  • Логические элементы, их виды;
  • Технологии построения электронных схем или строим логические элементы на транзисторах;
  • Законы де Моргана или как можно уменьшить количество вентилей;


Ключевой элемент всей цифровой электроники — транзистор


Базовым элементом для интегральной схемы служит транзистор.
За определением Википедии,
транзистор — радиоэлектронный компонент из полупроводникового материала, позволяющий входным сигналом управлять током в электрической цепи.
Из транзисторов состоят логические элементы. Из логических элементов создают триггеры, сумматоры, логические блоки, счетчики. Комбинируя все это правильным образом можно создать свой собственный компьютер (или ЕОМ).

Логические элементы, их виды


Логические элементы — устройства, предназначенные для обработки информации в цифровой форме.

Логическую функцию любой сложности можно задать с помощью таких логических элементов:
  • Элемент НЕ (инвертор). На выходе будет «1» тогда и только тогда, когда на входе будет «0»;
  • Элемент И (конъюнкция). На выходе будет «1» тогда и только тогда, когда на всех входах будет «1»;
  • Элемент ИЛИ (дизъюнкция). На выходе будет «1», когда хотя бы на одном входе будет «1»;
  • Элемент сложения по модулю 2 (исключающее ИЛИ). На выходе будет «1» тогда и только тогда, когда на входе будет нечётное количество «1»;
  • Повторитель;
  • Управляющий повторитель. Используется для соединения нескольких выходов в один выход

Логические элементы в Logisim:


Технологии построения электронных схем или строим логические элементы на транзисторах


Первоначальной затеей было построить компьютер не на микросхемах 7400 серии, а на транзисторах. И начал я поиск технологий построения электронных схем. Существуют следующие:
  1. Резисторно-транзисторная логика (РТЛ);
  2. Диодно-транзисторная логика (ДТЛ);
  3. Эмиттерно-связанная логика (ЭСЛ);
  4. Интегрально-инжекционная логика (ИИЛ, И2Л, И3Л, I2L);
  5. КМОП (К-МОП; комплементарный металлооксидный полупроводник).

Далее я прочитал для каждой преимущества\недостатки, и среди них выбрал резисторно-транзисторную логику. Выбор был очевиден ввиду того, что эта логика имеет конструктивную простоту и маленькую стоимость. А также к этой логике есть огромный выбор биполярных SMD транзисторов и SMD резисторов. Транзисторы я взял BC847C n-p-n и BC857C p-n-p.
Закрыв глаза на все недостатки, я на целый месяц погрузился в ресчеты логических элементов на транзисторах. Сделал несколько тестовых схем на макетке, применяя транзисторы BC547C. Результатами теоретической и практической частями был доволен.
Макетка:


Остался последный этап — проектирование схемы синхронного T-триггера на 847 транзисторах, проверка его работоспособности и анализ частотных характеристик. Тест работоспособности довольно простой — на вход «T» подается логическая «1», а на вход «C» — тактовые импульсы с генератора. На выходе я должен получить тактовые импульсы, частота которых вдвое меньше входной. Если все заработает на приемливой частоте — значит заработает и весь компьютер.
Спроектировал схему, которая состоит из 4-х T-триггеров. Сделал печатную плату фоторезистивным методом, нехитро запаял и в итоге получил вот такую красоту (ширина дорожек — 0,15мм):




Подключил к схеме источник питания на 5 вольт, подключил генератор на вход и осциллограф на выход. Начал тестирование на частоте 1 МГц, но схема не заработала. Потом понизил до 20 кГц — вуаля, схема заработала правильным образом. Манипулируя напряжением питания смог повысить рабочуюю частоту до 40 кГц…
Увы, но схема моих ожиданий не оправдала. К тому же только один Т-триггер заработал правильно на частоте до 40 кГц, а все остальные не могли переходить из высокого состояния в низкий, хотя внутринние RS-триггеры работали правильно.
Я провел еще некоторые эксперименты по построению логических элементов, только уже на полевых транзисторах. Результаты получились удовлетворительными, но появились некоторые проблемы:

  1. Высокая стоимость проекта (около 1000$ только на транзисторы);
  2. Проблема достать полевые SMD транзисторы в Украине;
  3. Проблема запаять 15 — 20 тысяч транзисторов на КМОП логике, вместо 7 — 10 тысяч на РТЛ.

Для себя я сделал хороший вывод: лучше покупать микросхемы 7400 серии с логическими элементами, чем делать логические элементы на транзисторах. А для очистки совести когда вся схема на микросхемах будет готова, можно заменить несколько ключевых микросхем на транзисторные схемы и подключать по-очереди и то, и другое для демонстрации того, что все микросхемы можно заменить на транзисторы :)

Законы де Моргана или как можно уменьшить количество вентилей


Законы де Моргана — это правила, которые связывают логические операторы (дизъюнкцию и конъюнкцию) с помощью логического отрицания. В формальной логике их можно записать так:
image
image

Рассмотрим пример использования этих правил в действии. Пусть мы имеем такую схему:

Используя законы де Моргана схему можно переделать на такую:

Как можно заметить по таблицам истинности, логика этих схем идентичная.
Теперь маленький постулат: для логических элементов (кроме логического НЕ) на КМОП логике с инверсным выходом (например, логическое 2И-НЕ) нужно на два транзистора менше, чем для логических элементов с не инверсным выходом (например, логическое 2И).
Тогда, для первой схемы нужно будет 18 транзисторов, а для второй — 12 транзисторов. Причем, вторая схема будет работать быстрее из-за того, что используется меншее количество вентилей и сигнал будет проходить на порядок быстрее.

Планы на будущее


В следующем посте я расскажу о триггерах и мы начнем проектировать АЛУ.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 47

    +7
    Тоже когда то собирал свой компьютер, правда на ттл логике
    В итоге забросил...
    image
      0
      А чего забросили?
        0
        Просто времени не хватало, а потом интерес пропал. Да и отлаживать на макетке не так удобно, как хотелось бы.
      +5
      Характеристики компьютера очень высокие — сложность будет очень высока. Может лучше начать с 8 бит?
      Вот это автор видел: разные конструкции самодельных компьютеров?
        +2
        Я проектировал 16-битный компьютер на логических елементах (схема состоит из 8900 елементов), схему тестировал в Logic Circuit. К компьютеру написал ассемблер. Он может исполнять 75 ассемблерных инструкций (204 мнемоники).
        А сейчас хочу сделать 32 битный.
          +3
          Если вы уже делали 16- ти битный на рассыпухе, то зачем так же делать и 32-х битный? В чем смысл делать тоже самое только в большем обьеме?
          Почему бы не сделать 32-х битный на FPGA? Суть то таже самая. Хочется на логических элементах пожалуйста, только они будут внутри и вместо пайки их будет соединять между собой прошивка FPGA. Как бонус получите и большую скорость и дополнительне фишки в виде ROM/RAM и т.д.
          Заодно получите опыт в области, которая сейчас очень актуальна.
            +1
            Плюс, программирование на verilog — довольно интересная штука)
              0
              Интригует :)
              0
              Хочется отработать некоторые моменты, например прерывания.
              А FPGA — хорошая идея!
                0
                Ну так чтобы отработать любые моменты не обязательно паять логику руками.
                Если хочется работать на уровне схемы и логических элементов в IDE для FPGA можно делать тоже самое. Т.е. основной способ это конечно написание кода на HDL, но никто не мешает вам самому накидать схему из логики и IDE ее реализует в чипе.
                Еще приятный момент, что там можно сразу запускать симуляцию и видеть чего вы там насоздавали в схеме.
                Собрав процессор на рассыпухе, единственный скил, который в итоге окажется максимально прокачан — это пайка. Сомневаюсь, что ваша мечта работать монтажником :-)
                  0
                  А какую IDE вы можете мне посоветовать?
                    +1
                    В мире FPGA так вопрос не ставится.
                    Там выбирается производитель чипов и он поставляет IDE для разработки под свои чипы.Обычно базавая версия бесплатная и она покрывает практически все потребности начинающих. Наверно существуют пакеты и от сторонних разработчиков, но не думаю, что они легко доступны.
                    Самыми популярными производителями являются Xilinx и Altera. Выбор между ними — это один большой холивар. Номенклатуоа выпускаемых чипов практически один в один совпадает, особенно в нижнем сегменте. IDE у них следующие:
                    Xilinx — ISE
                    Altera — Quartus
                    Я пользуюсь только Xilinx, мне хватает. Про Altera ничего сказать не могу т.к. даже в руках их продукцию не держал.
                    На старте думаю лучше выбирать того производителя, с которым работает ближайший к вам человек, у которого вы сможете спросить совет.
                      0
                      Для альтеры есть ещё Modelsim
                      он чуть поменьше весом.
            • UFO just landed and posted this here
                0
                Ещё нет :) Сейчас у меня на первом месте поступление в университет. Начну воплощать в жизнь летом, после сдачи экзаменов.
                  0
                  Значит никогда :-D Такие дела делаются или прямо сейчас или никогда.
                  А в универе — других забот на которые придется отвлекаться будет более чем достаточно…
                    0
                    Для любимого занятия у меня всегда найдётся время!
                      0
                      Жене это скажешь
                        0
                        :)
                0
                Я пробовал реализовать 32-х битный ORISC в Portal2 во встроенном редакторе, но карта оказалась слишком сложной и я не собрал даже нужное количество регистров памяти(
              0
              А я дальше теории не ушёл в детстве. Изучал схемы разных вариантов спектрума, потом рисовал свою с максимальным приближением в совместимости с реальным спектрумом. Потом попалась книжка про микропроцессоры. Пытался нарисовать комп с какой-то моторолой. Эх. Не понимал я тогда, что компьютер — это не только железо, но и ПО. Хотя, теоретически, то, что было нарисовано, могло работать. Разве что видеовывод вряд ли я тогда нарисовал. Я и на спектруме слабо понимал как там видеосигнал телевизионный формируется.
                +4
                Собрать 4 триггера на дискретке — это, конечно, круто. Однако вы вообще представляете себе масштаб задачи, за который взялись? Тем более с разрядностью в 32 бита? Допустим нам нужно реализовать 32-ух битный регистр. На RS-триггерах нам понадобится 32 триггера. Каждый триггер — 3 транзистора. Т.е. 96 транзисторов только на один регистр. Которых нужно несколько.
                Да и, ко всему прочему, компьютер состоит не только из процессора. Нужно где-то хранить программу(память программ) и ее данные(память данных). Плюс организовать обмен данными с пользователем(система ввода-вывода).
                Для простейших программ можно обойтись без памяти данных, используя для этой цели регистры процессора. Православный Z80 имеет этих регистров(8-ми битных) аж 17 штук, что позволяло создавать конструкции на базе этого процессора совсем без памяти данных.
                  +9
                  «Поскольку реальное аппаратное обеспечение состоит только из компонентов, описанных в главе 3, то теоретически после прочтения этой главы читатель сможет пойти в магазин, купить кучу транзисторов и сконструировать виртуальную машину Java для целых чисел. Тому, кто успешно выполнит это задание, будет предоставлен дополнительный кредит (а также полное психиатрическое обследование)»

                  Э.Таненбаум «Архитектура компьютера»
                    +1
                    Вот бы собрать систему для высокопроизводительного вычисления SHA256
                      0
                      ПЛИС? Впрочем, эта задача уже решена.
                        0
                        Решена то решена, но я говорю о том чтоб самому такую собрать и желательно чтоб не очень дорого вышло. А системы на ASIC во первых не дешего стоят, а во вторых их еще толком в глаза некто не видел, первые кто их заказывал получат их только в начале лета, и вообще получат ли они их еще вопрос, на некоторых bitcoin форумах ходят слухи что все эти чипы на ASIC это фейк и лохотрон, такое же как и это интервью чувака из Butterfly Labs на CES (смотреть с сабами) www.youtube.com/watch?v=C4SnUObMd0o :)
                          0
                          А откуда тогда довольные отзывы, что мол купил 3 ASIC, окупились за неделю?
                          Мне кажется, они вполне реальны, только их создатели уже хорошенько ими отфармили, а когда курс взлетел, они обогатились.
                            0
                            Но в любом случае это задача не для рассыпухи. Там у 74 серии предел всего лишь считанные мегагерцы (чуть ли не один, не помню). Слишком медленно получится.
                              0
                              Считанные мегагерцы? Например, использовать 74AHC*** — Advanced High-Speed CMOS, three times as fast as 74HC** (HC — High speed CMOS, similar performance to LS, 12 ns). Как минимум 20-30 мегагерц.
                              За большой производительностью я не гонюсь :) Мне и несколько мег будет достаточно.
                        +4
                        Собирать компьютер из «рассыпухи» — сомнительное занятие. Считаю его нецелесообразным даже с академической точки зрения. На транзисторах можно ради интереса сделать парочку логических элементов, но не более того.

                        В плане проработки архитектуры микропроцессорной системы гораздо более интересно создать систему на ПЛИС. Или — если хотите жёсткую логику — на, собственно, стандартной логике (западная 74 серия или наша К1564 и др.). И паять меньше, и процесс интересней.
                          0
                          Именно, нужны плисы! А дальше добро пожаловать на opencores.com.
                            0
                            Я и буду использовать микросхемы 74 серии (CMOS)
                            +1
                            1. Не совсем понял, какое собственно назначение компьютера?
                            2. 32 и 24 бита? Это же 4294967296 и 16777216 зачем столько много комбинаций? Вы разоритесь на покупке составляющих
                            3. Почему не пользуетесь K-maps для упрощения составляющих цепи? Описывать уравнения исходя просто из таблицы не эффективно
                            4. Почему не используете VHDL программирование (ModelSIM отличный софт)
                            • UFO just landed and posted this here
                                0
                                На досуге почитаю!
                                  0
                                  Минимизация есть и встроенная в Logisim.
                                +1
                                Статья хорошая, но можнО пишется через «о», причём в каждом из 7 случаев
                                  0
                                  Украинский акцент, исправил
                                  +1
                                  О построении компьютера на транзисторах думал и я.
                                  Но конечно тут нужны неортодоксальные архитектуры, понятно что делать в лоб схему на 15тыс транзисторов нельзя.
                                  Я все еще эту идею не оставляю, и рассчитываю уложиться менее чем в 1000 транзисторов.

                                  Тестовые логические элементы — работают с фронтами в 10-20нс после всех трюков, т.е. на уровне быстрой TTL логики.
                                  После некоторого гемора заработали и 2-х транзисторные T-триггеры.
                                    0
                                    Т-триггер на 2-х транзисторах? Может быть RS?
                                      0
                                      Именно T ;-)
                                      Но схема очень капризная, требует тщательного выбора элементов.
                                        0
                                        Схема очень заинтересовала!
                                        А он синхронный? :)
                                          +4
                                          Асинхронный.



                                          Диоды от базы к эмиттеру — тут не обязательны, они для увеличения скорости. Конденсаторы параллельно с резисторами — в них основная идея. Когда на CLKIN приходит короткий инвертированный импульс — состояние переключается на противоположное.
                                            +1
                                            Зрю почти что симметричный триггер из УЛПЦТ :)
                                            Схема универсальная для тысячи поделок, я даже вот такую штуку делал:
                                              0
                                              Интересная реализация! Только её калибровать надо…
                                      0
                                      Проблема достать полевые SMD транзисторы в Украине;

                                      Хм… странные у вас проблемы.
                                        0
                                        Лучше сразу понять какие шишки вы набёте

                                        1. Паяние транзисторов и резисторов — ну почитайте историю компьютеров и спросите себя способны Вы иметь пару шкафов у себя дома — оцените сколько они кушают?

                                        2. Создание схем на дискретных логических элементах — уже прогресс но Вам скорее всего захочется выжать максимум мегагерц — на сегодняшний день есть быстродействуюшие КМОП — 20 --30 Мгц может даже 100 Мгц — но тогда вам придётся очень качественно делать монтаж и продумывать средства для защиты схем от наводок, помех и «звона». У вас есть осцилограф?

                                        3. Использование ПЛИС и прочих микросхем памяти — уже интереснее — это позволяет Вам купив плату творить что угодно — посмотрите на проект марсоход. Проект посвещён созданию первой версии арм процессоров, а также там есть очень много других примеров. Также взгляните на opencores

                                        В любом случае, советую Вам написать что-нибудь на HDL языке, затем это эмулировать и уж затем паять или прошивать если вам это интересно.

                                        Также необходимо почитать чего-нибудь по теории автоматов — уверен вы уже что-либо сделали.

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

                                        Меня всегда интересовало, а какой минимально-аппаратный набор комманд и регистров нужен для процессора чтобы он был хоть как-то пригоден для использования. То есть можете вы сделать процессор из 16 транзисторов? а из 256? а из 1024?.. Создайте ЭВМ =процессор + SD карта + RS232 порт — тогда вы сможете выполнять достаточно много программ — это потенциальный кандидат на то чтобы другие повторили Ваш опыт на маленьких ПЛИС.

                                        Повторите первый исторический intel4004 процессор
                                        повторите z80 или i8080(та ещё дурацкая микросхема)

                                        Only users with full accounts can post comments. Log in, please.