Как стать автором
Обновить

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

Время на прочтение 4 мин
Количество просмотров 64K
Часть 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) про архитектуру процессора здесь, здесь и здесь
Теги:
Хабы:
+20
Комментарии 7
Комментарии Комментарии 7

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн