Главное Свежее Вакансии   Проекты
Комментируемое:
86 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

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

ОглавлениеНачалоЭлементарная ячейка памятиРегистрДекодер и оперативная память (скоро)Арифметико-логическое устройство (скоро)

3. Регистр


Биты и байты


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

Первая лампа

Вторая лампа

Выключена

Выключена

Выключена

Включена

Включена

Выключена

Включена

Включена

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

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


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


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


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


Энейблер


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


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


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


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


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


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


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


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


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


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

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


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

Регистр


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


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


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


Источники


  1. Чарльз Петцольд «Код — тайный язык информатики»
  2. J Clark Scott «But How Do IT Know»
  3. Logisim — программа для симуляции логических схем (www.cburch.com/logisim/)

Источник

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Первые Новые Популярные
Комментариев еще не оставлено
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.