Проектирование процессора (CPU Design) Часть II

Часть I
Часть II
Во второй части спроектируем устройства, представленные в первой части, на микросхемах малой степени интеграции, а также в Verilog’е.
Спроектируем схему, позволяющую складывать четырехразрядные числа.
Нам понадобятся сумматор и аккумулятор.
Рассмотрим, как работает сумматор на примере микросхемы 155им3 (зарубежный аналог 7483).
Для микросхем 155-й серии условимся, что на входах есть внутренний резистор, подтягивающий к плюсу (если ножка «висит в воздухе», то на ней присутствует логическая «единица»), поэтому при подключении питания на микросхему зажгутся все 5 светодиодов, присоединенных к выходу.
image
Так выглядит модель микросхемы в Logisim.
image
Для того, чтобы в 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.
59ef47e95e1c0281931220.jpeg
Это четырехразрядный счетчик, но нам понадобится только два младших разряда.

Будем хранить числа, например, 2 (0010), 3 (0011), 5 (0101).
image
«Физическая» модель.
59d0f20f48b6c160467779.jpeg
Объединим все компоненты в одну схему. Будем складывать числа, которые хранятся в памяти
2 + 3 + 5.
59d093616dc64185109762.gif
«Физическая» модель.
image

Далее создадим устройство, позволяющее осуществлять операцию «вычитание».
Для того, чтобы вычесть число, его надо сначала перевести в обратный код (заменить все 0 на 1; все 1 на 0), а затем в дополнительный код (прибавить 1).

Для хранения чисел будем использовать 155ру2 (ОЗУ), для перевода в обратный код будем использовать 155лн2 (шесть Элементов Не). Эти микросхемы имеют выходы с открытым коллектором. Светодиод к выходу с ОК надо подключать так (на примере 155лн2/7405)
image

Для МС 155ру2 будем считать, что вход синхронизации и вход разрешения записи объединены в одну линию. Этот (объединённый) вход является статическим, МС пропускает насквозь всё время, пока на входе присутствует 0 (низкий уровень).
Данные поступают в МС при появлении низкого уровня на этом (объединенном) входе, поэтому повесим Элемент Не к тактовому входу.
Выходы будут инвертированы, если подключать по схеме, которую я привел выше для выхода с ОК (повесим Элементы Не к выходам), вход выбора кристалла тоже инвертирован, МС осуществляет цикл записи или чтения только при нулевом уровне на этом входе (повесим Элемент Не ко входу выбора кристалла).
Также МС имеет отдельные входы для адреса и для данных, поэтому при выборе стандартного модуля ОЗУ (Боковое меню — Память — ОЗУ) на вкладке «Интерфейс данных» необходимо выбрать «Раздельные порты чтения и записи».

Т.о. наиболее близкой к 155ру2 будет такая модель
image
Для выбора числа в прямом или обратном коде будем использовать мультиплексор. Будем хранить числа 8, 4 (в обратном коде), 1.
image
«Физическая» модель.
image

Объединим нашу схему с предыдущей и будем из 8 вычтать 4, т.е. 8 + 4 (в обратном коде) + 1.
image
Т.о. мы создали простейшее программируемое устройство, в котором командами осуществляется выбор числа в прямом или обратном коде.

Спроектируем наши схемы на ПЛИС/FPGA.
Будем использовать Quartus II. Бесплатную версию с ограниченным функционалом можно скачать с официального сайта.
При регистрации в разделе My Primary Job Function is* необходимо выбрать пункт Student.
Далее необходимо скачать драйвер для программатора (драйвер для usb-blaster’a можно установить из C:\altera\…\quartus\drivers\usb-blaster).
В среде Quartus создадим новый проект («File»-«New»-«New Quartus II Project») и добавим к проекту Block Diagram/Schematic File («File»-«New»-«Block Diagram/Schematic File»).
Нам понадобятся сумматор (7483) и аккумулятор (74175).
Эти микросхемы можно добавить из Symbol Tool image

59eee695c1910304648246.jpeg

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

Если использовать внешний источник тактового сигнала, тактовую ногу источника надо стянуть к «земле».

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

© Geektimes