Вступительная часть. «Наполеоновские планы»
Почти год назад у меня возникла мысль понять, как устроен компьютер, как он работает. Ну и конечно же, появилось огромное желание создать свой собственный на элементарных логических элементах (если быть точнее — на транзисторах).
Тогда у меня было только маленькое представление о его работе: я знал, что вся цифровая электроника построена на логических элементах (для меня это было, как постулат), но никак не мог сообразить, как исполняется программа, суммируются числа, зачем прерывания… Этот перечень вопросов можно продолжать и дальше, но сейчас не об этом.
Определим характеристику разрабатываемого компьютера:
- Вид логики: двоичная логика
- Разрадность шины данных: 32 бита
- Разрядность шины адреса: 24 бита (можно адресовать 16 777 216 32-разрядних чисел)
- Исполнение основных арифметических, логических, побитовых операций над данными, а также операций над ячейками памяти (mov, xchg)
- Реализация функции выделения памяти (предусмотрено 4 ассемлерных инструкции)
- Обработка данных напрямую и с помощью указателей
Программное обеспечение
Для целей проектирования логических схем существует множество программ. Но для масштабного проектирования и отладки мои требования удовлетворили только две программы (наверное мои требования слишком суровы):
Собственно требования:
- Интуитивный интерфейс
- Создание схем больших размеров
- Возможность создания модульных схем (схема в схеме)
- Разнообразие базовых логических элементов с возможностю редактирования их параметров
- Наличие элемента «ОЗУ» и\или «ПЗУ»
- Возможность загрузки бинарного файла в ОЗУ\ПЗУ и сохранения дампа ОЗУ в бинарный файл
- Наличие обширной элементной базы для ввода\вывода информации и отладки схем (кнопки, константы, пробники, генератор тактовых импульсов...)
В этой и всех последующих постах при публикации логических схем я буду использовать Logisim ввиду того, что я недавно перешел на Ubuntu, хотя весь проект сделан на Logic Circuit.
План действий
Так как практика без теории не существует, то для создания чего-либо нужна теоретическая база. Поэтому сегодня
- Ключевой элемент всей цифровой электроники — транзистор;
- Логические элементы, их виды;
- Технологии построения электронных схем или строим логические элементы на транзисторах;
- Законы де Моргана или как можно уменьшить количество вентилей;
Ключевой элемент всей цифровой электроники — транзистор
Базовым элементом для интегральной схемы служит транзистор.
За определением Википедии,
транзистор — радиоэлектронный компонент из полупроводникового материала, позволяющий входным сигналом управлять током в электрической цепи.Из транзисторов состоят логические элементы. Из логических элементов создают триггеры, сумматоры, логические блоки, счетчики. Комбинируя все это правильным образом можно создать свой собственный компьютер (или ЕОМ).
Логические элементы, их виды
Логические элементы — устройства, предназначенные для обработки информации в цифровой форме.
Логическую функцию любой сложности можно задать с помощью таких логических элементов:
- Элемент НЕ (инвертор). На выходе будет «1» тогда и только тогда, когда на входе будет «0»;
- Элемент И (конъюнкция). На выходе будет «1» тогда и только тогда, когда на всех входах будет «1»;
- Элемент ИЛИ (дизъюнкция). На выходе будет «1», когда хотя бы на одном входе будет «1»;
- Элемент сложения по модулю 2 (исключающее ИЛИ). На выходе будет «1» тогда и только тогда, когда на входе будет нечётное количество «1»;
- Повторитель;
- Управляющий повторитель. Используется для соединения нескольких выходов в один выход
Логические элементы в Logisim:
Технологии построения электронных схем или строим логические элементы на транзисторах
Первоначальной затеей было построить компьютер не на микросхемах 7400 серии, а на транзисторах. И начал я поиск технологий построения электронных схем. Существуют следующие:
- Резисторно-транзисторная логика (РТЛ);
- Диодно-транзисторная логика (ДТЛ);
- Эмиттерно-связанная логика (ЭСЛ);
- Интегрально-инжекционная логика (ИИЛ, И2Л, И3Л, I2L);
- КМОП (К-МОП; комплементарный металлооксидный полупроводник).
Далее я прочитал для каждой преимущества\недостатки, и среди них выбрал резисторно-транзисторную логику. Выбор был очевиден ввиду того, что эта логика имеет конструктивную простоту и маленькую стоимость. А также к этой логике есть огромный выбор биполярных SMD транзисторов и SMD резисторов. Транзисторы я взял BC847C n-p-n и BC857C p-n-p.
Закрыв глаза на все недостатки, я на целый месяц погрузился в ресчеты логических элементов на транзисторах. Сделал несколько тестовых схем на макетке, применяя транзисторы BC547C. Результатами теоретической и практической частями был доволен.
Макетка:
Остался последный этап — проектирование схемы синхронного T-триггера на 847 транзисторах, проверка его работоспособности и анализ частотных характеристик. Тест работоспособности довольно простой — на вход «T» подается логическая «1», а на вход «C» — тактовые импульсы с генератора. На выходе я должен получить тактовые импульсы, частота которых вдвое меньше входной. Если все заработает на приемливой частоте — значит заработает и весь компьютер.
Спроектировал схему, которая состоит из 4-х T-триггеров. Сделал печатную плату фоторезистивным методом, нехитро запаял и в итоге получил вот такую красоту (ширина дорожек — 0,15мм):
Подключил к схеме источник питания на 5 вольт, подключил генератор на вход и осциллограф на выход. Начал тестирование на частоте 1 МГц, но схема не заработала. Потом понизил до 20 кГц — вуаля, схема заработала правильным образом. Манипулируя напряжением питания смог повысить рабочуюю частоту до 40 кГц…
Увы, но схема моих ожиданий не оправдала. К тому же только один Т-триггер заработал правильно на частоте до 40 кГц, а все остальные не могли переходить из высокого состояния в низкий, хотя внутринние RS-триггеры работали правильно.
Я провел еще некоторые эксперименты по построению логических элементов, только уже на полевых транзисторах. Результаты получились удовлетворительными, но появились некоторые проблемы:
- Высокая стоимость проекта (около 1000$ только на транзисторы);
- Проблема достать полевые SMD транзисторы в Украине;
- Проблема запаять 15 — 20 тысяч транзисторов на КМОП логике, вместо 7 — 10 тысяч на РТЛ.
Для себя я сделал хороший вывод: лучше покупать микросхемы 7400 серии с логическими элементами, чем делать логические элементы на транзисторах. А
Законы де Моргана или как можно уменьшить количество вентилей
Законы де Моргана — это правила, которые связывают логические операторы (дизъюнкцию и конъюнкцию) с помощью логического отрицания. В формальной логике их можно записать так:
Рассмотрим пример использования этих правил в действии. Пусть мы имеем такую схему:
Используя законы де Моргана схему можно переделать на такую:
Как можно заметить по таблицам истинности, логика этих схем идентичная.
Теперь маленький постулат: для логических элементов (кроме логического НЕ) на КМОП логике с инверсным выходом (например, логическое 2И-НЕ) нужно на два транзистора менше, чем для логических элементов с не инверсным выходом (например, логическое 2И).
Тогда, для первой схемы нужно будет 18 транзисторов, а для второй — 12 транзисторов. Причем, вторая схема будет работать быстрее из-за того, что используется меншее количество вентилей и сигнал будет проходить на порядок быстрее.
Планы на будущее
В следующем посте я расскажу о триггерах и мы начнем проектировать АЛУ.