Регистр — Проектируем свой компьютер, часть 3

Регистр — Проектируем свой компьютер, часть 3

Оглавление

  1. Начало
  2. Элементарная ячейка памяти
  3. Регистр
  4. Декодер и оперативная память
  5. Арифметико-логическое устройство

3. Регистр

Биты и байты

Элементарная ячейка памяти может иметь два состояния. Количество информации, которое может хранить эта ячейка называют бит. Понятие бит можно применить к любой вещи, которая может пребывать в двух состояниях. Например, пешеходный светофор показывает либо зеленый цвет, либо красный. Лампочка может быть либо включена, либо выключена. А если у нас, например, две лампочки? Они уже могут хранить два бита. И могут пребывать уже в четырех состояниях:

Первая лампа

Вторая лампа

Выключена

Выключена

Выключена

Включена

Включена

Выключена

Включена

Включена

Три бита могут иметь уже 8 состояний, четыре – 16 и т.д. Что бы посчитать можно использовать формулу O = 2^N где N – количество битов, а O – количество состояний, которые они могут иметь. Пользоваться битами не всегда удобно (как мерить большие расстояния в миллиметрах), поэтому люди ввели термин байт – который как правило означает 8 битов. Один байт может иметь в 2^8 = 256 состояний.

Храним один байт

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

Храним один байт 

S, как мы помним, включает либо выключает возможность записи, а на I мы подаем то значение, которое хотим записать. Запишем, например, “01110001”.

Запись значения

Теперь абстрагируемся от внутреннего строения байта и превратим его в отдельный блок:

Блок

Энейблер

Информацию, которую мы храним в таком блоке будет использоваться в других частях компьютера. Но если у нас есть несколько таких блоков, то они могут конфликтовать друг с другом. Нам нужна своеобразная затворка: информация изначально хранится в рамках самого запоминающего блока, и не выходит за его пределы. Но если она нам, вдруг, потребовалась – мы открываем затворку, используем эту информацию и после этого снова закрываем. Такую затворку мы будем называть “энейблер” (от английского Enable – Активировать). Ее можно сделать, используя AND-гейты.

AND-гейты

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

Схема с энейблером

Блок энейблера выглядит следующим образом:

Блок энейблера

Буферный гейт

Как мы уже говорили, компьютер оперирует двумя типами сигналов, и мы их обозначаем как ноль и единица. Но существует также такая вещь как отсутствие сигнала. То есть провод, который обычно несет в себе ноль или единицу может помимо этого не нести НИЧЕГО. Рассмотрим такую ситуацию.

Буферный гейт

Предположим, что гейт на выходе имеет единицу, какое значение будет нести провод напротив выхода гейта? Он не будет нести никакого значения: ни ноль, ни единицу, поскольку физически отделен от выхода гейта. И также у нас есть гейт, который позволяет симулировать такого рода разрыв в какой-либо части провода. Его мы будет назвать буферным гейтом.

Часть буферного гейта

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

Работа буферного гейта

В какой ситуации может пригодиться подобный гейт? Рассмотрим такой случай

Схема

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

Добавление буферного гейта

Пока на нижнем входе обоих буферных гейтов нули они ведут себя как разрыв и конфликта значений не возникает. Если нам необходимо пропустить информацию с NAND-гейта – мы подаем единицу на нижний вход нижнего буферного гейта. Если с AND-гейта мы подаем единицу на нижний вход верхнего буферного гейта. Таким образом провод каждый раз несет сигнал только с одного гейта и конфликтов не возникает.

Давайте теперь немного изменим энейблер.

Добавление энейблера

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

Регистр

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

Запоминающий блок

На вход I мы подаем значения, которые хотим записать, на входе S включаем либо выключаем возможность для записи. От входа E зависит доступность информации: если на E подается единица, то информация, хранимая регистром, выдается на входе, если ноль, то информация замкнута исключительно внутри регистра, а сам регистр не выдает вовне никакого сигнала.

Пример работы

Теперь абстрагируемся от внутреннего устройства регистра и будем рассматривать его как единый блок.

Регистр как блок

Источники

  • Чарльз Петцольд “Код – тайный язык информатики”
  • J Clark Scott “But How Do IT Know”
  • Logisim – программа для симуляции логических схем (www.cburch.com/logisim/)
Телефон: +7 499 444 17 50 | 8 800 444 17 50 бесплатно по России | E-mail: school@codeby.email
Все курсы Партнерам Возврат Контакты