LXF162:CPU своими руками
Olkol (обсуждение | вклад) (→Мультиплексоры) |
Olkol (обсуждение | вклад) |
||
Строка 29: | Строка 29: | ||
===Больше логики=== | ===Больше логики=== | ||
− | + | [[Файл: LXF162.feat_cpu.figur_opt1.jpeg|left |400px |thumb|Рис. 2. АЛУ, использующее мультиплексоры для обеспечения выбора между операциями.]] | |
Чтобы это продемонстрировать, мы скомбинируем наш полный сумматор с прошлого раза с другими логическими схемами (AND, OR и XOR), и используем мультиплексор для указания операций, которые требуется выполнить. | Чтобы это продемонстрировать, мы скомбинируем наш полный сумматор с прошлого раза с другими логическими схемами (AND, OR и XOR), и используем мультиплексор для указания операций, которые требуется выполнить. | ||
Строка 62: | Строка 62: | ||
Если число является беззнаковой переменной, эти операции имеют эффект умножения (сдвиг влево) или деления (сдвиг вправо) числа на два. Это должно быть очевидно, поскольку каждая позиция имеет вес в два раза больший, чем позиция справа от нее. | Если число является беззнаковой переменной, эти операции имеют эффект умножения (сдвиг влево) или деления (сдвиг вправо) числа на два. Это должно быть очевидно, поскольку каждая позиция имеет вес в два раза больший, чем позиция справа от нее. | ||
===Срабатывание по перепаду сигнала=== | ===Срабатывание по перепаду сигнала=== | ||
− | + | ||
В созданном нами триггере задержки вход действует, только когда переключатель enable установлен на 1. Это прекрасно, но в компьютерах и в цифровой электронике в целом удобны схемы, которые активируется за более короткое время, то есть пока вход enable переходит из одного состояния в другое. Это позволяет создавать намного более чувствительные схемы, с более тонким контролем над ними. Когда схемы, подобные триггеру задержки, запускаются во время переброса входа enable из 0 в 1, это называется уже не триггером, а мультивибратором. Мы говорим о «срабатывании по перепаду сигнала [edge triggering]». | В созданном нами триггере задержки вход действует, только когда переключатель enable установлен на 1. Это прекрасно, но в компьютерах и в цифровой электронике в целом удобны схемы, которые активируется за более короткое время, то есть пока вход enable переходит из одного состояния в другое. Это позволяет создавать намного более чувствительные схемы, с более тонким контролем над ними. Когда схемы, подобные триггеру задержки, запускаются во время переброса входа enable из 0 в 1, это называется уже не триггером, а мультивибратором. Мы говорим о «срабатывании по перепаду сигнала [edge triggering]». | ||
Версия 05:41, 13 октября 2018
|
|
|
Содержание |
CPU своими руками
Часть вторая
Еще два компонента электронного сердца вашего CPU: Джонатан Робертс подводит вас на шаг ближе к рабочему процессору.
В LXF158 мы показали вам, как построить собственный компьютер из базовых электронных блоков. По сути, мы изготовили двоичный сумматор. Мы закончили статью, сказав, что созданное нами — это еще далеко не настоящий компьютер, и вам нужны еще несколько компонентов, прежде чем ваша машина сможет претендовать на звание компьютера.
В этой статье мы рассмотрим дальнейшие шаги и представим вам еще несколько компонентов, продемонстрировав, как расширить возможности вашего сумматора до выполнения других действий (AND [И], XOR [ИСКЛ.ИЛИ] и NOT [ИЛИ]) и создать цепи памяти для хранения ввода и вывода.
Перед чтением этой статьи вам стоит прочесть предыдущую часть, чтобы освежить память, поскольку мы исходим из того, что вы с ней ознакомлены. Если у вас нет экземпляра LXF158, вы сможете найти PDF этой статьи на диске этого месяца.
Декодер
Первый компонент, который мы рассмотрим – это декодер, или, точнее, линейный декодер. Он очень прост, но очень удобен в работе и сам по себе, и декодеры также используются в мультиплексорах – что исключительно важно для остальной части нашей статьи.
По сути, все декодеры позволяют сделать выбор из множества выходов, используя только половину входов. Более конкретно – при единственном входе декодер позволит вам выбирать между двумя выходами, два входа обеспечат вам выбор из четырех выходов, и т. д. В случае декодеров мы говорим не о входе и выходе, а об адресной линии и линии передачи данных. Таблица истинности для простого линейного декодера 1-в-2 размещена ниже, а схема соединений приведена на рис. 1.
Как видите, все очень просто. Адресная линия раздвоена, и вход NOT размещен на одном ответвлении этого раздвоения. Таким образом, только одна из этих линий передачи данных может за один раз передать 1.
Мультиплексоры
Мультиплексор подобен декодеру, но способен на большее. Вместо выбора между двумя линиями передачи данных, он использует адресную линию для выбора между двумя входами, и выбранная величина (0 или 1) будет перенаправлена на единственную линию передачи данных.
Его таблица истинности приведена ниже, а его схему соединений вы также можете увидеть на рис. 1. На этой схеме вы видите, что мультиплексор – это просто расширенный декодер.
Больше логики
Чтобы это продемонстрировать, мы скомбинируем наш полный сумматор с прошлого раза с другими логическими схемами (AND, OR и XOR), и используем мультиплексор для указания операций, которые требуется выполнить.
Первое, что нужно сделать – создать логическую схему. Это просто, поскольку, чтобы выполнить AND для двух двоичных чисел, все, что вам нужно сделать – это соединить каждый из первых битов с входом AND, вторые биты – с другим, третьи – с другим, и так далее. То же верно и для операций OR и XOR. Пока что можете оставить выходы несоединенными.
Присмотревшись внимательнее, вы сможете увидеть все это на рис. 2. Однако помните, что KTechlab не очень хорошо работает со сложными схемами, подобными этой, и будьте внимательны, рисуя соединения – проще всего будет перевести это в режим Manual, выбрав нужную опцию под значком с красной ручкой.
Сделав это, создайте четыре мультиплексора, настроив длину адреса каждого на два. Это можно сделать, щелкнув по мультиплексору, затем заглянув в появившуюся панель справа (Item Editor). Получится мультиплексор с четырьмя входами, между которыми вы сможете выбирать, создавая разные комбинации двух адресных линий.
Далее, соедините первый вход AND, вход OR, вход XOR и сумматор с первым мультиплексором, второй вход – со вторым мультиплексором, и так далее. Затем соедините логические выводы с соединением мультиплексора, отмеченным x, и, наконец, присоедините еще два логических ввода: один – ко всем A0, и другой – ко всем A1 на мультиплексорах.
Все это показано на рис. 2, хотя вы можете также загрузить схему с диска – ALU.circuit – и рассмотреть ее хорошенько. Важная подсказка: все должно быть выровнено, потому что начнется большая путаница, если биты одного и другого входов пойдут в разном порядке, а порядок выходных битов тоже окажется другим!
Рассмотрев схему поближе, вы увидите рядом с адресными входами список значений, на которые они должны быть настроены для выбора разных операций. В настоящем компьютере это именуется opcodes (сокращение от «коды операций»). Их нужно передать процессору, чтобы заставить его выполнить определенное действие. Рядом с кодами находятся трехбуквенные описания функций – это мнемоника, для простоты запоминания и человеко-читаемого описания того, что делают разные коды. Если вы когда-нибудь писали на языке ассемблера, то это как раз и есть мнемонические значения, которые компиляторы ассемблера затем превращают в двоичные эквиваленты.
Вот таким образом и создается схема, которую можно проинструктировать на выполнение всяких операций. Однако на данный момент ввод в эту схему осуществляется непосредственно нами – мы вручную настраиваем логический вход, а выход являет собой логические выводы, которые включаются и выключаются.
А если мы хотим, чтобы выход не просто исчезал, но превращался во вход следующего устройства? Или если мы хотим запрограммировать входы заранее?
Обратная связь
Чтобы это сделать, нам нужна память, и именно это станет предметом остальной части нашей статьи. Но прежде чем перейти к схемам памяти, начнем с рассмотрения понятия обратной связи, которая лежит в основе схем памяти.
Возьмем обычный вентиль OR. Напомним его таблицу истинности:
Другие полезные операции
Мы использовали AND, OR и XOR как примеры операций для расширения нашего сумматора, потому что эти схемы просты в создании. Но если вы работаете с числами без знака, то логический сдвиг влево или вправо может оказаться более естественным выбором для расширения нашего сумматора.
Как и предполагает название, логический сдвиг влево сдвигает все биты на одну позицию влево, а логический сдвиг вправо – на одну позицию вправо. Бит, который выпадает, потерян навсегда, а свободное место, появившееся в начале, занимает 0.
Если число является беззнаковой переменной, эти операции имеют эффект умножения (сдвиг влево) или деления (сдвиг вправо) числа на два. Это должно быть очевидно, поскольку каждая позиция имеет вес в два раза больший, чем позиция справа от нее.
Срабатывание по перепаду сигнала
В созданном нами триггере задержки вход действует, только когда переключатель enable установлен на 1. Это прекрасно, но в компьютерах и в цифровой электронике в целом удобны схемы, которые активируется за более короткое время, то есть пока вход enable переходит из одного состояния в другое. Это позволяет создавать намного более чувствительные схемы, с более тонким контролем над ними. Когда схемы, подобные триггеру задержки, запускаются во время переброса входа enable из 0 в 1, это называется уже не триггером, а мультивибратором. Мы говорим о «срабатывании по перепаду сигнала [edge triggering]».
Быть может, это звучит чуть ли не мистически, но если вы представите себе график прямоугольной волны, все станет ясно. Когда линия высоко, то вход или выход равны 1; когда она низко, это 0. В случае с триггером задержки выходы повторяют входы все время, пока enable высоко. В случае с мультивибратором, он будет реагировать только на одно ребро прямоугольного графика, образованного тогда, когда вход enable переходит в соcтояние 1.
Это не просто интересно, поскольку при работе со встроенным D Flip-Flop от KTechlab вам нужно обеспечить включение и выключение тактового сигнала, чтобы он действовал. Он срабатывает при переходе от высокого уровня к низкому, так что вам нужно установить переключатель на 1 и снова на 0, чтобы активировать мультивибратор и заставить его сохранить новую величину.