Логические основы эвм
ЗАДАНИЕ N 27 Тема: Логические основы ЭВМ Если на входы логической схемы подана следующая комбинация входных параметров: то комбинацией значений на выходе будет …
Решение: Правильным решением будет
ЗАДАНИЕ N 28 Тема: Логические основы ЭВМ Логической схеме равносильна схема …
Решение: Логической схеме равносильна схема Если сравнить данную схему с исходной, то видно, что логический элемент ИЛИ, включенный на выходе исходной схемы, заменен на логический элементИ-НЕ с инверсией его входных сигналов в соответствии с законами де Моргана и двойного отрицания Итак, произведена равносильная замена (равносильное преобразование). Это можно проверить с помощью таблиц истинности или логических формул.
ЗАДАНИЕ N 29 Тема: Логические основы ЭВМ Логической функции F соответствует логическая схема и следующая таблица истинности …
Решение: Правильным решением является таблица истинности следующего вида:
ЗАДАНИЕ N 30 Тема: Логические основы ЭВМ Приведенной на рисунке логической схеме соответствует логическая функция …
Решение: Правильным решением будет Формула строится последовательно от входов к выходу в соответствии с функциями логических вентилей.
ЗАДАНИЕ N 31 Тема: Логические основы ЭВМ Логической функции соответствует логическая схема …
Решение: Логической функции соответствует логическая схема:
ЗАДАНИЕ N 32 Тема: Логические основы ЭВМ Значение на выходе логической схемы невозможно при следующей комбинации входных параметров:
ЗАДАНИЕ N 33 Тема: Логические основы ЭВМ Таблице истинности вида соответствует логическая схема …
ЗАДАНИЕ N 34 Тема: Логические основы ЭВМ 28 триггеров могут хранить ___ байт информации.
3,5 | |
| 28 |
| 7 |
| 2,5 |
Решение: Триггер может хранить 1 бит информации. Поскольку то 28 бит (триггеров) : 8 = 3,5 байт. Следовательно, 28 триггеров могут хранить 3,5 байт информации.
ЗАДАНИЕ N 35 Тема: Кодирование данных в ЭВМ Аналоговый звуковой сигнал был дискретизирован сначала с использованием 65536 уровней интенсивности сигнала (качество звучания аудио-CD), а затем с использованием 256 уровней интенсивности сигнала (качество звучания радиотрансляции). Информационные объемы кодов будут различаться в ____ раз(-а).
2 | |
| 8 |
| 16 |
| 256 |
Решение: По формуле Хартли–Шеннона информационный объем кода в первом случае . Информационный объем кода во втором случае . Информационные объемы кодов будут различаться в раза.
ЗАДАНИЕ N 36 Тема: Кодирование данных в ЭВМ Стандартным кодом для обмена информацией является код …
ASCII | |
| ACCESS |
| ANSI |
| BIOS |
Решение: ASCII (American Standard Code for Information Interchange) – американский стандартный код для обмена информацией.
ЗАДАНИЕ N 37 Тема: Кодирование данных в ЭВМ Для хранения неупакованного растрового изображения размером пикселя потребовалось 512 байт памяти. Максимально возможное число цветов в палитре изображения равно …
| 256 |
| 2 |
| 4 |
Решение: Объем памяти V, необходимый для хранения неупакованного растрового изображения размером H x W пикселей, в котором для хранения одного пикселя требуется С бит, определяется по формуле Найдем С: Число цветов N определяется по формуле Тогда
ЗАДАНИЕ N 38 Тема: Кодирование данных в ЭВМ Для 5 букв латинского алфавита заданы их двоичные коды (для некоторых букв – из двух бит, для некоторых – из трех).
bacde | |
| baade |
| badde |
| bacdb |
ЗАДАНИЕ N 39 Тема: Кодирование данных в ЭВМ Сообщение из 50 символов было записано в 8-битной кодировке Windows-1251. После вставки в текстовый редактор сообщение было перекодировано в 16-битный код Unicode. Количество памяти, занимаемое сообщением, увеличилось на …
50 байт | |
| 100 бит |
| 400 байт |
| 50 бит |
Решение: В кодировке Windows-1251 сообщение занимало в памяти После перекодировки: Таким образом, количество памяти, занимаемое сообщением, увеличилось на
ЗАДАНИЕ N 40 Тема: Кодирование данных в ЭВМ Для кодирования цвета используются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели.
белый | |
| черный |
| светло-серый |
| темно-серый |
ЗАДАНИЕ N 41 Тема: Кодирование данных в ЭВМ Используется кодовая таблица СР-1251 (Windows Cyrillic). Файл в простом текстовом формате, если в тексте 200 страниц, на странице 32 строки, а в строке в среднем 48 символов, будет занимать __________ килобайт(-а).
300 | |
| 307,2 |
| 384 |
| 2400 |
ЗАДАНИЕ N 42 Тема: Кодирование данных в ЭВМ В настоящее время существует несколько основных кодировок кириллицы (русский алфавит). К их числу не относится кодировка …
RADIX-50 | |
| KOI-8R |
| CP-1251 |
| ISO 8859-5 |
ЗАДАНИЕ N 43 Тема: Кодирование данных в ЭВМ В кодовой таблице __________ можно закодировать 65536 различных символов.
Unicode | |
| КОИ-8Р |
| ASCII |
| CP-1251 |
НОУ ИНТУИТ | Лекция | Логические основы ЭВМ
Аннотация: Рассматриваются основные логические элементы и принципы их соединения в логические схемы.
Ключевые слова: логический, выражение, истина, ложь, алгебра, представление, переменная, значение, функция, инверсия, дизъюнкция, конъюнкция, таблица, очередь
Логические переменные и логические функции — это такие переменные и функции, которые могут принимать только два значения — либо логический 0, либо логическая 1.
Основные логические функции и элементы
Логический элемент — графическое представление элементарной логической функции.
Логическое умножение (конъюнкция) — функция И
Рассмотрим ключевую схему представленную на рис. 1.1,а. Примем за логический 0 [2]:
- на входе схемы разомкнутое состояние соответствующего ключа, например, ;
- на выходе схемы ( ) — такое ее состояние, когда через сопротивление R ток не протекает.
Таблица истинности — это таблица, содержащая все возможные комбинации входных логических переменных и соответствующие им значения логической функции.
Рис. 1.1. Трёх-входовой логический элемент И
Таблица истинности для логической схемы, представленной на рис. 1.1,б, состоит из 8 строк, поскольку данная схема имеет три входа — , и . Каждая из этих логических переменных может находиться либо в состоянии логического 0, либо логической 1. Соответственно количество сочетаний этих переменных равно . Очевидно, что через сопротивление R ток протекает только тогда, когда замкнуты все три ключа — и , и , и . Отсюда еще одно название логического умножения — логический элемент И. В логических схемах этот элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 1.1,в.
Правило логического умножения :если на вход логического элемента И подается хотя бы один логический 0, то на его выходе будет логический 0.
Уровень логического 0 является решающим для логического умножения .
В логических выражениях применяется несколько вариантов обозначения логического умножения. Так, для приведенного на рис. 1.1,в трёх-входового элемента И, логическое выражение можно представить в виде:
- либо , но при этом из контекста должно быть ясно, что данное умножение именно логическое;
- либо ;
- либо — с использованием знака конъюнкции;
- либо , но при этом из контекста должно быть ясно, что между переменными , и производится логическое умножение.
Логическое сложение (дизъюнкция) — функция ИЛИ
Рассмотрим ключевую схему, представленную на рис. 1.2,а. Таблица истинности для данной логической схемы (рис. 1.2,б) состоит из 4 строк, поскольку данная схема имеет два входа — и . Количество сочетаний этих переменных равно . Очевидно, что через сопротивление R ток протекает тогда, когда замкнуты или , или . Отсюда еще одно название логического сложения — логическое ИЛИ. В логических схемах соответствующий логический элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 1.2,в.
Рис. 1.2. Логический элемент ИЛИ на два входа
Правило логического сложения: если на вход логического элемента ИЛИ подается хотя бы одна логическая , то на его выходе будет логическая 1.
Для логического сложения решающим является уровень логической 1.
В логических выражениях применяется два варианта обозначения логического сложения. Так, для приведенного двух-входового элемента ИЛИ, логическое выражение можно представить в виде:
- либо , но при этом из контекста должно быть ясно, что данное сложение именно логическое;
- либо — с использованием знака дизъюнкции.
Логическое отрицание (инверсия) — функция НЕ
Рассмотрим ключевую схему, представленную на рис. 1.3,а. Таблица истинности для данной схемы (рис. 1.3,б) самая простая и состоит всего из 2 строк, поскольку она (единственная из всех логических элементов) имеет только один вход — . Количество вариантов для единственной логической переменной равно . Очевидно, что через сопротивление R ток протекает ( ) тогда, когда не замкнут, т.е. . Еще одно название этой логической функции — отрицание, а соответствующий логический элемент называется инвертором. В логических схемах этот элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 1.3,в. Поскольку он имеет только один вход, в его обозначении допустимым является и знак логического сложения, и знак логического умножения.
Рис. 1.3. Логический элемент НЕ
Правило инверсии: проходя через инвертор, сигнал меняет свое значение на противоположное.
В логических выражениях применяется единственный вариант обозначения инверсии:
К основным логическим элементам относятся еще два элемента, которые являются комбинацией элементов И, ИЛИ и НЕ: элемент И-НЕ и ИЛИ-НЕ.
Логическая функция и элемент И-НЕ
Данная функция производит логическое умножение значений входных сигналов, а затем инвертирует результат этого умножения. В логических схемах этот элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 1.4,а. Таблица истинности приведена на рис. 1.4,б.
Рис. 1.4. Логический элемент И-НЕ на три входа
Если на вход логического элемента И-НЕ подается хотя бы один логический 0, то на его выходе будет логическая 1.
В логических выражениях применяются обозначения:
- либо , но при этом из контекста должно быть ясно, что данное умножение именно логическое; intuit.ru/2010/edi»>либо ;
- либо ;
- либо .
Логическая функция и элемент ИЛИ-НЕ
В логических схемах этот элемент независимо от того, на какой элементной базе он реализован, обозначается так, как показано на рис. 1.5,а. Таблица истинности приведена на рис. 1.5,б.
Если на вход логического элемента ИЛИ-НЕ подается хотя бы одна логическая 1, то на его выходе будет логический 0.В логических выражениях применяются обозначения:
- либо , но при этом из контекста должно быть ясно, что данное сложение именно логическое;
- либо .
Рис. 1.5. Логический элемент ИЛИ-НЕ на два входа
Видео с вопросами: поиск выходных данных логических цепей путем проверки
Стенограмма видео
На схеме показана логическая схема, состоящая из нескольких логических элементов.
Итак, на этой диаграмме мы видим, что здесь у нас есть логический элемент ИЛИ, еще один логический элемент ИЛИ здесь и логический элемент И здесь. Итак, давайте начнем с присвоения им соответствующих ярлыков. Теперь мы видим, что в нашей логической схеме есть два входа, вход A и B, которые входят в первый элемент ИЛИ, а выход элемента ИЛИ становится первым входом элемента И. Точно так же мы видим, что входы C и D являются входами второго элемента ИЛИ. И выход этого вентиля ИЛИ становится вторым входом вентиля И.
Теперь, исходя из всего этого, нам нужно выяснить следующее. Во-первых, нам нужно выяснить, сколько различных возможных комбинаций входов существует для схемы. Во-вторых, нам нужно выяснить, сколько возможных комбинаций входов в схему дают нулевой выход. И, наконец, нам нужно выяснить, сколько из возможных комбинаций входов в схему дают на выходе единицу. Итак, давайте начнем с самого первого вопроса: сколько различных возможных комбинаций входов существует для этой схемы?
Чтобы ответить на этот вопрос, нам нужно помнить, что логические вентили имеют бинарные входы. Другими словами, каждый из этих входов, входов A, B, C или D, может принимать значения ноль или единица. Итак, для каждого отдельного входа у нас есть два разных варианта. Это означает, что общее количество различных возможных комбинаций входных данных равно двум возможностям для входа A, умноженным на две возможности для входа B, умноженным на две возможности для входа C, умноженным на две возможности для входа D. Итак, мы находим, что два раза два раза два умножить на два равно 16. И мы можем убедиться в этом, когда построим таблицу истинности, чтобы помочь ответить на следующие два вопроса. Но пока мы нашли ответ на первый вопрос. Количество различных возможных комбинаций входов для этой схемы равно 16,9.0005
Итак, теперь, когда мы ответили на этот вопрос, давайте посмотрим на следующую часть вопроса. Сколько возможных комбинаций входов этой схемы дают на выходе ноль?
Другими словами, сколько существует комбинаций входных данных A, B, C и D, которые дают нам общий результат, равный нулю? Теперь, чтобы ответить на этот вопрос, как мы уже говорили ранее, нам нужно построить таблицу истинности. Итак, давайте очистим немного места на экране, чтобы мы могли это сделать. Давайте сначала запишем вопрос, на который мы пытаемся ответить здесь, а затем поймем, что таблица истинности, которую мы собираемся построить, будет основана на таблице истинности для вентиля ИЛИ, а также для вентиля И. Нам нужно будет комбинировать эти вентили определенным образом, чтобы отразить поведение этой конкретной установки, которая, другими словами, представляет собой два вентиля ИЛИ. И выходы этих вентилей ИЛИ поступают на входы вентиля И.
Но прежде чем мы это сделаем, давайте вспомним таблицу истинности для отдельных вентилей ИЛИ и И. Итак, давайте создадим таблицу истинности для вентиля ИЛИ здесь и таблицу истинности для вентиля И здесь. Предположим, что два входа для вентиля ИЛИ называются 𝛼 и 𝛽. Это будут наши общие входные имена, потому что мы уже использовали A и B. И аналогичным образом, допустим, что выход будет 𝜔, потому что мы уже использовали здесь слово output. И мы собираемся сделать то же самое с вентилем И: входы 𝛼 и 𝛽 и выход 𝜔. Затем мы можем заполнить значения.
Мы можем вспомнить, что в вентиле ИЛИ, если один из входов или другой равен единице, то и выход будет единицей. А для вентиля И нам нужно, чтобы и вход 𝛼, и вход 𝛽 были равны единице, чтобы выход был единицей. Итак, это отдельные таблицы истинности для вентиля ИЛИ и вентиля И. Теперь давайте начнем строить нашу настоящую таблицу для нашей установки. Поскольку мы знаем, что у нас есть четыре входа, входы A, B, C и D, мы знаем, что нам понадобится столбец для каждого из этих входов A, B, C и D, а затем еще один. для выхода. Но на самом деле, в этом случае нам могут помочь и некоторые промежуточные столбцы.
Предположим, что выход первого элемента ИЛИ мы будем называть 𝐸, а выход второго элемента ИЛИ мы будем называть 𝐹. Таким образом, 𝐸 и 𝐹 становятся входами в логический элемент И. Допустим, наша таблица истинности будет иметь столбцы для ввода A, B, C и D. Кроме того, у нас будут столбцы для 𝐸 и 𝐹. Теперь 𝐸 и 𝐹 не являются ни входами, ни выходами. Вернее, технически, они оба. Но они не являются входами или выходами всей системы. Поэтому мы будем называть их просто 𝐸 и 𝐹. А потом, конечно же, нужно добить таблицу столбцом для вывода. Итак, давайте начнем заполнять некоторые значения сейчас.
Давайте начнем с предположения, что все входы установлены на ноль. Входные данные A равны нулю, B равны нулю, C равны нулю и D равны нулю. И давайте разберемся, какие значения в первую очередь будут у 𝐸 и 𝐹 в этой ситуации. Что ж, 𝐸 является выходом для первого элемента ИЛИ, а значение 𝐸 зависит от значений входа A и входа B. Таким образом, мы можем видеть, что, когда A и B оба равны нулю, если мы перейдем к истине элемента ИЛИ таблица, это приводит к нулевому результату. Итак, подведем итог: если эти два значения равны нулю, ввод A и B, то выход этого вентиля ИЛИ, то есть 𝐸, также будет равен нулю. Следовательно, мы можем поставить ноль в этой строке. И то же самое верно для значения 𝐹. Оба входа C и D установлены на ноль.
Итак, возвращаясь к таблице истинности, для вентиля ИЛИ, а это именно то, что у нас есть здесь, значение 𝐹, которое является выходом этого вентиля ИЛИ, также будет равно нулю. Итак, мы можем поместить это в нашу таблицу истинности. И затем в этот момент мы можем временно перестать думать о 𝐸 и 𝐹 как о выходах логического элемента ИЛИ и начать думать о них как о входном сигнале логического элемента И. Потому что теперь у нас есть нулевое значение, поступающее в логический элемент И на первом входе, и еще один нуль, поступающий в логический элемент И в качестве второго входного значения. Что ж, в этой ситуации, когда оба входа логического элемента И равны нулю, выход также равен нулю. Таким образом, наш общий результат здесь будет равен нулю. В этот момент мы заполнили одну строку таблицы истинности. Нам просто нужно повторить этот процесс сейчас.
Оставим значения входов A, B и C одинаковыми, но изменим значение входа D на единицу. Таким образом, мы можем сказать, что вход A равен нулю, вход B равен нулю, вход C равен нулю, а вход D равен единице. Исходя из этого, мы можем вычислить последствия для 𝐸 и 𝐹, а затем вычислить значение вывода. Но прежде чем мы это сделаем, вот хороший способ построить эти таблицы истинности или, в частности, значения входных данных в таблицах истинности и как это делать систематически. Хороший способ сделать это — подумать о том, как мы считаем числа в десятичной системе.
Допустим, мы начинаем с числа ноль, которое в данном случае мы представляем пятью нулями. И затем, если мы хотим увеличить это число на единицу, мы просто меняем последний ноль на единицу. И в этот момент мы увеличили на единицу. Затем, если мы хотим увеличить еще на единицу, мы меняем это число на два. И мы можем продолжать это делать. Мы можем продолжать увеличивать число в правой части до трех, затем до четырех, затем до пяти и так далее, пока не дойдем до девяти. В этот момент мы снова зацикливаем это последнее число до нуля. Но затем увеличьте второе число справа до единицы. Итак, теперь у нас есть 00010, представляющее число 10 в десятичном виде.
А потом мы снова проходим весь этот цикл. Мы меняем число в правой части на один, затем на два, затем на три, затем на четыре и так далее. А затем, когда мы доходим до 19, мы снова возвращаем это последнее число к нулю и снова увеличиваем это число на единицу. А затем, когда мы пройдемся по всем 90-м, мы циклически обнуляем эти два числа и увеличиваем значение этого числа на единицу. Такую логику можно использовать и в двоичной системе.
Способ сделать это состоит в том, чтобы представить значения входных данных в нашей системе, начиная со всех нулей и затем увеличивая конечное число на единицу. В этот момент мы исчерпали все возможности с точки зрения того, какое значение может принимать этот ввод. В десятичной системе мы могли бы прокрутить до девяти, но в двоичной системе мы не можем. Поэтому вместо этого мы сбрасываем это значение на ноль и увеличиваем его на единицу. Итак, у нас осталось 0010. Затем мы можем увеличить это значение на единицу, чтобы получить 0011. В этот момент нам нужно увеличить это значение. Мы увеличиваем вторую цифру до единицы и сбрасываем обе на нули и так далее и тому подобное. Теперь, если мы сделаем это таким образом, то мы систематически рассмотрим все возможности ввода A, B, C и D и то, как они сочетаются друг с другом.
Итак, основываясь на этой информации, давайте полностью заполним первые четыре столбца нашей таблицы истинности. Итак, мы уже заполнили строку, представляющую 0001 или где входные данные A, B и C установлены на ноль, а входные данные D установлены на единицу. Итак, давайте заполним следующую строку. Это будет 0010. Затем у нас будет 0011. Двигаемся дальше, у нас будет 0100, а затем 0101. Следующим будет 0110, а затем 0111. Затем у нас будет 1000. Следующий — 1001. Продолжаем у нас есть 1010, 1011, 1100, 1101, 1110 и, наконец, последняя возможная комбинация, которую мы не ввели, 1111. Итак, на этом этапе мы можем подсчитать общее количество возможных входных комбинаций или, другими словами, слов, общее количество строк, которые мы заполнили в этой таблице истинности. И в итоге получается 16, что в точности соответствует ответу, который мы дали на первую часть вопроса, количеству различных возможных комбинаций входов для этой схемы.
Но в любом случае, теперь, когда мы заполнили все возможные значения входных данных для этой таблицы истинности, давайте вернемся к рассмотрению значений 𝐸 и 𝐹 и, наконец, выходных данных. Итак, глядя на вторую строку таблицы, входные данные A и B установлены равными нулю, а входные данные A и B напрямую влияют на значение 𝐸. Итак, мы смотрим на таблицу истинности для вентиля ИЛИ, чтобы увидеть, что когда оба входа равны нулю, выход также равен нулю. Следовательно, значение 𝐸 равно нулю. Однако для 𝐹 все немного по-другому, потому что теперь у нас есть вход C, равный нулю, а вход D, равный единице. Итак, второй вход в этом вентиле ИЛИ установлен в единицу. Поэтому мы сейчас смотрим на эту вторую строку здесь: первый ввод ноль, второй ввод один. Это дает результат один. И помните, выход этого вентиля ИЛИ равен 𝐹. Так что 𝐹 будет один.
И затем, наконец, мы объединяем 𝐸 и 𝐹, чтобы они были входами логического элемента И. И мы видим, что когда первый вход равен нулю, а второй вход — это именно то, что мы имеем здесь. Тогда выход логического элемента И, который также является выходом всей схемы, равен нулю. Итак, мы говорим, что этот вывод здесь, во второй строке, равен нулю. Теперь давайте повторим этот процесс еще раз, чтобы быть уверенным. Для этого давайте посмотрим на третью строку таблицы истинности.
Входы A и B установлены на ноль. Вход C установлен на единицу, а вход D установлен на ноль. Таким образом, входы A и B влияют на значение 𝐸. Итак, мы видим, что если оба входа равны нулю, то выход первого элемента ИЛИ, то есть 𝐸, будет равен нулю. И тогда мы видим, что входные данные C и D установлены равными единице и нулю соответственно. Итак, в этой таблице истинности мы смотрим на третью строку. Первый вход равен единице, второй вход равен нулю, а выход вентиля ИЛИ равен единице. Таким образом, мы можем сказать, что 𝐹 один. И потом, мы уже видели, что для логического элемента И, если первый вход равен нулю, второй вход равен единице, то выход равен нулю. И поэтому мы ставим ноль здесь в этом выходном значении. И затем мы можем повторить этот процесс для количества оставшихся строк. Сделав это, мы обнаружим, что наша завершенная таблица истинности выглядит так. Не стесняйтесь приостановить видео здесь и проверить таблицу истинности, которую вы нарисовали против этой.
Но в любом случае, возвращаясь к нашему вопросу, нас попросили найти, сколько возможных комбинаций входов в схему дают нулевой выход. Другими словами, сколько из этих строк имеют нулевой результат? Итак, посчитаем так: раз, два, три, четыре, пять, шесть, семь. Таким образом, количество возможных комбинаций входов схемы, которые дают нуль на выходе, равно семи. Итак, теперь, когда мы ответили на этот вопрос, давайте посмотрим на последнюю часть вопроса.
Сколько возможных комбинаций входов этой схемы дают на выходе единицу?
Итак, нам нужно подсчитать количество строк в нашей таблице истинности, которые имеют один результат. Но на самом деле нам не нужно это считать, потому что помните, мы говорили ранее, что в этой таблице есть 16 различных возможных комбинаций входных данных или 16 различных строк. И семь из этих строк имеют нулевой результат. Таким образом, оставшиеся строки должны иметь выход, равный единице. Потому что помните, что вывод на логический элемент является двоичным выходом. У нас может быть только значение ноль или единица. И, следовательно, оставшиеся девять строк в нашей таблице истинности, которые мы еще не учли, будут иметь результат, равный единице. И чтобы убедиться, давайте подтвердим счетом. Таким образом, количество строк, которые имеют результат один, равно одному, двум, трем, четырем, пяти, шести, семи, восьми, девяти, как мы и предполагали.
Логические схемы. Часть первая — Python для развлечения
Есть несколько мотивов для моделирования логических схем в Python. Первый это хорошее симуляционное упражнение. Во-вторых, он демонстрирует объектно-ориентированный хорошо программировать, особенно сила наследования. Наконец-то настоящая логика схемы, построенные из электронных компонентов, являются основой компьютерного оборудования. Самыми простыми являются вентили (И, ИЛИ, НЕ), состоящие всего из нескольких транзисторов и сопротивление. С середины 1960-х эти схемы изготавливаются в интегральные микросхемы (микросхемы). До этого их строили отдельно. транзисторы и резисторы, соединенные вместе на печатных платах. Сегодня вы можете купите микросхемы, скажем, с шестью вентилями НЕ или четырьмя вентилями И-НЕ с двумя входами (вентиль И с последующим НЕ) всего за четверть в местном магазине электроники. продавец.
Мы будем использовать пару классов Python для имитации поведения логики схемы. У нас будет базовый класс LC (логическая схема), который будет подклассом к фактическим воротам и другим цепям. Второй класс, Connector, будет использоваться для обеспечивают входы и выходы логических схем. Выходные разъемы Метод connect имитирует подключение LC друг к другу.
Мы начнем с 3 простых LC и перейдем к построению всего остального из их. Когда мы закончим с этой частью, у нас будет LC, который добавляет два двоичных файла. числа вместе. В следующей части мы увидим, какими могут быть те же самые простые ЛК. используется для обеспечения компьютерной памяти и даже умножения двоичных чисел.
Наши 3 основных LC — это два входных элемента И и ИЛИ и элемент НЕ (иногда называется инвертором).
Логический элемент И имеет два входа (обычно обозначенных как A и B) и и выход C. входы и выходы могут иметь значение 0 или 1. Выход C равен 1 тогда и только тогда, когда оба элемента A и B равны 1. В противном случае он равен 0. (см. рис. 1)
Элемент ИЛИ очень похож на те же входы A и B и выход C. выход C равен 1, если либо A, либо B равен 1. В противном случае он равен 0.
Элемент НЕ имеет один вход A и выход B. Выход противоположен ввод. Если на входе 0, на выходе 1. Если на входе 1, на выходе 0.
Из этих трех базовых LC (или вентилей) все остальное строится с использованием существующих LC и подключение выходов к входам определенным образом. Например, чтобы сделать Ворота И-НЕ, где выход C равен 0 тогда и только тогда, когда оба входа равны 1, мы можем использовать и вентиль И, за которым следует вентиль НЕ. Входы логического элемента И являются входами к НАНД. Выход И соединен с входом НЕ. Выход НЕ выход для NAND. См. рисунок 2.
Более интересным LC (см. рисунок 3) является логический элемент XOR. Он построен с 2 НЕ, 2 И и вентиль ИЛИ. Его выход C равен 1, если входы A и B не являются одно и тоже. Мы можем видеть, как это работает, глядя на рисунок. Выход LC является ИЛИ выход вентиля и будет равен 1, если любой из выходов вентиля И равен 1. Верхний элемент И Выход вентиля равен 1, если вход A равен 1, а B равен 0. Нижний выход вентиля И равен 1, если A равно 0, а B равно 1. Если A и B одинаковы, оба выхода логического элемента И равны 0. Вы следует убедиться в этом более подробно.
Давайте теперь посмотрим на наши классы Python. Класс Connector предоставит входные данные и выходные данные для экземпляров класса LC (и подклассов). Каждый коннектор будет принадлежат владельцу и имеют имя. По соглашению имя представляет собой строку, отражает имя переменной, которое мы выбираем для коннектора. Это позволит нам контролировать выходные данные во время выполнения. Каждый коннектор имеет текущее значение, либо 0 или 1. Это будет меняться по мере выполнения программы.
Выходной разъем обычно подключается к одному или нескольким входным разъемам. если это не окончательный результат, и в этом случае он, вероятно, будет контролироваться. Вход соединители будут иметь свой атрибут «активирует» true, так что, когда их значение изменяется, они будят своего владельца (LC), чтобы переоценить его выходные данные.
Итак, это код для инициализации экземпляра класса Connector
класса Connector: def __init__(я, владелец, имя, активирует = 0, монитор = 0): self.value = Нет self.owner = владелец self.name = имя self.monitor = монитор self.connects = [] self.activates= активирует
Для выходных соединителей мы будем вызывать метод connect, чтобы обеспечить вывод со списком его входных разъемов. Для удобства один вход не должны быть помещены в список.
соединение по умолчанию (самостоятельно, входы): если не isinstance (входы, список): входы = [входы] для ввода во входы: self. connects.append(ввод)
Метод set будет вызываться из разных мест в зависимости от того, иметь входной или выходной разъем. Выходы будут установлены их владельцами функции оценки. Выходы, в свою очередь, будут устанавливать свои входы. В качестве входа установлен, он запускает оценку своих владельцев, каскадируя логическую активность. Если коннектор находится под наблюдением (self.monitor==1) он печатает имя владельца, его собственное имя и значение, которое ему присваивается.
заданный набор (собственный, значение): если self.value == значение: return # Игнорировать, если нет изменений самостоятельная ценность = ценность если self.activates: self.owner.evaluate () если селф.монитор: print("Соединитель {0}-{1} установлен на {2}".format(self.owner.name, имя, самоценность)) для con в self.connects: con.set(значение)
Логические схемы будут моделироваться в классе LC и его подклассах. Есть два типа логических схем, простые и составные. Простые логические схемы имеют входы, выходы и метод оценки. Составные схемы имеют входы, выходы, а также набор внутренних LC и объектов соединителей, «подключенных» все вместе. Каждый вход составного LC будет подключен к входу внутренний ЖК. Точно так же каждый выход составного LC будет исходить из выхода внутреннего ЖК. Для композитных LC функция оценки не используется.
Наш базовый класс LC является виртуальным классом. То есть мы не будем строить инстансы (объекты) от него напрямую. Он будет подклассифицирован для более полезных целей. Это предоставляет логику для присвоения LC имени и функции оценки по умолчанию.
класс ЛК: # Логические схемы имеют имена и функцию оценки, определенные в дочернем элементе. # классы. Они также будут содержать набор входов и выходов. def __init__(я, имя): self.name = имя определить оценку (сам): возвращаться
Наш первый настоящий LC — это вентиль НЕ или инвертор. Он вызывает свой суперкласс, устанавливает входной разъем A, выходной разъем B и способ оценки. метод оценки устанавливает B в 1, если A равно нулю, или B в 0, если A равно 1. Not LC является пример простого ЖК.
класс Not(LC): # Инвертор. Вход А. Выход Б. def __init__(я, имя): LC.__init__(я, имя) self.A = Соединитель (я, 'A', активирует = 1) self.B = Соединитель (я, 'B') определить оценку (сам): self.B.set(не self.A.value)
Далее мы определим классы для наших двух других простых LC, И и ИЛИ. ворота. Сначала давайте определим класс удобства для двух входных вентилей в целом. которые имеют входы с именами A и B и выход C.
класс Gate2(LC): # два входа. Входы A и B. Выход C. def __init__(я, имя): LC.__init__(я, имя) self.A = Соединитель (я, 'A', активирует = 1) self.B = Соединитель (я, 'B', активирует = 1) self.C = Соединитель (я, 'C')
После этого нам просто нужно добавить функции оценки, чтобы сделать И или ИЛИ классы.
класс И(Gate2): # два входа AND Gate def __init__(я, имя): Gate2.__init__(я, имя) определить оценку (сам): self.C.set(self.A.value и self.B.value) class Or(Gate2): # два входа ИЛИ. def __init__(я, имя): Gate2.__init__(я, имя) определить оценку (сам): self.C.set(self.A.value или self.B.value)
Давайте немного поиграем. Мы создадим логический элемент И, установим его выход для мониторинга, а затем установите оба его входных разъема на 1.
>>> из логического импорта * >>> а = И('А1') >>> монитор переменного тока = 1 >>> a.A.set(1) >>> a.B.set(1) Разъем A1-C настроен на 1 >>>
Далее мы создадим инвертор (НЕ вентиль) и подключим его к выходу ворота И. См. рисунок 2. Затем мы изменим один из входов.
>>> n = Нет('N1') >>> a.C.connect(n.A) >>> n.B.монитор = 1 >>> a.B.set(0) Разъем A1-C настроен на 0 Разъем N1-B настроен на 1 >>>
Теперь мы создадим класс для составного LC, вентиля XOR. См. рис. 3. Когда построен экземпляр Xor, мы берем 2 логических элемента И, 2 инвертора и ИЛИ ворота и подключите их, как показано на рисунке. Обратите особое внимание на то, как мы подключить внешний вход (self.A) к входу внутреннего вентиля (self.A1.A)
class Xor(Gate2): def __init__(я, имя): Gate2.__init__(я, имя) self.A1 = And("A1") # Смотрите схему, чтобы следить за соединениями self.A2 = И("A2") self.I1 = Нет("I1") self.I2 = Нет("I2") self.O1 = Или("O1") self.A.connect([self.A1.A, self.I2.A]) self.B.connect([self.I1.A, self.A2.A]) self.I1.B.connect([self.A1.B]) self.I2.B.connect([self.A2.B]) self.A1.C.connect([self.O1.A]) self.A2.C.connect([self.O1.B]) self.O1.C.connect([self.C])
Итак, давайте на минутку поиграем с вентилем XOR. Помните, что вывод должен быть 1, если входы разные.
>>> o1 = Xor('o1') >>> o1.C.monitor=1 >>> o1.A.set(0) >>> o1. B.set(0) Разъем o1-C установлен на 0 >>> o1.B.set(1) Разъем o1-C настроен на 1 >>> o1.A.set(1) Разъем o1-C установлен на 0 >>>
Теперь, наконец, мы готовы поговорить о дополнении. Итак, начнем с что-то знакомое. Предположим, мы хотим добавить 168 и 234. Хм. 8 плюс 4 равно 2 и нести 1. 1 плюс 6 плюс 3 равно 0 и нести 1. Наконец, 1 плюс 1 плюс 2 равно 4. Ответ 402.
Итак, когда нам было 7 лет, мы выучили 100 (10 раз по 10) правил игры. сложение типа 8 + 4 = 12 (или 2 и перенос 1). Конечно, если вы будете хитрым и помните, что 8 + 4 — это то же самое, что 4 + 8, и что ноль плюс что угодно — это просто что угодно, можно сократить объем запоминания до 45 пунктов.
В двоичном формате это намного проще. 4 правила (2 раза по 2) вместо 100. Если вы хитро, всего 1. В принципе, что 1+1=2 (ну 10, то есть 0 и нести 1). Сейчас для представления числа в двоичном виде требуется примерно в 3,5 раза больше цифр, чем десятичный, но вы можете начать видеть, что это может быть хорошим компромиссом.
На самом деле пока мы говорим только о первом (крайнем правом) столбце. Там есть переноса пока нет. Но потерпите меня немного. Давайте резюмируем 4 правила двоичное сложение:
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 и нести 1
Мы построим полусумматорную схему с 2 входами и 2 выходами. См. рисунок 4. Выход Sum такой же, как и вентиль XOR выше. То есть бит суммы равен единице, если один и только один из входных битов равен 1. Выполнение равно 1, только если оба входа равны 1. Для этого нам нужен вентиль И.
class HalfAdder(LC): # Одноразрядный сумматор, входы A,B. Сумма и выполнение def __init__(я, имя): LC.__init__(я, имя) self.A = Соединитель (я, 'A', 1) self.B = Соединитель (я, 'B', 1) self.S = Соединитель (я, 'S') self.C = Соединитель (я, 'C') self.X1 = Xor("X1") self.A1 = И("A1") self.A.connect([self.X1.A, self.A1.A]) self.B.connect([self.X1.B, self.A1.B]) self. X1.C.connect([self.S]) self.A1.C.connect([self.C])
Давайте построим половинный сумматор, будем следить за его выходами, пока мы играем с входными данными
>>> h2 = HalfAdder("h2") >>> h2.S.monitor=1 >>> h2.C.monitor=1 >>> h2.A.set(0) Соединитель h2-C установлен на 0 >>> h2.B.set(0) Соединитель h2-S настроен на 0 >>> h2.B.set(1) Соединитель h2-S настроен на 1 >>> h2.A.set(1) Соединитель h2-S настроен на 0 Соединитель h2-C настроен на 1 >>>
Теперь мы готовы к последнему шагу. Вернемся ненадолго к десятичным числам. Предположим, мы добавляем следующее.:
189 243
и работаем над средней колонкой. У нас будет перенос 1 (9+3=2, несите 1) плюс 8 плюс 4. Мы добавим 8 и 4, чтобы получить 12 (на самом деле 2 и перенесите 1), а затем добавьте перенос в 1 к 2, чтобы получить 3 для цифры суммы. в 2 дополнения, максимум только одно будет генерировать перенос. Вы можете играть с некоторыми примерами, чтобы убедиться в этом.
Посмотрите на рисунок 5. Складываем A и B, берем бит суммы и добавляем к переносу в бит. Только одно из этих дополнений может привести к переносу, который распространяется на следующий столбец.
Итак, вот наш класс для полного сумматора. 3 входа, 2 выхода и разводка как показано на рисунке.
class FullAdder(LC): # Одноразрядный сумматор, A,B,Cin in. Sum и Cout out def __init__(я, имя): LC.__init__(я, имя) self.A = Соединитель (я, 'A', 1, монитор = 1) self.B = Connector(я, 'B', 1, монитор=1) self.Cin = Connector(я, 'Cin', 1, монитор=1) self.S = Соединитель (я, 'S', монитор = 1) self.Cout = Connector(я, 'Cout', монитор=1) self.h2 = Полусумба("h2") self.h3 = Полусумба("h3") self.O1 = Или("O1") self.A.connect([self.h2.A]) self.B.connect([self.h2.B]) self.Cin.connect([self.h3.A]) self.h2.S.connect([self.h3.B]) self.h2.C.connect([self.O1.B]) self.h3.C.connect([self.O1.A]) self. h3.S.connect([self.S]) self.O1.C.connect([self.Cout])
Вместо того, чтобы играть с одним полным сумматором (можно, конечно), мы перейдем к делу и напишу функцию, которая соединяет четыре полных сумматора и давайте сделаем сложение в двоичном формате. На рис. 6 показана схема нашей схемы.
Мы будем представлять двоичное число в виде строки нулей и единиц. Например «0101». Мы будем использовать вспомогательную функцию, чтобы извлечь бит из заданной позиции, как фактический 0 или 1 вместо символа.
бит определения (х, бит): вернуть x[бит] == '1'
Наша тестовая функция примет два двоичных числа (в виде строк), построит 4-битное сумматор, установите входы, а затем распечатайте результат, включая окончательный перенос вне. Так же, как и в десятичной системе счисления, где 2 четырехзначных числа могут в сумме дать пятизначное число. В результате нам также нужно предоставить последнее выполнение в виде цифры.
def test4Bit(a, b): # a, b четыре строки символов, например '0110' F0 = ПолныйСумматор("F0") F1 = ПолныйСумматор("F1") F0.