Основы логики ЭВМ и цифровой схемотехники

Курс раскрывает фундаментальные принципы функционирования вычислительных систем, начиная от математических основ булевой алгебры и заканчивая архитектурой процессора. Слушатели научатся проектировать базовые цифровые узлы и понимать логику обработки информации на аппаратном уровне.

1. Системы счисления, двоичная арифметика и кодирование данных

Системы счисления, двоичная арифметика и кодирование данных

Добро пожаловать на курс «Основы логики ЭВМ и цифровой схемотехники». Это первая и фундаментальная статья, с которой начинается погружение в мир того, как на самом деле «думают» компьютеры. Мы привыкли видеть на экранах текст, изображения, видео и сложные интерфейсы, но в глубине процессора существует только два состояния: есть сигнал или нет сигнала.

В этой статье мы разберем, как с помощью всего двух символов можно описать Вселенную, как научить машину считать и как хранить информацию.

Почему компьютеры используют двоичную систему?

Человечество использует десятичную систему счисления () по простой причине — у нас десять пальцев на руках. Это удобно для нас, но крайне неудобно для электроники.

Чтобы создать устройство, оперирующее десятью уровнями напряжения (например, 0В, 1В, 2В... 9В), потребовалась бы невероятно сложная и дорогая схема, подверженная помехам. Гораздо проще и надежнее различать всего два состояния:

  • Ток есть (Высокое напряжение) — логическая 1.
  • Тока нет (Низкое напряжение) — логический 0.
  • Минимальная единица информации, принимающая значение 0 или 1, называется бит (bit — binary digit).

    !Иллюстрация представления байта информации через состояние включенных и выключенных лампочек

    Позиционные системы счисления

    Любая современная система счисления, будь то привычная нам десятичная или компьютерная двоичная, является позиционной. Это значит, что значение цифры зависит от её места (позиции) в числе.

    Рассмотрим привычное число в десятичной системе. Мы понимаем его как:

    Где: * — цифры числа. * — основание системы счисления. * — разряды (степени основания), считая справа налево, начиная с нуля.

    Двоичная система (Binary)

    В двоичной системе основанием является число 2, а допустимые цифры — только 0 и 1. Давайте переведем двоичное число в десятичное, используя тот же принцип разложения по степеням:

    Где: * — это . * — это . * — это . * — это (любое число в степени 0 равно 1).

    Складываем результаты:

    Таким образом, в двоичной системе — это в десятичной.

    Шестнадцатеричная система (Hexadecimal)

    Записывать длинные последовательности нулей и единиц (например, ) неудобно для восприятия человеком. Поэтому в программировании и схемотехнике используют шестнадцатеричную систему. Она компактнее и легко переводится в двоичную.

    Основание системы: 16. Цифры: , а дальше нам не хватает арабских цифр, поэтому используются латинские буквы: A (10), B (11), C (12), D (13), E (14), F (15).

    > Один символ шестнадцатеричной системы кодирует ровно 4 бита (тетраду) двоичной информации.

    Таблица соответствия:

    | DEC (10) | BIN (2) | HEX (16) | | :--- | :--- | :--- | | 0 | 0000 | 0 | | 1 | 0001 | 1 | | ... | ... | ... | | 9 | 1001 | 9 | | 10 | 1010 | A | | 11 | 1011 | B | | 15 | 1111 | F |

    Пример перевода в десятичную:

    Где — цифра старшего разряда, — вес разряда, — значение цифры F, — вес младшего разряда.

    Двоичная арифметика

    Арифметические операции в двоичной системе выполняются по тем же правилам «столбика», что и в десятичной, но с учетом того, что переполнение разряда наступает, когда сумма достигает 2 (так как цифры 2 не существует).

    Сложение

    Правила сложения одноразрядных двоичных чисел: * * * * (0 пишем, 1 переносим в следующий разряд)

    Пример сложения (в двоичном виде ):

    Где:

  • Младший разряд: .
  • Средний разряд: (0 пишем, 1 в уме).
  • Старший разряд: (0 пишем, 1 становится новым старшим разрядом).
  • Результат . Все верно.

    !Визуализация переноса разрядов при двоичном сложении

    Кодирование целых чисел

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

    Прямой код и знаковый разряд

    Самый простой способ — выделить самый старший бит под знак. Если бит равен 0 — число положительное, если 1 — отрицательное. Например, для 8-битного числа: * *

    Однако этот метод имеет два серьезных недостатка:

  • Существует два нуля: () и (), что усложняет логику сравнения.
  • Арифметические операции усложняются (нужно анализировать знак перед сложением).
  • Дополнительный код (Two's Complement)

    В современной вычислительной технике используется дополнительный код. Он позволяет выполнять вычитание через операцию сложения, что значительно упрощает конструкцию процессора.

    Алгоритм получения отрицательного числа в дополнительном коде:

  • Взять положительное число в двоичном виде.
  • Инвертировать все биты (заменить 0 на 1, а 1 на 0).
  • Прибавить 1 к результату.
  • Формула получения дополнительного кода:

    Где — число в дополнительном коде, — побитовая инверсия числа , — арифметическое добавление единицы.

    Пример: получим число -5.

  • Число 5: 0000 0101
  • Инверсия: 1111 1010
  • Добавляем 1: 1111 1011
  • Теперь, если мы сложим и (как обычные двоичные числа), мы должны получить 0:

    Единица в 9-м разряде выходит за пределы 8 бит и отбрасывается. В итоге в байте остается 0000 0000. Магия работает!

    Кодирование текстовой информации

    Компьютер не понимает букв, он понимает только числа. Чтобы отобразить текст, каждому символу присваивается уникальный числовой код. Эта таблица соответствий называется кодировкой.

    ASCII

    Исторически первой массовой кодировкой стала ASCII (American Standard Code for Information Interchange). Она использует 7 бит для кодирования 128 символов: латинский алфавит, цифры и управляющие символы.

    Например: * Символ 'A' имеет код (). * Символ 'a' имеет код ().

    Unicode

    ASCII не могла вместить кириллицу, иероглифы и эмодзи. Поэтому появился стандарт Unicode (например, в реализации UTF-8). Он использует переменную длину кода (от 1 до 4 байт) для одного символа, что позволяет закодировать более миллиона различных знаков.

    Заключение

    Мы разобрали фундамент цифровой техники: системы счисления и базовую арифметику. Понимание того, как числа представляются в битах и как работает дополнительный код, критически важно для дальнейшего изучения логических вентилей и архитектуры процессора.

    В следующей статье мы перейдем от арифметики к логике и изучим Булеву алгебру — математический аппарат, описывающий законы мышления цифровых схем.

    2. Булева алгебра, логические вентили и минимизация функций

    Булева алгебра, логические вентили и минимизация функций

    В предыдущей статье мы узнали, что компьютер «мыслит» нулями и единицами. Но как именно набор битов превращается в сложные вычисления, обработку видео или запуск игр? Ответ кроется в булевой алгебре — математическом фундаменте всей цифровой электроники.

    Если в обычной алгебре переменные — это числа (), то в булевой алгебре переменные могут принимать только два значения: Истина (True, 1) и Ложь (False, 0). В этой статье мы разберем, как из простых логических операций строятся «мозги» компьютера и как инженеры упрощают эти схемы, чтобы процессоры работали быстрее и не перегревались.

    Джордж Буль и логика как математика

    В середине XIX века английский математик Джордж Буль предложил революционную идею: логические высказывания можно записывать в виде уравнений.

    Представьте утверждение: «Я пойду гулять, если будет солнечно И у меня будет свободное время». Это логическая операция И. Если хотя бы одно условие ложно (идет дождь или я занят), прогулка не состоится.

    Компьютер работает точно так же. Вместо нейронов у него — логические вентили (logic gates), физические устройства, реализующие эти операции.

    Базовые логические операции

    Существует три фундаментальные операции, из которых можно построить любую, даже самую сложную цифровую схему.

    1. Логическое НЕ (NOT, Инверсия)

    Самая простая операция. Она просто меняет значение на противоположное. Если на входе , на выходе . Если на входе , на выходе .

    Обозначение в формулах: или .

    Где — результат операции, — инверсия входного сигнала .

    Таблица истинности:

    | Вход A | Выход Y | | :--- | :--- | | 0 | 1 | | 1 | 0 |

    В схемотехнике этот элемент называется инвертор.

    2. Логическое И (AND, Конъюнкция)

    Операция дает «Истину» () только тогда, когда ВСЕ входные сигналы истинны. Это похоже на последовательное соединение выключателей: лампочка загорится только если включить и первый, и второй выключатель.

    Обозначение: , или просто .

    Где — результат, и — входные сигналы, — знак логического умножения.

    Таблица истинности:

    | A | B | Y (A AND B) | | :--- | :--- | :--- | | 0 | 0 | 0 | | 0 | 1 | 0 | | 1 | 0 | 0 | | 1 | 1 | 1 |

    3. Логическое ИЛИ (OR, Дизъюнкция)

    Операция дает «Истину», если ХОТЯ БЫ ОДИН из входов истинен. Это аналог параллельного соединения выключателей: свет загорится, если нажать любую из кнопок (или обе сразу).

    Обозначение: или .

    Где — результат, и — входные сигналы, — знак логического сложения.

    Таблица истинности:

    | A | B | Y (A OR B) | | :--- | :--- | :--- | | 0 | 0 | 0 | | 0 | 1 | 1 | | 1 | 0 | 1 | | 1 | 1 | 1 |

    !Иллюстрация графических обозначений базовых логических вентилей и их таблиц истинности

    Сложные логические вентили

    Комбинируя базовые операции, мы получаем более сложные элементы, которые широко используются в реальных процессорах.

    Исключающее ИЛИ (XOR)

    Очень важный элемент для арифметики. Он выдает , только если входы разные. Если входы одинаковые ( или ), результат — .

    Где — символ операции сложения по модулю 2.

    Именно XOR используется для сложения двоичных чисел, так как (в текущем разряде) и перенос единицы.

    И-НЕ (NAND) и ИЛИ-НЕ (NOR)

    Это операции И и ИЛИ, к выходу которых подключен инвертор (НЕ). * NAND: Выдает только тогда, когда оба входа . В остальных случаях . * NOR: Выдает только тогда, когда оба входа .

    > Вентиль NAND (И-НЕ) называют «универсальным элементом». Имея на руках только кучу вентилей NAND, можно собрать абсолютно любую логическую схему, включая процессор Intel Core i9.

    Законы булевой алгебры

    Чтобы проектировать эффективные схемы, нужно уметь преобразовывать логические выражения. Для этого существуют законы, похожие на школьную алгебру, но со своими особенностями.

    Основные тождества

  • Коммутативность: Порядок не важен.
  • Где — переменные.

  • Дистрибутивность: Раскрытие скобок.
  • Где — логические переменные.

  • Закон идемпотентности: (От лат. idem — тот же самый).
  • В логике , а не . Дублирование сигнала не меняет его суть.

    Законы де Моргана

    Это, пожалуй, самые полезные правила для упрощения схем. Они позволяют переходить от И к ИЛИ и наоборот, используя инверсию.

    Первый закон: Инверсия конъюнкции есть дизъюнкция инверсий.

    Где — отрицание произведения, — сумма отрицаний.

    Второй закон: Инверсия дизъюнкции есть конъюнкция инверсий.

    Где — отрицание суммы, — произведение отрицаний.

    Мнемоническое правило: «Разломи черту надвое и поменяй знак под ней».

    Минимизация логических функций

    Представьте, что вы спроектировали схему, которая описывается уравнением:

    Если реализовывать это «в лоб», нам понадобятся: 2 вентиля И, 1 вентиль ИЛИ и 1 инвертор. Итого 4 элемента. Но давайте применим алгебру.

    Вынесем за скобки (дистрибутивный закон):

    Мы знаем, что всегда равно (либо истинно, либо не- истинно — третьего не дано).

    А умноженное на — это просто .

    Результат: Вся наша сложная схема из 4 вентилей на самом деле просто провод, соединенный с входом . Мы сэкономили место на кристалле, уменьшили энергопотребление и убрали задержки сигнала. Это и есть минимизация.

    Карты Карно (Karnaugh Maps)

    Алгебраический метод хорош, но когда переменных становится 3, 4 или 5, формулы становятся громоздкими. Инженеры используют графический метод — Карты Карно.

    Это таблица, где ячейки расположены так, что соседние ячейки отличаются значением только одной переменной (код Грея). Это позволяет визуально объединять группы единиц и сразу видеть упрощенное выражение.

    !Визуализация минимизации функции с помощью Карты Карно: объединение соседних единиц позволяет упростить выражение

    Алгоритм работы с картой:

  • Заполнить таблицу значениями функции (0 или 1).
  • Обвести прямоугольные области из единиц (размером 1, 2, 4, 8... клеток).
  • Для каждой группы записать терм, исключив переменные, которые меняют свое значение внутри группы.
  • Заключение

    Булева алгебра — это язык, на котором инженеры разговаривают с кремнием. Мы прошли путь от простых вентилей до методов минимизации, позволяющих создавать эффективные процессоры.

    Понимание того, как превращается в физический сигнал, необходимо для следующего шага. В следующей статье мы объединим эти вентили в блоки и создадим комбинационные схемы: шифраторы, мультиплексоры и сумматоры, которые уже умеют выполнять реальную полезную работу.

    3. Комбинационные схемы: шифраторы, мультиплексоры и сумматоры

    Комбинационные схемы: шифраторы, мультиплексоры и сумматоры

    В предыдущих статьях мы изучили алфавит цифрового мира (0 и 1) и грамматику (булеву алгебру). Теперь пришло время научиться составлять из букв слова и предложения. Мы переходим от отдельных логических вентилей к комбинационным схемам — функциональным блокам, из которых строятся процессоры, память и контроллеры.

    Главная особенность комбинационных схем заключается в их названии: состояние выхода зависит только от текущей комбинации входных сигналов. У них нет памяти, они не знают, что было секунду назад. Как только входной сигнал меняется, выход меняется практически мгновенно (с поправкой на физическую задержку распространения сигнала).

    Сегодня мы разберем три кита, на которых держится схемотехника: шифраторы/дешифраторы, мультиплексоры и сумматоры.

    Дешифраторы (Decoders)

    Представьте, что у процессора есть адрес ячейки памяти, к которой он хочет обратиться. Адрес — это двоичное число, например, (число 2). Но в памяти миллиарды ячеек, и нам нужно подать сигнал активации («Включись!») только на одну конкретную ячейку под номером 2, а остальные оставить в покое. Эту задачу решает дешифратор.

    Дешифратор — это схема, которая преобразует двоичный код на входе в активный сигнал на одном из выходов. Если у дешифратора входов, то у него может быть до выходов.

    Принцип работы дешифратора 2-в-4

    Рассмотрим простейший дешифратор с двумя входами ( и ) и четырьмя выходами ().

    Таблица истинности выглядит так:

    | Вход A | Вход B | Y0 | Y1 | Y2 | Y3 | Активный выход | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | 0 | 0 | 1 | 0 | 0 | 0 | Нулевой | | 0 | 1 | 0 | 1 | 0 | 0 | Первый | | 1 | 0 | 0 | 0 | 1 | 0 | Второй | | 1 | 1 | 0 | 0 | 0 | 1 | Третий |

    Логика работы описывается конъюнкциями (операцией И). Например, выход должен быть активен только тогда, когда И . На языке формул:

    Где — сигнал на нулевом выходе, — инверсия входа A, — инверсия входа B, — логическое И.

    Соответственно, для выхода (когда ):

    Где — сигнал на третьем выходе, и — прямые значения входов.

    !Логическая схема дешифратора 2-в-4, преобразующего двоичный код в позиционный сигнал

    Такой способ представления, когда активен только один бит из всех, называется унитарным кодом (one-hot encoding).

    Шифраторы (Encoders)

    Шифратор выполняет обратную операцию. Он преобразует сигнал на одном из входов в двоичный код на выходе.

    Классический пример использования — клавиатура. У вас есть 100+ клавиш. Когда вы нажимаете клавишу «А», замыкается один контакт. Компьютеру не нужно 100 проводов от клавиатуры, ему нужен двоичный код нажатой клавиши (например, ASCII-код), передаваемый по нескольким проводам.

    Приоритетный шифратор

    В реальной жизни может случиться так, что нажаты две клавиши одновременно. Обычный шифратор впадет в ступор. Поэтому используют приоритетные шифраторы. Если приходят два сигнала, он выдает код того входа, у которого приоритет выше (обычно это вход с большим номером).

    Мультиплексоры (Multiplexers, MUX)

    Это одно из самых полезных устройств в цифровой электронике. Мультиплексор — это управляемый цифровой переключатель.

    Представьте железнодорожную стрелку. У нас есть несколько путей, по которым идут поезда (данные), но в тоннель (на выход) может заехать только один. Кто решает, какой поезд проедет? Диспетчер (управляющий сигнал).

    У мультиплексора есть:

  • Информационные входы () — данные, которые хотят пройти.
  • Адресные входы () — «пульт диспетчера», выбирающий канал.
  • Один выход ().
  • Логика мультиплексора 2-в-1

    Пусть у нас есть два канала данных и и один управляющий вход (Select).

    * Если , то на выход проходит то, что на входе . * Если , то на выход проходит то, что на входе .

    Уравнение мультиплексора:

    Где — выходной сигнал, и — каналы данных, — управляющий сигнал, — инверсия управления.

    Давайте разберем эту формулу: * Если , то второе слагаемое () обнуляется. Первое слагаемое превращается в , то есть просто . Выход равен . * Если , то первое слагаемое () обнуляется. Второе превращается в . Выход равен .

    !Графическое обозначение мультиплексора 4-в-1, выбирающего один из четырех источников данных

    Мультиплексоры используются повсюду: от переключения источников сигнала внутри процессора до преобразования параллельных данных в последовательные (например, в USB).

    Сумматоры (Adders)

    Теперь перейдем к «математике». Как мы помним из первой статьи, сложение — это основа всей компьютерной арифметики. Устройство, выполняющее сложение двоичных чисел, называется сумматор.

    Полусумматор (Half Adder)

    Самая простая схема, которая складывает два бита и . Вспомним правила сложения: * * * * (0 пишем, 1 в уме)

    У полусумматора два выхода:

  • Сумма (Sum, S) — младший разряд результата.
  • Перенос (Carry, C) — старший разряд (то, что идет «в ум»).
  • Если посмотреть на таблицу истинности сложения, мы увидим знакомые логические функции:

    Для суммы ():

    Где — операция Исключающее ИЛИ (XOR). Она дает 1, если биты разные ( или ), и 0, если одинаковые ( или ).

    Для переноса ():

    Где — операция И (AND). Перенос возникает только тогда, когда оба входа равны 1.

    Полный сумматор (Full Adder)

    Полусумматор хорош, но он не умеет учитывать единицу, которая могла прийти «из ума» от предыдущего разряда. Чтобы складывать многоразрядные числа, нам нужен полный сумматор.

    У него три входа:

  • — бит первого числа.
  • — бит второго числа.
  • (Carry In) — бит переноса из предыдущего разряда.
  • И два выхода:

  • (Sum) — результат.
  • (Carry Out) — перенос в следующий разряд.
  • Полный сумматор можно собрать из двух полусумматоров и одного вентиля ИЛИ.

    !Структура полного сумматора, позволяющего учитывать перенос из предыдущего разряда

    Многоразрядный сумматор

    Чтобы сложить два 8-битных числа (байт + байт), мы берем 8 полных сумматоров и соединяем их в цепочку: выход переноса младшего разряда соединяется со входом следующего разряда.

    Такая схема называется сумматором со сквозным переносом (Ripple Carry Adder). Её главный недостаток — задержка. Старший разряд не может посчитать правильный ответ, пока сигнал переноса не «пробежит» через всю цепочку от младшего бита. В современных процессорах используются более сложные схемы (например, с ускоренным переносом), чтобы избежать этого ожидания.

    Арифметико-логическое устройство (ALU)

    Объединив сумматоры, вычитатели (которые строятся на базе сумматоров и дополнительного кода), мультиплексоры и логические вентили, инженеры создают АЛУ — Арифметико-логическое устройство. Это «сердце» процессора, которое выполняет все вычисления.

    Когда вы пишете в коде a + b, процессор подает числа на входы АЛУ, а мультиплексором выбирает операцию «сложение». Результат появляется на выходе.

    Заключение

    Мы прошли путь от простейших транзисторов и логики до функциональных блоков, способных считать, выбирать данные и управлять памятью.

    Однако у всех рассмотренных сегодня схем есть один общий недостаток: они не помнят прошлого. Как только мы уберем напряжение с входов сумматора, результат исчезнет. Чтобы создать компьютер, нам нужна память.

    В следующей статье мы изучим последовательностные схемы: триггеры, регистры и счетчики — элементы, которые позволяют компьютеру хранить информацию и иметь состояние.

    4. Последовательностные устройства: триггеры, регистры и счетчики

    Последовательностные устройства: триггеры, регистры и счетчики

    В предыдущих статьях мы научились строить схемы, которые умеют складывать, шифровать и выбирать данные. Мы создали сумматоры и мультиплексоры. Но у всех этих устройств был один критический недостаток: у них была «память золотой рыбки». Как только исчезал входной сигнал, результат вычислений мгновенно пропадал.

    Чтобы построить настоящий компьютер, нам нужно научить электронику помнить. Нам нужны устройства, которые могут хранить состояние («0» или «1») столько, сколько потребуется. Такие схемы называются последовательностными (sequential logic), потому что их выход зависит не только от того, что на входе сейчас, но и от того, что было раньше (от последовательности событий).

    Сегодня мы разберем три фундаментальных элемента памяти: триггеры, регистры и счетчики.

    Обратная связь: секрет памяти

    Как заставить логический вентиль запомнить сигнал? В комбинационных схемах (например, И, ИЛИ) сигнал идет только в одну сторону: от входа к выходу.

    Идея, перевернувшая мир электроники, заключается в обратной связи (feedback). Если мы возьмем выход вентиля и подадим его обратно ему же на вход, схема «зациклится» сама на себе и сможет удерживать состояние.

    !Иллюстрация принципа обратной связи, позволяющего схеме удерживать свое состояние

    Триггеры (Flip-Flops)

    Триггер — это простейшая ячейка памяти, способная хранить 1 бит информации. Это «атом» цифровой памяти. Существует несколько видов триггеров, но мы начнем с самого базового.

    RS-триггер (Reset-Set)

    Это простейшее устройство с двумя входами:

  • S (Set) — Установить (записать 1).
  • R (Reset) — Сбросить (записать 0).
  • И двумя выходами:

  • Q — Текущее состояние (хранимый бит).
  • — Инверсный выход (всегда противоположен Q).
  • Логика работы проста: * Подали импульс на S триггер запомнил 1 (выход стал 1). * Убрали импульс с S триггер продолжает хранить 1. * Подали импульс на R триггер сбросился в 0 (выход стал 0). * Убрали импульс с R триггер продолжает хранить 0.

    Математически следующее состояние RS-триггера описывается характеристическим уравнением:

    Где: * — состояние триггера в следующий момент времени. * — сигнал на входе установки (Set). * — инверсия сигнала сброса (Reset). * — текущее состояние триггера. * — логическое ИЛИ. * — логическое И.

    > Запрещенное состояние: Если подать единицу одновременно на входы S и R (), схема войдет в нестабильный режим, так как мы одновременно пытаемся и включить, и выключить её. В классической логике такая комбинация запрещена.

    Синхронизация и тактовый сигнал (Clock)

    В сложных процессорах миллионы триггеров. Если каждый будет переключаться, когда ему вздумается, начнется хаос. Чтобы навести порядок, используется тактовый сигнал (Clock, CLK).

    Это «метроном» процессора, который чередует 0 и 1 с огромной скоростью (например, 3 ГГц — 3 миллиарда раз в секунду). Синхронные триггеры меняют свое состояние только по команде этого сигнала (обычно в момент перехода из 0 в 1 — по переднему фронту).

    D-триггер (Data Flip-Flop)

    RS-триггер неудобен из-за запрещенного состояния и двух входов управления. В реальной жизни чаще всего используется D-триггер.

    У него есть: * Вход D (Data) — данные, которые нужно сохранить. * Вход C (Clock) — тактовый сигнал. * Выход Q.

    Принцип работы: Триггер «фотографирует» значение на входе D в тот момент, когда приходит сигнал C, и запоминает его на выходе Q. В остальное время изменение входа D никак не влияет на выход.

    Уравнение D-триггера:

    Где: * — состояние выхода после тактового импульса. * — состояние входа в момент тактового импульса.

    Именно из D-триггеров состоит оперативная память (SRAM) и регистры процессора.

    !График зависимости выхода триггера от тактового сигнала

    Регистры

    Один триггер хранит 1 бит. Но компьютеры работают с байтами (8 бит) или словами (32/64 бита). Если мы объединим несколько триггеров в группу, мы получим регистр.

    Регистр — это устройство для хранения и преобразования многоразрядных двоичных чисел.

    Параллельный регистр

    Самый простой тип. Это просто набор из D-триггеров, у которых объединен вход Clock.

    * Запись: Мы подаем 8 бит данных на 8 входов, даем один импульс Clock, и все 8 бит мгновенно запоминаются. * Чтение: Данные всегда доступны на выходах .

    Именно такие регистры (EAX, EBX и др.) находятся внутри процессора x86 и используются для сверхбыстрых вычислений.

    Сдвиговый регистр (Shift Register)

    Представьте конвейерную ленту. Сдвиговый регистр умеет перемещать биты внутри себя. Триггеры соединены цепочкой: выход первого идет на вход второго, выход второго — на вход третьего и так далее.

    С каждым тактовым импульсом биты «шагают» на одну позицию вправо или влево.

    Зачем это нужно?

  • Преобразование данных: USB (Universal Serial Bus) передает данные последовательно (бит за битом). Но процессор работает параллельно. Сдвиговый регистр накапливает биты по одному, а потом выдает их все сразу.
  • Арифметика: Сдвиг двоичного числа влево на 1 разряд равносилен умножению на 2. Сдвиг вправо — делению на 2.
  • Пример сдвига влево числа (3):

    Результат: . Мы умножили 3 на 2.

    !Схема сдвигового регистра, преобразующего последовательный код в параллельный

    Счетчики (Counters)

    Счетчик — это устройство, которое подсчитывает количество поступивших на вход импульсов. Результат выдается в виде двоичного кода.

    Если вы посмотрите на электронные часы, таймер микроволновки или спидометр — везде работают счетчики.

    Как это работает?

    Счетчик строится на базе цепочки триггеров. Простейший двоичный счетчик работает так:

  • Младший разряд меняет состояние () с каждым входящим импульсом.
  • Следующий разряд меняется только тогда, когда предыдущий переходит из 1 в 0 (переполнение).
  • Это напоминает одометр в автомобиле: колесико с десятками поворачивается только тогда, когда колесико с единицами сделало полный оборот.

    Применение счетчиков

  • Счетчик команд (Program Counter): Самый важный регистр в процессоре. Он хранит адрес следующей инструкции, которую нужно выполнить. После выполнения команды он увеличивается на 1.
  • Таймеры: Подсчет тактов системных часов для измерения времени.
  • Делители частоты: Если на вход подать 100 Гц, а снимать сигнал со второго триггера счетчика, мы получим 50 Гц. Так работают кварцевые часы.
  • Заключение

    Мы сделали огромный шаг вперед. Теперь наши схемы не просто реагируют на нажатие кнопок, они обладают памятью и чувством времени.

    * Триггеры запоминают биты. * Регистры хранят числа и байты. * Счетчики отслеживают события и управляют ходом программ.

    Вместе с комбинационными схемами (сумматорами и логикой) у нас теперь есть полный набор компонентов для создания настоящего процессора. Но как управлять всем этим оркестром? Как заставить процессор выполнять разные команды? Об этом мы поговорим в следующих статьях курса, когда перейдем к архитектуре ЭВМ.

    5. Синтез цифровых автоматов и организация памяти ЭВМ

    Синтез цифровых автоматов и организация памяти ЭВМ

    В предыдущих статьях мы прошли путь от базовых логических вентилей до последовательностных схем — триггеров и регистров. Мы научились создавать устройства, которые могут считать и хранить отдельные биты информации. Однако, чтобы собрать из этих «кирпичиков» полноценный компьютер, нам не хватает двух важнейших компонентов: «мозга», который будет управлять всеми процессами, и большой памяти для хранения программ и данных.

    В этой статье мы разберем, как проектируются управляющие устройства (цифровые автоматы) и как организована память компьютера на логическом уровне.

    Что такое цифровой автомат?

    Любое сложное цифровое устройство, будь то контроллер стиральной машины или блок управления процессора, можно представить как Конечный Автомат (Finite State Machine — FSM).

    Цифровой автомат — это устройство, которое может находиться в одном из конечного числа состояний. Переход из одного состояния в другое происходит под воздействием входных сигналов и тактовых импульсов.

    Представьте себе турникет в метро. У него есть два состояния:

  • Заблокировано.
  • Разблокировано.
  • Входные сигналы: «Приложена карта» и «Человек прошел». Если турникет заблокирован и мы прикладываем карту, он переходит в состояние «Разблокировано». Если человек прошел, он возвращается в состояние «Заблокировано». Это простейший пример автомата.

    Математическая модель

    Формально автомат описывается набором уравнений. Состояние системы в следующий момент времени зависит от текущего состояния и входных сигналов:

    Где: * — состояние автомата в следующий тактовый момент. * — текущее состояние автомата. * — входной сигнал в текущий момент. * — функция переходов (логика, определяющая поведение).

    !Граф переходов состояний цифрового автомата

    Автоматы Мили и Мура

    В цифровой схемотехнике выделяют два основных типа автоматов, различающихся способом формирования выходного сигнала.

    Автомат Мура (Moore Machine)

    В автомате Мура выходной сигнал зависит только от текущего состояния.

    Где: * — выходной сигнал. * — функция выходов. * — текущее состояние.

    Это более надежный и стабильный тип автомата. Выход меняется синхронно с переключением состояния (по тактовому импульсу). Большинство управляющих устройств в процессорах строятся по принципу Мура.

    Автомат Мили (Mealy Machine)

    В автомате Мили выходной сигнал зависит и от текущего состояния, и от входного сигнала прямо сейчас.

    Где: * — входной сигнал.

    Такие автоматы могут реагировать быстрее (выход меняется сразу при изменении входа, не дожидаясь тактового импульса), но они более склонны к помехам и «гонкам» сигналов.

    Синтез цифрового автомата

    Как инженеры создают такие схемы? Процесс превращения словесного описания («хочу, чтобы лампочка мигала три раза») в схему из транзисторов называется синтезом. Рассмотрим основные этапы.

    1. Словесное описание и граф переходов

    Сначала задачу формулируют словами, а затем рисуют граф (диаграмму), где кружки — это состояния, а стрелки — переходы.

    2. Таблица переходов

    Граф переводят в табличный вид. В строках указывают текущее состояние, в столбцах — входные сигналы, а в ячейках — следующее состояние.

    3. Кодирование состояний

    Триггеры не понимают слов «Состояние А» или «Состояние Б», они понимают только 0 и 1. Каждому состоянию нужно присвоить уникальный двоичный код.

    Если у автомата состояний, то количество необходимых триггеров вычисляется по формуле:

    Где: * — количество состояний. * — необходимое количество бит (триггеров).

    Например, для светофора с 3 состояниями (Красный, Желтый, Зеленый) нам нужно триггера, так как , что достаточно для кодирования 3 состояний (00, 01, 10).

    4. Составление булевых функций

    Используя таблицу переходов и карты Карно (которые мы изучили во второй статье), мы получаем уравнения для входов каждого триггера. Это и есть «прошивка» нашего автомата, реализованная в «железе».

    Организация памяти ЭВМ

    Мы научились управлять вычислениями, теперь разберемся, где хранить данные. Триггеры — это отличная память, но очень дорогая и громоздкая. Сделать из триггеров память для хранения фильма невозможно — чип будет размером с небоскреб.

    Для хранения больших объемов данных используется ОЗУ (Оперативное Запоминающее Устройство) или RAM (Random Access Memory).

    Матричная организация памяти

    Чтобы компактно разместить миллионы ячеек памяти, их выстраивают в виде матрицы (таблицы). Каждая ячейка имеет свой уникальный адрес.

    Представьте память как огромный шкаф с почтовыми ящиками. Чтобы положить письмо в ящик, вам нужно знать его номер (адрес).

    !Матричная структура памяти с дешифраторами строк и столбцов

    Адресация

    Для выбора конкретной ячейки используется дешифратор адреса. Процессор посылает двоичный код адреса, а дешифратор активирует нужную строку и столбец.

    Объем памяти напрямую зависит от разрядности адресной шины (количества проводов для передачи адреса). Зависимость выражается формулой:

    Где: * — общий объем памяти (в битах). * — ширина шины адреса (количество бит в адресе). * — ширина шины данных (разрядность ячейки, обычно 8 бит = 1 байт).

    Например, если у процессора 32-битная шина адреса (), он может адресовать:

    Это и есть те самые 4 Гигабайта, которые были пределом для 32-битных систем.

    Операции чтения и записи

    У памяти есть управляющие сигналы: * WE (Write Enable) — Разрешение записи. Если 1, данные записываются в ячейку. Если 0 — происходит чтение. * CS (Chip Select) — Выбор чипа. Позволяет объединять несколько модулей памяти в один банк.

    Виды полупроводниковой памяти

    RAM (Random Access Memory)

    Память с произвольным доступом. Слово «произвольный» означает, что время доступа к любой ячейке одинаково, независимо от её адреса (в отличие от жесткого диска или магнитной ленты).

  • SRAM (Static RAM): Построена на триггерах. Очень быстрая, но дорогая и занимает много места. Используется в кэш-памяти процессора.
  • DRAM (Dynamic RAM): Построена на конденсаторах. Информация хранится в виде заряда (есть заряд — 1, нет — 0). Конденсаторы быстро разряжаются, поэтому их нужно постоянно «регенерировать» (перезаряжать) тысячи раз в секунду. Это основная оперативная память компьютера.
  • ROM (Read-Only Memory)

    Постоянное запоминающее устройство (ПЗУ). Данные в ней хранятся даже при отключении питания. Используется для хранения BIOS/UEFI и микропрограмм управления.

    Иерархия памяти

    В компьютере используется принцип иерархии, чтобы сбалансировать скорость и стоимость:

  • Регистры процессора: Самые быстрые, но их очень мало (сотни байт).
  • Кэш (L1, L2, L3): Быстрая SRAM, встроенная в процессор (мегабайты).
  • Оперативная память (RAM): Медленнее кэша, но большой объем (гигабайты).
  • Внешняя память (SSD/HDD): Очень медленная, но огромный объем и энергонезависимость (терабайты).
  • Заключение

    Мы разобрали, как синтезируются цифровые автоматы — «мозги», управляющие логикой работы устройств, и как устроена память — «библиотека» для хранения данных.

    Понимание работы конечных автоматов и принципов адресации памяти открывает дверь к пониманию архитектуры микропроцессоров. В следующей части курса мы объединим все полученные знания, чтобы рассмотреть архитектуру фон Неймана и цикл выполнения команды процессором.