Проектирование процессора Logisim

  • Tutorial
Часть I
Часть II
Часть III
Часть IV
Часть V

Одна из глав книги «Код» Чарльза Петцольда посвящена проектированию CPU и в начале главы описывается устройство, позволяющие суммировать наборы чисел, хранящихся в памяти. Спроектируем эту схему в Logisim. Возьмем набор восьмиразрядных чисел и подключим его к мультиплексору, переход от одного числа к другому будем осуществлять с помощью счетчика, подключенного к выбирающему входу мультиплексора, а к выходу мультиплексора подключим сумматор и аккумулятор. В качестве тактового генератора будем использовать кнопку. Данные будут загружаться в аккумулятор при отпускании кнопки (это осуществляется с помощью элемента НЕ, подключенного к кнопке).



Будем хранить числа в ОЗУ (RAM).

ОЗУ можно представить в виде набора регистров, доступ к которым производится с помощью демультиплексора и мультиплексора (DMX и MUX).


Гарвардская архитектура


Предположим, в ОЗУ хранится набор чисел, а нам нужно сложить все числа и сохранить результат (в свободную ячейку). Будем хранить команды («сложить» и «сохранить») в одном ОЗУ, а обрабатываемые числа — в другом. Такой способ хранения является отличительным признаком Гарвардской архитектуры.
Команда «1» будет записывать число из сумматора в аккумулятор, команда «2» будет записывать число из аккумулятора во 2-ое ОЗУ.

Предположим, в ОЗУ хранятся несколько массивов чисел. Т.е. нам необходимо
  • загружать числа из ОЗУ в аккумулятор
  • загружать числа из сумматора в аккумулятор
  • сохранять числа из аккумулятора в ОЗУ

Будем использовать для выборки данных из ОЗУ мультиплексор MUX.
Новая инструкция «5» по переднему фронту тактового генератора переключает мультиплексор MUX, а по заднему фронту (по спаду) производит запись в аккумулятор.


Архитектура фон Неймана


Далее, будем хранить инструкции и данные в одном ОЗУ. Такой способ хранения является отличительным признаком архитектуры фон Неймана.
В первых четырех разрядах восьмиразрядной ячейки памяти будет храниться команда, во вторых четырех разрядах будет храниться адрес (прямая адресация).

Будем загружать адрес и команду в отдельные регистры, а затем с помощью мультиплексора переходить по сохраненному адресу. Для записи данных в ОЗУ будем сначала загружать данные во временный регистр Temp (иначе в ОЗУ запишутся инструкции, а не данные), а потом в аккумулятор Асс. Запись данных в Temp и Асс будем производить по заднему фронту.

Будем складывать, например, числа 2 и 3, которые лежат в ячейках 8 и 9, а сохранять результат в ячейку с адресом a.


Добавим также возможность совершать безусловные переходы.
Реализуем устройство, в котором будет выполняться всего одна команда — команда безусловного перехода. Для этого на счетчик, генерирующий адрес, будем отправлять четыре младших разряда (собственно, адрес), а на порт загрузки будем подавать команду, хранящуюся в старших разрядах ячейки памяти.
Например, для прыжка в ячейку с адресом 2 используется команда 82.


Добавим команду безусловного перехода в предыдущую схему.


Вообще, на geektimes уже была статья, посвященная проектированию CPU в Logisim.

Все схемы, представленные выше, можно скачать одним файлом.
Logisim можно скачать здесь.

Терминал


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

Добавим конечный автомат для обработки последовательностей поступающих символов.
Семизначный код буквы «i» равняется 1101001
Семизначный код буквы «n» равняется 1101110
Семизначный код буквы «p» равняется 1110000

Для выделения конкретной буквы из потока символов будем использовать компаратор. В начальном состоянии компаратор сравнивает поступивший символ с семизначным кодом буквы «i»

Автомат переходит в следующее состояние, если после буквы «i» поступает буква «n»

Автомат переходит в следующее состояние, если после букы «i», а затем «n» поступает буква «p»

Добавим команду out


Подробнее о командах inp и out можно прочитать в следующей части.

Железо


Рассмотрим, как работает сумматор на примере микросхемы 155им3 (7483). Для микросхем 155-й серии условимся, что на входах есть внутренний резистор, подтягивающий к плюсу (если ножка «висит в воздухе», то на ней присутствует логическая «единица»), поэтому при подключении питания к микросхеме зажгутся все светодиоды, присоединенные к выходу.

На картинке представлена МС 74ls283 (современный аналог 155им3).

Для того, чтобы в Logisim спроектировать такую микросхему, необходимо выбрать «Меню» — «Проект» — «Добавить схему».

Вот как эта МС выглядит внутри подсхемы. Это четыре полусумматора, объединённые в полный сумматор.

image


В качестве аккумулятора будем использовать микросхему 155тм8 (74175) — счетверённый D-триггер.

Триггеры, входящие в состав МС, пропускают насквозь всё время, пока на входе синхронизации присутствует 1, а не только по фронту (триггеры со статическим управлением), но в программе Logisim нам доступны только триггеры с динамическим управлением, но в данном случае это не важно; будем использовать то, что есть.

Подробнее про триггеры можно прочитать в Википедии.

Соберём из D-триггеров модель МС 155тм8.

image

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

Например, если сложить набор из чисел 2 (0010), мы получим 2 (0010), 4 (0100), 6 (0110) и т.д.

image


image

Сперва 2 появляется на выходе сумматора (красные светодиоды), затем 2 загружается в счетверенный D-тригер (желтые светодиоды), а на выходе сумматора появляется 4, затем 4 загружается в 155тм8, а на выходе сумматора появляется 6 и т.д.

Для того, чтобы спроектировать простой модуль памяти, нам понадобится мультиплексор. Спроектируем сдвоенный мультиплексор 155кп2.
image

Также нам понадобится счетчик. Спроектируем микросхему 155ие5.

Это четырехразрядный счетчик, но нам понадобится только два младших разряда.
Будем хранить числа, например, 2 (0010), 3 (0011), 5 (0101).
image




Объединим все компоненты в одну схему. Будем складывать числа, которые хранятся в «памяти»
2 + 3 + 5.


Logisim можно скачать здесь.

P.S. Статья про книгу «Код. Тайный язык информатики.» есть на Хабре вот здесь.
З.Ы. Переводные статьи (автор переводов PatientZero) про архитектуру процессора здесь, здесь и здесь

Средняя зарплата в IT

110 000 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 8 851 анкеты, за 2-ое пол. 2020 года Узнать свою зарплату
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 7

    +4
    Эх, универ… То ли второй, то ли третий курс… Семестровая — спроектировать 8-и битный процессор по выданному набору команд…
      +2
      Вам определенно нужно переходить к FPGA
      0
      «Код» Петцольда отличная книга для погружения в основы основ! У меня с нее начался приход в embedded еще тогда, когда я даже не подозревал об этом) Читал в школе сначала из праздного интереса (системы счисления на примере конечностей кита и т.д.), потом дошел до сумматора и забросил, потом вернулся в универе уже более осознано и как-то все пошло по жизни)
        +1
        Спасибо за книгу. Приобрел для общего развития.
          0
          они еще продаются?

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое