Процессор

  • Tutorial
Сколько я себя помню, всегда мечтала сделать процессор. Наконец, вчера я его сделала. Не бог весть что: 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-битные.
Во-вторых, можно вынести ОЗУ из процессора, и добавить несложную схему, которая будет приостанавливать процессор, изменять ОЗУ и снова включать процессор. Такая схема будет выполнять функции простого контроллера ввода-вывода. Тогда можно будет сделать на базе этого процессора калькулятор, контроллер или еще какую-нибудь забавную бесполезную штуку.
В-третьих, можно воплотить всю эту схему в железе. Что я собираюсь сделать. Как только сделаю — обязательно расскажу и покажу.

Спасибо всем за внимание!

P.S. Ссылки (для тех, кому лень читать):
1. Процессоры URISC — ru.wikipedia.org/wiki/Urisc
2. Сайт языка BitBitJump — mazonka.com/bbj/index.html
3. Программа для моделирования логических схем Logisim — http://ozark.hendrix.edu/~burch/logisim/
4. Самодельный URISC (ORISC) процессор для Logisim — narod.ru/disk/31367690001/oo.circ.html

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 64

    +5
    N лет назад курсовая была — спроектировать процессор на AHDL'e.
    Собственно, я написал простенький 8-битный, 13-командный, причём тестовая программа — рекурсивное вычисление факториала (да-да, там был и стек :) ).
    В общем, ничего сложного в этом не вижу :)
      +4
      Ну да, ничего сложного и нет. На AHDLе, кстати, немного проще. Я на нем недавно brainfuck-процессор писал, управился всего за пару часов (при том что AHDL знаю на уровне дисциплины провиницального университета, то есть не знаю).
      +8
      Ох, где моя тетрадка из детства, когда я тоже пытался схемы процессоров рисовать )
      И еще одна тетрадка была, где я записывал от руки программы на бейсике (не магнитофона, ни дисковода не было)
        +2
        Ностальгия… У меня были горы таких тетрадок.
          +5
          оказывается, я не один такой =)
            +2
            И вас даже не трое таких)
            У меня тоже были тетрадки с программами на бейсике.
            Писал от руки.
              +1
              А я как-то все лето в детстве прожил на даче. На входе: книжка по Perl, на выходе: стопка листов с программами. Правда так их и не запускал потом.
                +1
                Я помню ещё из журнала выписывал программы и просто справочную инфу (таблицу ASCII-кодов, например) в общую тетрадку. Да уж, было время. Недавно нашел, чуть не прослезился от умиления )
                  +1
                  Тоже в детстве были такие тетрадки, туда записывал листинг программ на бейсике. Строки номеровал канонически: 10, 20, 30… и т.д. Очень восхищался таким правилом, подсмотренным в «Науке и жизни», ведь при наложении «патчей», чтобы ввести недостающие строки, достаточно было их подклеить на бумажку между существующими, и дать номера помельче. Если блок выкидывался, заклеивал строки белой бумагой. После нескольких таких попыток необходим был «рефакторинг», т.е. переписать начисто программу в другую тетрадку, поскольку патчи торчали отовсюду и были похожи на макароны.
                    0
                    Я писал заново. И каждый раз присваивал новую версию. Помню, мой текстовый редактор за пару недель обрел номер версии повыше, чем сейчас у Emacs. Ностальгия-тред
                      +1
                      Paper CVS :) Правда хранить версии накладно…
            +1
            Сразу возникает вопрос: «Как вы раньше жили?», но лучше его облачить в более правдивую форму: «Почему у моего поколения все есть и мы такие тупые?» :-)
              +4
              Ну тут же прямая взаимосвязь )
                +1
                Уважаемый, мы такие же как и вы.
                Хотя да, взаимосвязь есть. У меня был Спектрум и Б3-21. А у многих моих друзей был Pentium II. Но их на Хабре я не видел почему-то.
                  +1
                  Тут даже дело не в Спектруме, а в том, что Вы от него хотели получить, хотя и в нем тоже :-)
                    +2
                    Да ладно, я хотел то же самое, что было у друзей.
                    Хотел игры. Приходилось писать.

                    Потом у меня была 80486я машина с EGA-монитором (ах, как я скучаю по ней), на которой не работали Windows 3.11 и Windows 95 (хотя однажды Windows 3.1 удалось установить). И я, глядя на картинки в книжке Фигурнова, делал свою «Windows». Вот время было…
                      +1
                      Верно, но возможности иметь что-то иное не было, поэтому грамотно и целеустремленно работали с тем, что есть. И это похвально. Ладно, нафлудили тут с Вами, пора заканчивать)
              +10
              Трудное детство, ZX Spectrum без магнитофона в одной розетке с холодильником.
                +3
                Откуда вы узнали?
                  +2
                  У меня в телевизоре было что-то неправильно переделано, и он выдавал со Спекки инвертированную картинку. Было забавно. Смотрел на жизнь в негативе. Трудное детство.
                    0
                    У меня была хорошая, качественная черно-белая картинка диагональю дюймов 7. Хотел бы я посмотреть на настоящий Спекки с цветным телевизором…
                      +1
                      Настоящего спекки не было, но всякие Орион-128, и спекки, подключенные к EGA монитору производили неизгладимое впечатление по качеству картинки. Особенно после 21" монитора сделанного из лампового цветного телевизора (точней у меня был гибридный лампово-транзисторный телевизор).
                      +1
                      О, навели на еще одно ностальгическое воспоминание: все детство играл в Dendy на телевизоре Электрон, правда вот ДМВ блок был битый и не выдавал цветную картинку ни в PAL ни в NTSC (это потом уже выяснилось, когда видик появился). Так что все игры были черно-белыми…
                0
                Если быть точным, то RISC — это не малый набор комманд, а упрощенный набор. Т.е. каждая комманда делает как можно меньше. Поэтому для того, чтобы сложить два числа в памяти в RISC архитектуре надо сначала загрузить lданные в регистры процессора, сложить их и выгрузить обратно в память. Таким образом, то, что в архитектуре CISC делается одной коммандой, в RISC потребует 3 и более.

                У некоторых RISC архитектур комманд больше, чем у множества CISC.
                Достаточно хорошо об этом написано в http://ru.wikipedia.org/wiki/RISC
                  +1
                  Да, именно так. Стоит ли исправить статью, как думаете?
                    +1
                    Думаю, что для начала стоит определиться с тем, что понимется под RISC архитектурой.

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

                    Первое: RISC всегда имеет фиксированную длину комманд.
                    Второе: Отсутствие микропрограмм внутри RISC процессора. Тогда как CISC преимущественно выполняет микропрограммы.
                  +3
                  Не совсем. RISC — ето именно уменьшений набор команд. Команди делаются более ортогональние, редко используемие команди — убираются. Про загрузить-посчитать-сохранить — ето Load-Store архитектура и ортогональна RISC. Например — ARM — Load-Store RISC. MSP430 — RISC, но не Load Store.
                    +5
                    Тоже не совсем верно. Бывает и наоборот, когда одной инструкцией на RISC делается то, для чего на CISC потребуется 5.
                    Сравните, например, ARM:
                    addeq R0, R1, R2, lsl R3
                    

                    и x86:
                    jnz @skip
                    mov eax, ebx
                    mov ecx, esi
                    shl eax, cl
                    add eax, edx
                    @skip:
                    
                    +5
                    Процессор в Minecraft
                      +6
                      еще одна жертва видящая все и везде minecraft :))))

                      П.С. нас всех вылечат :)
                        +9
                        www.youtube.com/watch?v=yxAmphwLPDY

                        Странно, что хабр не предупреждает, что я не могу делать произвольные ссылки, а молча постит без них. Потом ждать 5 минут, чтобы вставить-таки ссылку в новом комментарии.
                        +15
                        Хехе, схемота, родимая)
                        У нас на 12ой кафедре в МИФИ была курсовая, длившаяся год, на которой мы проектировали простенький процессор.
                        Это было самое интересное за весь период обучения.
                        Кому интересно, она даже сохранилась: вот она, вот она
                          +12
                          Старайтесь избегать включения-выключения отдельных элементов путем прерывания тактового сигнала (т.н. clock gating). Схема, может прекрасно работать в эмуляторе, но когда придется учитывать задержки срабатывания логики, возникнет ситуация, что элементы тактируются несинхронно. Возможны многочисленные трудноуловимые баги.
                          Недаром все регистры, счетчики и т.д. имеют вход разрешения работы. Чтобы включить-выключить блок, используйте его.
                            +2
                            Толковое замечание. Спасибо, никогда больше так делать не буду.
                              +6
                              Ну, если честно, gated clock все-таки используется, но для других целей: например, для уменьшения энергопотребления.
                            +1
                            Сейчас у меня как раз курсовое проектирование процессора согласно регламенту архитектуры IA-32bit. Статья — самое то. Огромное спасибо.
                              +4
                              IA-32? Жестоко с вами поступили, однако.
                                +3
                                На opencores.org есть проект процессора Zet: opencores.org/project,zet86
                                Может поможет. А так, могу только посочувствовать.
                                  +4
                                  Чем же вы преподавателя обидели?
                                  Вариант, что сам преподаватель не ведает что творит даже представить боюсь.
                                    +1
                                    Возможно я что-то не так сказал — тогда извиняюсь.
                                    Поясню: 32-х разрядное АЛУ собираем на 8 МПС К1804ВС2, 32-х разрядные регистры (около 10-15) собираем на 4 К1804ИР2. Это что касается принципиальной эл.схемы. В сумме около 150 микросхем вышло.
                                    Сейчас я на стадии разработки алгоритмов, где всё организуется как раз таки на логических элементах, поэтому статьи такого рода на вес золота.
                                    Очевидно, мой проект попроще будет, т.к. берутся «черные ящики» с выводами. Хотя это только предположение.
                                      +3
                                      IA32 это определенный набор команд (100-150) с огромной кучей архитектурных особенностей, начиная просто режимами работы, заканчивая MSR'ами.
                                      Так что это задача даже не на год, а на десятилетия :)
                                        +3
                                        :D
                                        Извиняюсь, забыл сказать, что по моральным убеждения конечно же мы не весь набор команд реализуем))
                                          +1
                                          А мне почему-то кажется, что и за год можно клон i386 реализовать.
                                      +9
                                      Если бы в университете объясняли так же как и вы, я бы обожал учиться! :)
                                        +13
                                        Грустный и правдивый комментарий :(
                                          +2
                                          Всегда интересовался рассказыванием интересных историй хорошим людям. Так что не стесняйтесь, обращайтесь. Было бы интересно узнать, что интересно людям, и рассказать этим людям об этом интересном.
                                          –3
                                          А почему обозначения элементов не отечественные, а зарубежные?
                                            +10
                                            Потому что Logisim сделан не в нашей стране, и потому что в нашей стране не сделан аналог Logisim. Такие дела.
                                              +15
                                              Мировая интеграция. Нужно уметь читать обозначания потенциального противника принятые на 5/6 суши.
                                                –4
                                                А создавать свои произведения тоже в импотрной нотации, чтобы потенциальные противники оттуда могли понять?
                                                  +8
                                                  Это уже паранойя какая-то. Или отечественная жадность, не знаю даже, чего тут больше.
                                                    –2
                                                    Это был сарказм, дорогой буржуй, не будьте столь серьезны.
                                              +5
                                              habrahabr.ru/blogs/DIY/118919/ — вот это процессор своими руками :-)
                                                +4
                                                Интересная статейка.
                                                Помню с большим интересом изучал как сделали процессор на клеточном автомате типа игры жизнь. Он считает простые числа и рисует их на небольшом жк-экранчике.
                                                От автора есть подробное описание как сделать ОРы, КСОРы регистры и прочую логику, а потом из этого склепать проц )
                                                golly.sourceforge.net/gtk-primes.png
                                                  +1
                                                  Давно искал подобную статью, во времена электротехники в институте — до процов там не дошли толком.
                                                    +1
                                                    Вопрос не совсем про разработку собственного процессора, но по смежной теме — эмуляции цифровых схем.

                                                    Может быть кто-то может поделиться ссылками на литературу описывающую алгоритмы/подходы используемые для реализации компьютерных моделей цифровых цепей? (т.е. описывающую алгоритмы по которым работает Logisim).
                                                      0
                                                      Литературу подсказать не могу, к сожалению, но пару слов сказать — это можно.
                                                      Вариантов много. Можете моделировать на уровне «цифровая схема — это такой черный ящик». Эти черные ящики очень легко моделируются, а потом представляются графически (навроде блок-схем).
                                                      Можете моделировать на уровне «цифровая схема — это такая схема из транзисторов и прочей требухи». Тогда открываете справочник-учебник по МРЭС, читаете внимательно про математические модели резисторов, катушек, конденсаторов, диодов и транзисторов, а потом используя эти модели и хрестоматийные схемы логических устройств, делаете свой велосипед.
                                                      Второй вариант, как мне кажется, предпочтительнее. Он учитывает частотные и вольт-амперные характеристики элементов. То есть, например, можно будет реально наблюдать задержку в наносекунды при перекдючении элемента (а это очень важно)
                                                        +1
                                                        Событийные модели. Посмотрите, например, семантику VHDL.
                                                        +1
                                                        На счёт счётчика. На сколько я помню, флаг переполнения ставится только при обнулении (переход 11→00), а не по достижении 11. И если имеем 00 с флагом переполниния, значит таки оно произошло.
                                                        А у вас почему-то по достижении 11.
                                                          0
                                                          К сожалению, память вас подводит. В сумматорах флаг переполнения включается при обнулении, а вот в регистрах и счетчиках — при достижении наивысшего значения.
                                                            0
                                                            поправьте, если что не так. статья на васме
                                                            может мы о разных флагах говорим.
                                                              +1
                                                              Переполнение регистра процессора и переполнение регистра или счетчика как дискретного элемента — это несколько разные понятия. Если вы возьмете реальный или виртуальный (например, в Logisim) счетчик с выходом переноса, то легко убедитесь, что на выходе P реально 1, когда в регистре максимальное значение. Я тоже был удивлен, когда узнал об этой особенности счетчиков и регистров.
                                                              +2
                                                              По поводу счетчиков. Вы оба правы. Есть счетчики с отдельным выводом переноса, есть без.

                                                              74LS93 (КР1533ИЕ5) — двоичный счетчик. Отдельного выхода переноса не имеет, что не мешает его каскадировать.
                                                              74AC193 (КР1554ИЕ7) — реверсивный двоичный счетчик. Имеет два выхода тактовых сигналов прямого и обратного переноса. Устанавливается когда на всех выходах устанавливается высокий уровень.

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