Что можно сделать на 12 транзисторах? Если схема аналоговая, это может быть, например, радиоприёмник или усилитель с достойными характеристиками. Для цифровой же схемы это катастрофически мало. Даже в такой простой микросхеме, как АЛУ К155ИП3 (74181), их значительно больше.

На самом деле транзисторов и здесь не 12, а 27, но из них в собственно АЛУ используются только 11 (двенадцатый транзистор, принудительно подающий логический нуль на вход переноса при выборе логических операций, не установлен). Остальные транзисторы задействованы в формирователе сигналов, подаваемых на входы АЛУ. При включении АЛУ в состав транзисторного процессора формирователь может и не понадобиться, если все необходимые сигналы там уже сформированы.

Как уложиться в это количество? Во-первых, сделать АЛУ однобитным, во-вторых, сократить количество операций до двух арифметических и пяти логических (у К155ИП3 и тех и других по 16, но и здесь их на самом деле больше), в третьих...

… выполнить АЛУ по необычной технологии DCTL (direct coupled transistor logic), позволяющей заметно сократить количество компонентов.

Симуляция выполнена в Falstad, этот симулятор удобен тем, что показывает направление протекания тока в виде «бегущих огней». Файлы: только полный сумматор и готовый АЛУ.

Для начала построим «АЛУ» с одной функцией — полный сумматор. Разобьём схему на две половины. Первая предназначена для подготовки входных сигналов для сумматора:



Выключателями можно задать два однобитных числа — A и B и сигнал переноса. Из них схема формирует четыре сигнала (четвёртый — тот же самый B, только инвертированный).

Вторая половина схемы — собственно сумматор:



Он представляет собой реализацию классического полного сумматора. На структурной схеме дополнительно показано распределение транзисторов по логическим элементам:



Чтобы всё это превратить в многофункциональное АЛУ, сначала переделаем формирователь входных сигналов таким образом, чтобы она формировала в прямом и инвертированном виде не только величину B, но и величину A:



Но поскольку автор планирует применить своё АЛУ в составе процессора на дискретных компонентах, такой формирователь, может и не потребоваться: там обе величины и так будут в прямом и инвертированном виде. Поэтому транзисторы формирователя и не входят в число транзисторов АЛУ. Да и без процессора можно просто взять переключатели с перекидными контактами. Ну а теперь — собственно АЛУ:



Четырьмя выключателями можно выбирать выполняемую АЛУ функцию. Ниже показаны только 7 основных:



Чтобы АЛУ не было «сферическим в вакууме», а могло получать сигналы извне, выключатели нужно заменить транзисторами. Поскольку транзистора, принудительно подающего логический нуль на вход переноса при выборе логических функций, пока нет, подавать нуль на этот вход в таких случаях нужно вручную.

Хотя на рисунке показаны всего 7 функций, можно попробовать все 16 сочетаний положений выключателей. Будут получаться, в частности, функции И-НЕ, ИЛИ-НЕ, ИСКЛЮЧАЮЩЕЕ ИЛИ-НЕ, пропускание сигнала B насквозь, инвертирование того же сигнала.

Симуляция может преподносить сюрпризы. Знаете ли вы, что биполярный транзистор может работать при пропускании через него тока в обратном направлении? Так получается при некоторых сочетаниях входных сигналов. В аналоговом усилителе при этом уменьшается коэффициент усиления, но логические схемы продолжают работать так же, как в нормальном режиме.

Напряжение питания составляет +5 В. В симуляторе выбраны транзисторы общего применения структуры NPN.

Сумматор получается со сквозным переносом. Сигналу переноса приходится проходить через транзистора T8 и T9. Если это слишком медленно, нужно сначала проверить, как влияет на работу схемы цепь, подключённая к эмиттеру транзистора T8. Перенос можно также сделать быстрее, если выполнять его для двух бит одновременно.

Если нужен только полный сумматор, подойдёт и обычная диодно-транзисторная логика (DTL). Транзисторов понадобится всего два, а вот диодов… Можно заменить эти транзисторы лампами, получится то, что автор называет DVTL — diode-vacuum-tube-logic.



Верхняя часть схемы вырабатывает инвертированный сигнал переноса. Вторая вычисляет инвертированную сумму: СУММА = ( ( A или B или C вх ) и /C вых ). Данное выражение может быть представлено также как ( A и B и C вх ).

Структурная схема получается следующей:



Добавив ещё немного компонентов, можно принудительно подавать на вход переноса нуль или единицу. Тогда схема сможет выполнять операцию И (на входе переноса единица, на инвертированном выходе переноса — нуль), а также ИЛИ (на входе переноса нуль, на инвертированном выходе переноса — единица).

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

Всё это можно превратить в действующее АЛУ, рассчитав номиналы резисторов и добавив дополнительные компоненты для оптимизации «отзывчивости» схемы. Устройства, подключённые к входам, должны содержать ключи, замыкающие их на землю (для входов диодных «И»), либо соединяющие их с плюсом питания (для входов диодных «ИЛИ»).

Это очень простая схема, в ней не реализован быстрый перенос.

Комментарии (24)


  1. dronab
    15.04.2019 10:06
    +1

    Будет ли полный цикл статей по сборке процессора на дискретных компонентах?


    1. tormozedison Автор
      15.04.2019 10:10

      Если roelh за него возьмётся.


    1. ZEvS_Poisk
      15.04.2019 12:20
      +2

      Будет (от меня). Как раз с нового года делаю процессор на логике. :)


      1. AquiHostStrider
        16.04.2019 00:28
        +1

        Я уже себе представил проц на куске текстолита размером с лист А4 :)
        Какая длина слова? Сколько регистров? Защищённый режим будет? Отдельная шина для UART и SPI?
        Если всё так, то Ваш проект действительно интересный, во всяком случае получше стопятисотого способа реализовать быдлоспектрум. Конечно, есть BMOW, но там не совсем то, что хотелось бы видеть — он реализован на готовых АЛУшках.


        1. ZEvS_Poisk
          16.04.2019 01:10
          +1

          Не хотел заранее, но проговорился :)
          Расчитываю на 3-4 статьи про процессор, и еще пару про сам компьютер на таком процессоре. Процессор 8-бит, система команд похожая (но не идентичная) кр580вм80а.
          Планирую выжать 2 MOPS.
          Про A4, Вы не ошиблись, но я собираю на макетных платах, этажеркой 3 штуки, разделенные стойками. И еще 2 такие-же на сам компьютер, где 1я это видеосистема, а 2я все остальное. Регистров общего назначения 6 (восьмибитные). Шина адреса 16-бит. Защищенного режима (конечно) нет. UART — пока не знаю, SPI — врядли. Из периферии таймер для звука, клавиатура, дисплей (несложная графика), накопитель на SD.
          Делаю на спор, об этом напишу. Из условий: процессор не должен включать в себя ПЛИС (хоть устаревшие, хоть современные), не должен включать в себя микропроцессоры и микроконтроллеры (также хоть устаревшие, хоть современные), все корпуса микросхем должны быть DIP со стандартным шагом 2.54, использование «SOиков» по согласованию и рассмотрению и в сверхмалых дозах (в идеале без них).
          Использование микросхем в tqfp, mlf, bga и т.д. — запрещается. Единственная современная деталь, разрешенная в таком компьютере SD карта (в качестве накопителя).
          Однако, использование AVR, STM32 или ПЛИС разрешено только на этапе отладки отдельных узлов процессора, таких как эмуляция внешней периферии, пошаговый прогон команд, эмуляция ПЗУ и ОЗУ, но они должны быть удалены по окончанию проекта. Здесь они не являются частью процессора, а лишь инструментами в разработке, также как, например, осциллограф.


          1. Pyhesty
            16.04.2019 02:36

            а вы знаете толк в извращениях ;)
            респектую и теперь моя жизнь наполнилась смыслом, буду ждать что получится )))


          1. AquiHostStrider
            17.04.2019 12:00
            +1

            но проговорился :)
            Да уж, спойлеры вредят доходам кинотеатров. Думаешь, что тебе покажут приключенческий боевик, а там мелодрама в фэнтезийной обёртке :)
            компьютер на таком процессоре.
            … Называется «калькулятор», потому что: ...
            Защищенного режима (конечно) нет.
            После этого дальше читать уже не особо интересно. Тем не менее, некоторые моменты наводят на риторические вопросы. Почему-то планируются во-первых
            дисплей (несложная графика), накопитель на SD
            ..., и при этом
            SPI — врядли
            , хотя он достаточно прост для реализации на рассыпухе, чуточку сложнее UART'а. И он сразу снимает вопросы как с графикой, так и с интерфейсом для SD-карты, которая штатно умеет работать в SPI mode. Буква «Ц» — целесообразность.
            А сакральный смысл
            система команд похожая (но не идентичная) кр580вм80а
            мне и вовсе непонятен. КМК, описанный Вами калькулятор имеет смысл проектировать и изготовить разве что...
            на спор


            1. ZEvS_Poisk
              17.04.2019 16:23
              +1

              … Называется «калькулятор», потому что: ...

              По Вашему, так калькулятор от компьютера отличается наличием защищенного режима? А как же IBM PC до 286го? Это тоже калькуляторы? Компьютеры-самоделки, такие как «РАДИО-86РК», «МИКРОША», «СПЕЦИАЛИСТ»,«АПОГЕЙ» и прочие, назывались «ПЭВМ» — Персональная Электронно Вычислительная Машина. Полагаю, что мой проект заслуживает именно такого названия.
              После этого дальше читать уже не особо интересно.

              Дело Ваше. :)
              … хотя он достаточно прост для реализации на рассыпухе, чуточку сложнее UART'а. И он сразу снимает вопросы как с графикой, так и с интерфейсом для SD-карты, которая штатно умеет работать в SPI mode…

              Я имел ввиду, что аппаратного SPI не будет. Для общения с SD будет программный SPI. Как раз нецелесообразно делать аппаратный SPI, вполне достаточно написать программный.
              А сакральный смысл… мне и вовсе непонятен. КМК, описанный Вами калькулятор имеет смысл проектировать и изготовить разве что...

              Система команд зависит от применяемости процессора, на одних процессорах легче и быстрее решаются одни задачи, на других другие. Принципиально другие. Где-то задачи выгоднее распараллеливать, и там нужны многоядерные системы, а где-то решать наоборот в один поток, но быстро.
              Попытка сделать «суперуниверсальную» систему команд «для всех времен и народов» родила такого монстра как x86. Мне она кажется некрасивой, хотя в 90е я на ассемблере не один мегабайт написал.
              разве что… на спор

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


              1. AquiHostStrider
                18.04.2019 22:09

                По Вашему, так калькулятор от компьютера отличается наличием защищенного режима?
                Да.
                А как же IBM PC до 286го? Это тоже калькуляторы?
                Вобщем-то да, потому что и создавались изначально для вычислений, построения диаграмм и графиков, и расчитанные на бизнес-, а не на домашних пользователей, никто ж поначалу не думал, что на них будут ещё и играть. И не до 286, а до 386, потому что «двойка» не имела виртуализации памяти, из-за чего её защищённый режим по назначению использовать было нельзя.
                Компьютеры-самоделки,… назывались «ПЭВМ» — Персональная Электронно Вычислительная Машина.
                Калькулятор — это машина? — Да, потому что выполняет определённые действия вместо человека.
                Электронная? — Разумеется, это же не механический «Феликс».
                Вычислительная — По определению.
                Персональная — Да, потому как не расчитан на одновременное использование более чем одним пользователем.
                Так что с утверждением...
                Полагаю, что мой проект заслуживает именно такого названия.
                … следует согласиться.
                Дело Ваше.
                Есть же целый ресурс, где участники специально этим занимаются — собирают и пересобирают машинки 1980-х. Всё, что с ними в принципе интересного можно было сделать, уже к настоящему моменту сделали.
                Для общения с SD будет программный SPI.
                Ну, для перекалькулятора-недокомпьютера — самое оно, если собирается на спор из относительно доступных в те годы элементов, чтобы продемонстрировать саму возможность создания работающего устройства, которое потенциально может выполнять кое-какие задачи.
                Система команд зависит от применяемости процессора, на одних процессорах легче и быстрее решаются одни задачи, на других другие.
                Мне Капитан Очевидность уже доложил, спасибо. Вопрос был не в этом, а в том, почему вообще систему команд надо делать с чем-то совместимым, ведь Вас же не держит никакое легаси? Почему бы не сделать её максимально нативной, как можно сильнее упростив блок интерпретатора инструкций? Ведь всё равно первое время придётся всё пилить непосредствеено в кодах, а со временем добавить Вашу архитектуру в binutils либо приспособить более простой компилятор с ассемблера AXASM. А потом уже заняться добавлением Вашей архитектуры в gcc либо использовать для портирования C-компилятор попроще. А дальше libc, загрузчик ПЗУ на основе RTOS, простейший шелл… ну Вы и сами знаете.
                Попытка сделать «суперуниверсальную» систему команд «для всех времен и народов» родила такого монстра как x86.
                Система команд — это всегда компромисс между сложностью реализации и эффективностью. Можно в АЛУ вообще реализовать только одну функцию, например штрих Шеффера или стрелку Пирса — через них представима любая другая двоичная операция. Вопрос только в том, каковы будут размеры исполняемого файла и насколько быстро оно будет вычислять элементарные вещи.
                какой еще смысл делать подобный проект Вам видится
                Примерно аналогичный авиа- и гидромоделизму. Также любопытная тема — «попаданческий компьютер», но для него ещё нужно научиться изготавливать самодельные транзисторы (что требует смертельно опасных развлечений со сверхчистым кремнием и плавиковой кислотой).
                1) отдельный вид внешкольного образования (вопрос о нынешнем уровне нашего образования давайте оставим за скобками);
                2) созидающая субкультура с высоким порогом вхождения, что обусловит здоровую социальную микросреду;
                3) ещё одна интересная дисциплина олимпиад и соревнований, кроме алгоритмики можно ещё соревноваться в бенчмарках, в энергоэффективности;
                4) применение в некоторых случаях, где не критична вычислительная мощность и важна информационная безопасность — невозможность создания вирусов под ключевую архитектуру в силу её абсолютной уникальности;
                5) кузница потенциальных кадров не только по системному программированию, но и по встраиваемым системам и IoT.

                Разумеется, в кружке авиамоделирования детей должны учить проектировать модель самолёта, а не воздушных змеев. То есть процессор, на котором потенциально способна работать современная ОС, а не электронные игрушки из 80-х.


                1. tormozedison Автор
                  19.04.2019 07:03

                  Мне кажется, что наличием защищённого режима отличается компьютер, аппаратно приспособленный для многозадачности, от компьютера, аппаратно для многозадачности не приспособленного. Но это не значит, что на втором многозадачность невозможна. Minix говорит об обратном.


                1. ZEvS_Poisk
                  19.04.2019 16:42
                  +1

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

                  Теперь получается, что по Вашему компьютер от калькулятора отличается наличием возможности играть?
                  Но вообще-то, компьютер это вычислитель, также по определению.
                  Но зачем Вы пытаетесь выдумать свое определение, добавляя защищенный режим и виртуализацию памяти, для меня — загадка.
                  Есть же целый ресурс, где участники специально этим занимаются...

                  Ну, в целом, я тоже этим занимаюсь и увлекаюсь. Ретрокомпьютеры — одно из моих хобби, если хотите.
                  Вопрос был не в этом, а в том, почему вообще систему команд надо делать с чем-то совместимым, ведь Вас же не держит никакое легаси?

                  Согласен, меня ничего не держит. Но опираться на что-то надо. И надо с чем то сравнивать производительность. Я рассматривал СК от UMC6502, i8080 (кр580вм80а) и Z80. И в качестве базы выбрал вторую. Это не означает что опкоды будут совпадать, совсем нет.
                  Совпадать будет большинство основных инструкций, но не опкодов, код не будет совместим. Но код будет весьма легко переносить методом трансляции. Если Вы посмотрите на СК i8080, то Вы увидите много ненужного, например опкод $40 это MOV B,B. То есть переписать регистр в себя, то есть NOP. И такая команда есть для всех РОН!.. Каждый РОН можно записать в себя. То есть 8 опкодов заняты NOPами. В этих опкодах можно поместить команды поинтереснее.
                  И я как раз делаю так, как Вы написали выше.
                  Ведь всё равно первое время придётся всё пилить непосредствеено в кодах, а со временем добавить Вашу архитектуру в binutils либо приспособить более простой компилятор с ассемблера AXASM. А потом уже заняться добавлением Вашей архитектуры в gcc либо использовать для портирования C-компилятор попроще.

                  Но это Вы загнули. :) Я прекрасно осознаю, что проект не получит какого либо широкого распространения. И дело ограничится простейшим сборочным транслятором. Ну, а с OS — да, запуск на ПЗУ, загрузка в ОЗУ и шелл.
                  Также любопытная тема — «попаданческий компьютер»
                  Что это? :O
                  1) отдельный вид внешкольного образования

                  К сожалению или к счастью, я не педагог. :)
                  2) созидающая субкультура с высоким порогом вхождения, что обусловит здоровую социальную микросреду

                  Вот это и правда интересно, но не на этом проекте. Может на следующем, когда я отважусь сделать что-нибудь подобное Raspberry PI, на FPGA и ARM.
                  3) ещё одна интересная дисциплина олимпиад и соревнований, кроме алгоритмики можно ещё соревноваться в бенчмарках, в энергоэффективности;

                  То-же, что и первый пункт.
                  4) применение в некоторых случаях, где не критична вычислительная мощность и важна информационная безопасность — невозможность создания вирусов под ключевую архитектуру в силу её абсолютной уникальности;

                  Уникальность не может являться базой для ИБ. Любая криптография базируется на том, что злоумышленник все знает о системе, но сделать ничего не может. А не на том, что злоумышленник ничего не знает о системе, которую пытается взломать. ;)
                  5) кузница потенциальных кадров не только по системному программированию, но и по встраиваемым системам и IoT.

                  И тоже, не на таком проекте.
                  Разумеется, в кружке авиамоделирования детей должны учить проектировать модель самолёта, а не воздушных змеев. То есть процессор, на котором потенциально способна работать современная ОС, а не электронные игрушки из 80-х.

                  Если стоит образовательная цель, то да, соглашусь.


      1. dronab
        16.04.2019 00:41
        +1

        Тема очень интересная, буду ждать. И сходу вопрос — компоненты SMD? Я бы рискнул собрать простой проц + остальную обвязку, чтобы в итоге дергать RTC чип и выводить время на 7-ми сегментный индикатор. Просто по фану, но увы мозгов не хватает все с нуля спроектировать.


        1. ZEvS_Poisk
          16.04.2019 01:15

          Как раз компоненты не SMD, я хочу, что бы наоборот было винтажнее. Есть цель доказать, что «в те времена» когда народ собирал «РАДИО-86РК», то, что я делаю сейчас тоже было возможно. :)
          Про ограничения проекта написал чуть выше.

          А за статью автору огромное спасибо! Прочитал с удовольствием.


          1. dronab
            16.04.2019 08:29

            Ну смотрите, у SMD масса плюсов для этой затеи. Плотнее монтаж — позволяет создать итоговый проект небольшого размера. Отсутствует необходимость в массовом сверлении отверстий. Компактность позволит реально устройству быть в работе, а не пылиться потом на полке.
            Не рассматривали SMD компоненты готовой логики в SOT-23 корпусе? Я рассматривал и считаю неплохой вариант.


            1. ZEvS_Poisk
              16.04.2019 16:39
              +1

              Я знаю, что у SMD масса плюсов. И использую их постоянно в проектах на работе и в самоделках. Но здесь другой случай, я собираю на макетных платах. Во первых, это позволяет не разводить конкретную плату под проект, а во вторых, есть возможность менять схему по мере продвижения разработки. Миниатюрность здесь не требуется, наоборот я хочу наглядности. В такой процессор будет приятно тыкнуться осциллографом. По поводу пыли, я планирую корпус и скорее всего прозрачный из оргстекла, но это потом…
              SOT-23 не годится по условиям и ограничениям.
              Может в каком-то следующем проекте я рассмотрю подобную логику.


              1. dronab
                18.04.2019 15:10
                +1

                Ваше желание мне понятно. Во всей этой ситуации мне больше интересно каким образом такой пк станет понимать инструкции и инициализирует сам себя — в современном пк это делает bios. А тут что будет? ПЗУ в котором программа, где будут инструкции или что, как? Просто случилась подача питания, линия Reset делает аппаратный сброс чтобы перевести логику в состояние готовности, далее должно что-то загрузиться… но как?


                1. ZEvS_Poisk
                  18.04.2019 16:11
                  +1

                  Конечно ПЗУ! :) Все как обычно, и как везде. После сброса макропроцессор (я называю это так) начинает выполнять код с адреса 0000h, а там будет ПЗУ 2кб.
                  Обычно, ПЗУ распологают вверху адресного пространства, и даже в «РАДИО-86РК» есть хитрая система запуска, которая временно подставляет ПЗУ в нулевые адреса, но потом случается переход на верхние адреса и ПЗУ синхронно меняет свое расположение.
                  Но я решил иначе, я решил расположить ПЗУ в самом начале, 2кб должно хватить, что-бы проинициализировать всю периферию, найти SD карту и прочитать несколько секторов в ОЗУ, далее передать туда управление, и на этом функция ПЗУ заканчивается.
                  И написание ОС сведется к программированию на обычном ПК с последующей заливкой на SD. Как то так.


                  1. tormozedison Автор
                    18.04.2019 16:39

                    На ZX Spectrum ПЗУ внизу адресного пространства как раз.


                  1. dronab
                    18.04.2019 18:56

                    Ну стало чуточку понятнее, в принципе примерно так и думал. Я какое-то время назад систематически стал собирать инфу про что как что делал чтобы собрать на дискретных компонентах ПК или процессор. Тема интересная, быть может вы соберете на дискретных компонентах, а я попробую пересобрать на SOT-23-5 gate логике.


    1. DenisBlack
      15.04.2019 21:03
      +1

      Есть такая игрушка MHRD. Цель игры — разработать ЦП (жаль только, что ТЗ строго задано)
      store.steampowered.com/app/576030/MHRD


      1. Deosis
        16.04.2019 08:25

        Есть вариант попроще:
        построить процессор, начиная с элементов NAND


        1. Dovgaluk
          16.04.2019 09:43
          +1

          А ещё есть похожий учебный курс: www.nand2tetris.org


        1. DenisBlack
          16.04.2019 18:15
          +1

          MHRD тоже, собственно надо с NAND начинать, но это и не удивительно — все же самая популярная базовая функция.


  1. tormozedison Автор
    15.04.2019 10:10

    del