Главная страница
Навигация по странице:

  • Входы Выходы Sel 1 Sel 2 Sel 3 O 7 O 6 O 5 O 4

  • кр гаряев. Чарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе. Книга принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании


    Скачать 6.11 Mb.
    НазваниеКнига принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании
    Анкоркр гаряев
    Дата19.10.2022
    Размер6.11 Mb.
    Формат файлаpdf
    Имя файлаЧарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе.pdf
    ТипКнига
    #743064
    страница14 из 28
    1   ...   10   11   12   13   14   15   16   17   ...   28
    Входы
    Выходы
    Sel
    1
    Sel
    2
    Sel
    3
    O
    7
    O
    6
    O
    5
    O
    4
    O
    3
    O
    2
    O
    1
    O
    0
    0 0
    0 0
    0 0
    0 0
    0 0
    Данные
    0 0
    1 0
    0 0
    0 0
    0
    Данные
    0 0
    1 0
    0 0
    0 0
    0
    Данные
    0 0
    0 1
    1 0
    0 0
    0
    Данные
    0 0
    0 1
    0 0
    0 0
    0
    Данные
    0 0
    0 0

    Глава 16. Сборка памяти
    221
    Входы
    Выходы
    Sel
    1
    Sel
    2
    Sel
    3
    O
    7
    O
    6
    O
    5
    O
    4
    O
    3
    O
    2
    O
    1
    O
    0
    1 0
    1 0
    0
    Данные
    0 0
    0 0
    0 1
    1 0
    0
    Данные
    0 0
    0 0
    0 0
    1 1
    1
    Данные
    0 0
    0 0
    0 0
    0
    Полная схема с восемью защелками выглядит таким образом.
    Декодер «3 на 8»
    Ввод данных
    Запись
    Селектор «8 на 1»
    DI
    W
    DO
    Адрес
    D
    7
    D
    6
    D
    5
    D
    4
    D
    3
    D
    2
    D
    1
    D
    0
    O
    7
    O
    6
    O
    5
    O
    4
    O
    3
    O
    2
    O
    1
    O
    0
    Вывод
    Sel
    0
    Sel
    1
    Sel
    2
    Sel
    0
    Sel
    1
    Sel
    2
    Данные
    Вывод данных
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    Важно: три сигнала выборки для дешифратора и селектора являются оди- наковыми (они обозначены словом «адрес» — address, Addr). Подобно почто- вому индексу, этот 3-битный адрес определяет, к какой из восьми однобитных защелок мы обращаемся. На входе сигнал «Адрес» определяет, какая защел- ка сохранит сигнал «Данные» под воздействием сигнала «Запись». На выходе
    (в нижней части схемы) вход «Адрес» управляет селектором «8 на 1» для того, чтобы считать выходной сигнал одной из восьми защелок.
    Эта конфигурация защелок иногда называется памятью с записью/чте-
    нием, но чаще — памятью с произвольным доступом, или произвольной вы-
    боркой (random access memory, RAM). Эта конкретная конфигурация RAM хранит восемь отдельных однобитных значений. Ее можно изобразить сле- дующим образом.

    222
    Код
    DO
    Addr
    0
    Addr
    1
    Addr
    2
    Вывод данных
    Адрес
    Ввод данных
    Запись
    DI
    W
    RAM «8 × 1»
    Устройство называется памятью, потому что оно сохраняет информацию.
    Возможность чтения/записи говорит о том, что вы можете сохранить новое значение в любой защелке (записать значение), а также узнать, что хранится в каждой из защелок (прочитать значение). Термин «произвольный доступ» означает, что запись и считывание информации из защелок могут осуществ- ляться путем изменения входных сигналов «Адрес». Кроме памяти с произ- вольным доступом, существует память с последовательным доступом, при ис- пользовании которой для считывания значения, хранящегося по адресу 101, требуется сначала прочитать значение, хранящееся по адресу 100.
    Описанная выше конфигурация RAM часто называется массивом RAM.
    Этот конкретный массив RAM организован по схеме, иногда сокращенно обо- значаемой «8 × 1» — восемь однобитных значений. Чтобы определить общее количество битов, которые можно сохранить в массиве RAM, нужно перемно- жить эти два числа.
    Массивы RAM можно комбинировать. Например, объединить два мас- сива RAM «8 × 1».
    DO
    Addr
    0
    Addr
    1
    Addr
    2
    Адрес
    Ввод данных
    Ввод данных
    Вывод данных
    Вывод данных
    Запись
    DI
    W
    DO
    Addr
    0
    Addr
    1
    Addr
    2
    DI
    W
    RAM «8 × 1»
    RAM «8 × 1»
    В данном случае входы «Адрес» и «Запись» двух массивов RAM «8 × 1» соединены, поэтому в результате получается массив RAM «8 × 2».

    Глава 16. Сборка памяти
    223
    DO
    1
    Addr
    0
    Addr
    1
    Addr
    2
    DI
    0
    W
    DO
    0
    DI
    1
    Адрес
    Ввод данных
    Запись
    Вывод данных
    RAM «8 × 1»
    Этот массив RAM хранит восемь значений, размер каждого из которых составляет два бита.
    Кроме того, два массива RAM «8 × 1» можно объединить как отдельные защелки, используя селектор «2 на 1» и дешифратор «1 на 2».
    DO
    Addr
    0
    Addr
    1
    Addr
    2
    Addr
    0
    Addr
    1
    Addr
    2
    Вывод данных
    Адрес
    DI
    W
    DO
    DI
    W
    Селектор «2 на 1»
    D
    0
    D
    1
    Дешифратор «1 на 2»
    DO
    0
    DO
    1
    Запись
    Ввод данных
    Выборка
    Sel
    Sel
    RAM «8 × 1»
    RAM «8 × 1»
    Сигнал «Выборка», который подается как на дешифратор, так и на селек- тор, по сути, выбирает один из двух массивов RAM «8 × 1». На самом деле он является четвертой адресной линией. Таким образом, мы имеем дело с масси- вом RAM «16 × 1».

    224
    Код
    Addr
    0
    Addr
    1
    Addr
    2
    W
    DO
    DI
    Addr
    3
    Вывод данных
    Адрес
    Ввод данных
    Запись
    RAM «16 × 1»
    Этот массив RAM хранит 16 значений, размер каждого из которых составля- ет один бит. Количество значений, хранящихся в массиве RAM, напрямую зави- сит от количества входов «Адрес». В отсутствие таких входов (как в случае с од- нобитной и 8-битной защелками) может быть сохранено только одно значение.
    При наличии одного входа «Адрес» можно сохранить два значения. Два входа
    «Адрес» позволяют хранить четыре значения, три входа «Адрес» — восемь, четыре входа — шестнадцать. Такое отношение можно выразить с помощью уравнения:
    Количество значений в массиве RAM = 2
    количество входов «Адрес»
    Я показал, как можно сконструировать небольшие массивы RAM, поэто- му вам нетрудно будет представить гораздо более крупные. Например, такой.
    Addr
    W
    DO
    DI
    10 8
    8
    Адрес
    Ввод данных
    Запись
    Вывод данных
    RAM «1024 × 8»
    Этот массив RAM хранит в общей сложности 8196 бит информации, ко- торые организованы в виде 1024 значений по восемь бит каждое. Этот массив имеет десять входов «Адрес», так как 2 10
    равно 1024, восемь входов и восемь выходов для данных.
    Другими словами, этот массив RAM хранит 1024 байт. Он похож на поч- товое отделение с 1024 абонентскими ящиками. В каждом из них хранится зна- чение размером один байт (которое, правда, может представлять просто спам).
    Одна тысяча двадцать четыре байта — килобайт, и здесь возникает боль- шая путаница. Чаще всего приставка «кило-» (от греческого «тысяча») исполь- зуется в метрической системе. Например, килограмм — это 1000 граммов, ки- лометр — 1000 метров. Однако килобайт составляет 1024 байт, а не 1000 байт.

    Глава 16. Сборка памяти
    225
    Проблема в том, что метрическая система основана на степенях 10, а дво- ичные числа — на степенях 2, и этим системам никогда не сойтись. Степенями
    10 являются 10, 100, 1000, 10 000, 100 000 и т. д., а степенями 2 — 2, 4, 8, 16, 32, 64 и т. д. Не существует степени 10, которая была бы равна некоторой степени 2.
    Однако время от времени эти две системы сближаются. Да, значение
    1000 достаточно близко к значению 1024. Выражаясь математическим языком,
    2 в степени 10 «приблизительно равно» 10 в степени 3:
    2 10
    ≈ 10 3
    В этом соотношении нет ничего волшебного. Оно всего лишь подразуме- вает, что конкретная степень 2 приблизительно равна конкретной степени 10.
    Это совпадение позволяет людям использовать термин «килобайт памяти», подразумевая 1024 байта.
    Килобайт сокращенно обозначается Кбайт (международное обозначе- ние — Kb). Описанный выше массив RAM может хранить 1024 байт, или один килобайт (1 Кбайт).
    Мы не подразумеваем, что в массиве RAM емкостью один килобайт хра- нится 1000 байт. В нем хранится больше тысячи байт, а именно 1024. Чтобы произвести впечатление знающего человека, следует говорить «один килобайт».
    Один килобайт памяти имеет восемь входов и восемь выходов для дан- ных, а также десять входов «Адрес». Поскольку доступ к байтам осуществляет- ся с помощью десяти входов «Адрес», массив RAM хранит 2 10
    байт. Всякий раз, когда добавляем еще один вход «Адрес», мы удваиваем объем памяти. Каждая строка следующей последовательности представляет собой удвоение памяти:
    1 килобайт = 1024 байт = 2 10
    байт ≈ 10 3
    байт;
    2 килобайта = 2048 байт = 2 11
    байт;
    4 килобайта = 4096 байт = 2 12
    байт;
    8 килобайт = 8192 байт = 2 13
    байт;
    16 килобайт = 16 384 байт = 2 14
    байт;
    32 килобайта = 32 768 байт = 2 15
    байт;
    64 килобайта = 65 536 байт = 2 16
    байт;
    128 килобайт = 131 072 байт = 2 17
    байт;
    256 килобайт = 262 144 байт = 2 18
    байт;
    512 килобайт = 524 288 байт = 2 19
    байт;
    1024 килобайт = 1 048 576 байт = 2 20
    байт ≈ 10 6
    байт.
    Обратите внимание: указанные слева количества килобайтов — степени 2.

    226
    Код
    Ту же логику, которая позволяет называть 1024 байт килобайтом, мы мо- жем использовать для того, чтобы назвать 1024 килобайт мегабайтом (при- ставка «мега-» — от греческого «великий»). Мегабайт сокращенно обознача- ется Мбайт (Mbyte, реже MB). Удвоение памяти продолжается:
    1 мегабайт = 1 048 576 байт = 2 20
    байт ≈ 10 6
    байт;
    2 мегабайта = 2 097 152 байт = 2 21
    байт;
    4 мегабайта = 4 194 304 байт = 2 22
    байт;
    8 мегабайт = 8 388 608 байт = 2 23
    байт;
    16 мегабайт = 16 777 216 байт = 2 24
    байт;
    32 мегабайта = 33 554 432 байт = 2 25
    байт;
    64 мегабайта = 67 108 864 байт = 2 26
    байт;
    128 мегабайт = 134 217 728 байт = 2 27
    байт;
    256 мегабайт = 268 435 456 байт = 2 28
    байт;
    512 мегабайт = 536 870 912 байт = 2 29
    байт;
    1024 мегабайт = 1 073 741 824 байт = 2 30
    байт ≈ 10 9
    байт.
    Одна тысяча двадцать четыре мегабайта составляют гигабайт (приставка
    «гига-» — от греческого «гигантский»), который обозначается буквами Гб (GB).
    Один терабайт (от греческого «чудовищный») равен 2 40
    байт (приблизи- тельно 10 12
    ), или 1 099 511 627 776 байт. Терабайт обозначается буквами Тб (TB).
    Килобайт равен примерно тысяче байтов, мегабайт — миллиону, гига- байт — миллиарду, терабайт — триллиону байтов.
    Петабайт равен 2 50
    , или 1 125 899 906 842 624 байт (приблизительно 10 15
    , или квадриллион), а экзабайт равен 2 60
    , или 1 152 921 504 606 846 976 байт (при- близительно 10 18
    , или квинтиллион).
    Примите к сведению, что домашние компьютеры, купленные в период написания этой книги (1999 год), обычно имели 32 или 64 (иногда 128) мега- байта памяти с произвольным доступом *. (Заметьте, я говорю о памяти RAM, а не о емкости жестких дисков.) Это 33 554 432 байт, или 67 108 864 байт, или
    134 217 728 байт.
    Разумеется, в разговоре люди используют сокращения. Обладатель 65 536 бай- тов памяти скажет: «У меня 64 килобайта (и я гость из далекого 1980 года)».
    Пользователь компьютера с памятью 33 554 432 байт уточнит: «У меня 32 мега».
    А везунчик, имеющий 1 073 741 824 байт памяти, подчеркнет: «У меня целый гиг».
    * Современные игровые ПК могут иметь вплоть до 64 гигабайт (и даже более) оперативной памяти. Прим. науч. ред.

    Глава 16. Сборка памяти
    227
    Иногда упоминают килобиты или мегабиты (обратите внимание на ис- пользование слова «биты» вместо «байты»), но это бывает редко. Почти всегда, когда речь идет о памяти, сообщают количество байтов, а не битов. (Чтобы преобразовать байты в биты, нужно умножить их на 8.) Обычно когда в раз- говоре упоминаются килобиты или мегабиты, они имеют отношение к ско- рости передачи данных по кабелю и используются в таких словосочетаниях, как «килобиты в секунду» и «мегабиты в секунду». Например, когда речь идет о модеме 56 K, имеется в виду именно 56 килобит в секунду, а не килобайт; технология Gigabit Ethernet обеспечивает передачу одного гигабита инфор- мации в секунду и т. д.
    Теперь, научившись собирать массивы RAM любого нужного размера, постараемся не сильно увлекаться. Давайте просто представим массив RAM емкостью 65 536 байт.
    RAM
    64 Kбайт
    ×
    8
    Addr
    W
    DO
    DI
    16 8
    8
    Вывод данных
    Адрес
    Ввод данных
    Запись
    Почему 64 килобайт? Почему не 32 килобайт или не 128 килобайт? Пото-
    му что 65 536 — хорошее круглое число. Оно равно 2 16
    . Этот массив RAM имеет
    16-битный адрес. Другими словами, этот адрес равен двум байтам. В шестнад- цатеричной системе счисления значение этого адреса находится в диапазоне от 0000h до FFFFh.
    Ранее я намекнул на то, что объем памяти, равный 64 килобайт, был ха- рактерен для персональных компьютеров, купленных в 1980-х годах, хотя эта память собиралась и не из телеграфных реле. Удастся ли сконструировать та- кое устройство, используя реле? Надеюсь, вы не рассматриваете такую возмож- ность всерьез. Наша конструкция предполагает использование девяти реле для каждого бита памяти, поэтому для создания массива RAM 64 Kб × 8 потребу- ются почти пять миллионов реле.
    Нам также не помешает пульт управления, позволяющий пользоваться этой памятью: записывать значения или считывать их. Такой пульт должен иметь 16 переключателей для указания адреса, восемь переключателей для за- дания 8-битного значения, которое мы хотим записать, еще одного переклю- чателя для самого сигнала записи и восемь лампочек для отображения опре- деленного 8-битного значения.

    228
    Код
    1 0
    1 0
    Пульт управления RAM 64 Кб
    Запись
    Перехват
    1 0
    1 0
    A
    15
    A
    14
    A
    13
    A
    12
    A
    11
    A
    10
    A
    9
    A
    8
    A
    7
    A
    6
    A
    5
    A
    4
    A
    3
    A
    2
    A
    1
    A
    0
    D
    7
    D
    6
    D
    5
    D
    4
    D
    3
    D
    2
    D
    1
    D
    0
    Все переключатели изображены в положении «Выключено» (0). Я также добавил переключатель с надписью «Перехват». Цель этого переключателя — позволить другим схемам использовать ту же память, к которой подключен пульт управления. Когда этот переключатель установлен в положение 0 (как показано на рисунке), остальные переключатели пульта управления ничего не делают. Однако когда переключатель установлен в положение 1, управление памятью осуществляется исключительно с помощью пульта.
    Для создания переключателя «Перехват» потребуется набор селекторов
    «2 на 1», а именно 25 штук: шестнадцать — для сигналов «Адрес», восемь — для переключателей, позволяющих вводить данные, и еще один — для пере- ключателя «Запись». Ниже показана схема.
    V
    RAM
    64 Кбайт
    ×
    8
    Addr
    8 лампочек
    W
    DO
    DI
    16 8
    8
    Вывод данных
    25 селекторов «2 на 1»
    8 16 8
    16 25 переключателей
    Адрес
    Ввод данных
    Запись
    16 8
    Перехват
    Sel

    Глава 16. Сборка памяти
    229
    Когда переключатель «Перехват» разомкнут (как показано на рисунке), на входы массива RAM 64 Кбайт × 8 «Адрес», «Данные» и «Запись» поступа- ют сигналы извне, как показано над левым верхним углом блока селекторов
    «2 на 1». Когда переключатель «Перехват» замкнут, сигналы на входы массива
    RAM «Адрес», «Данные» и «Запись» поступают от переключателей на пульте управления. В любом случае сигналы «Вывод данных» из массива RAM посту- пают на восемь лампочек и, вероятно, куда-нибудь еще.
    Массив RAM 64 Kбайт × 8 с таким пультом управления можно изобра- зить следующим образом.
    Панель управления
    RAM
    64 Кбайт
    ×
    8
    Addr
    W
    DO
    DI
    16 8
    8
    Адрес
    Ввод данных
    Запись
    Вывод данных
    Когда переключатель «Перехват» замкнут, вы можете использовать 16 пе- реключателей «Адрес» для выбора любого из 65 536 адресов. Лампочки пока- зывают 8-битное значение, которое в настоящий момент хранится в памяти по этому адресу. Вы можете использовать восемь переключателей «Данные» для задания нового значения, а записать это значение в память с помощью переключателя «Запись».
    Массив RAM 64 Kб × 8 и пульт управления, безусловно, помогут вам от- следить любое из 65 536 8-битных значений, которое может понадобиться.
    Одна ко эта конструкция также позволяет некоторым другим схемам исполь- зовать значения, которые мы сохранили в памяти, и записывать в нее новые.
    Есть еще одна важная деталь, которую необходимо знать о памяти: когда в главе 11 вы познакомились с концепцией вентилей, я перестал рисовать от- дельные реле, из которых состоят эти вентили. В частности, с тех пор я боль- ше не указывал на схемах, что каждое реле подключено к какому-то источнику питания. Всякий раз при срабатывании реле электричество течет через катуш- ку электромагнита и удерживает металлический контакт на месте.

    Код
    Итак, у вас есть массив RAM 64 Kб × 8, весь объем которого заполнен вашими любимыми байтами. Что произойдет, если вы отключите его от ис- точника питания? Все электромагниты потеряют свои магнитные свойства, и с громким щелчком все контакты реле вернутся в свое исходное положение.
    А содержимое этой памяти? Оно исчезнет навсегда!
    Вот почему память с произвольным доступом также называется энергоза-
    висимой. Для хранения содержимого ей требуется постоянное энергоснабжение.

    231
    Глава 17
    Автоматизация
    Человек часто демонстрирует удивительную находчивость и усердие, но в то же время ему присуща страшная лень. Всем известно, что люди не любят работать.
    Наше отвращение к работе так сильно, а изобретательность настолько выра- жена, что мы готовы потратить бесчисленные часы на проектирование и сбор- ку устройств, которые могли бы урезать наш рабочий день на несколько ми- нут. И мало что может доставить человеку больше удовольствия, чем видéние, в котором он расслабленно качается в гамаке, наблюдая, как его новенькое изобретение косит газон. Боюсь, на следующих страницах вы не найдете чер- тежей авто матической газонокосилки. Однако в этой главе будет описан ряд устройств в порядке возрастания сложности, позволяющих автоматизиро- вать процесс сложения и вычитания чисел. Понимаю, что подобное заявление вряд ли поразит вас. К концу этой главы мы соберем машину, которая сможет решить практически любую задачу, предполагающую выполнение сложения и вычитания, а это действительно весьма обширный класс.
    Разумеется, чем устройство заковыристее, тем оно сложнее, поэтому часть информации может показаться трудной. Никто не будет винить вас, если про- пустите излишне сложные фрагменты. Время от времени у вас будет возникать желание взбунтоваться и навсегда отказаться от попыток решить математиче- скую задачу с помощью электрических и механических устройств. Обязатель- но следите за моей мыслью, потому что к концу главы мы изобретем машину, которую с полным правом можно назвать компьютером.
    Последний рассмотренный нами сумматор был описан в главе 14. Эта вер- сия включала 8-битную защелку, где накапливалась общая сумма чисел, вве- денных с помощью набора из восьми переключателей.

    232
    Код
    8
    V
    8
    V
    Clr
    Clk
    8
    Лампочки
    Сложить
    CI
    8-битный сумматор
    8-битная защелка
    Переключатели
    8
    Очистка
    B
    A
    S
    DO
    DI
    Как вы помните, 8-битная защелка использует триггеры для хранения
    8-битного значения. Чтобы использовать это устройство, на мгновение на- жмите кнопку «Очистка» для обнуления содержимого защелки. Затем с по- мощью переключателей введите первое число. Сумматор просто прибавит его к нулевому значению на выходе защелки, поэтому результатом будет введен- ное число. При нажатии кнопки «Сложить» это число сохранится в защелке и отобразится лампочками. Теперь с помощью переключателей введите второе число. Сумматор прибавит его к уже сохраненному в защелке.
    Нажатие кнопки «Сложить» снова приводит к сохранению общей суммы в защелке и ее отображению с помощью лампочек. Так вы можете сложить множество чисел, отображая общую сумму, которая, правда, ограничена чис- лом 255 при использовании восьми лампочек.
    Когда я продемонстрировал эту схему в главе 14, вам было известно только о защелках со срабатыванием по уровню. Для сохранения данных в такой за- щелке нужно, чтобы значение входного сигнала Clk стало равным 1, а затем 0.
    Пока вход Clk — 1, сигналы на входах защелки для данных могут меняться, и эти изменения будут влиять на ее содержимое. Чуть позже я познакомил вас с за- щелками со срабатыванием по фронту, которые сохраняют данные в краткий промежуток времени, пока входной сигнал Clk изменяется с 0 на 1. Защел ки со срабатыванием по фронту немного проще, поэтому в этой главе при описа- нии защелок буду предполагать, что речь идет о защелках именно этого типа.
    Защелка, применяемая для хранения текущего значения суммы, называ- ется аккумулятором или накопителем. Однако далее мы увидим, что аккуму- лятору нет необходимости просто накапливать сумму. Часто это защелка, где

    Глава 17. Автоматизация
    233
    сначала сохраняется одно число, а затем результат сложения или вычитания из него другого числа.
    У показанной выше счетной машины существует серьезный недостаток, который сразу бросается в глаза. Допустим, существует список из 100 двоич- ных чисел, которые вы хотите сложить. Вы садитесь перед сумматором, стара- тельно вводите каждое число и накапливаете сумму. По окончании процедуры обнаруживаете, что несколько чисел в списке были неправильными. В этом случае вам придется начинать все сначала.
    А может, и нет. В предыдущей главе мы использовали около пяти миллио- нов реле для создания массива RAM емкостью 64 килобайта. Кроме того, мы собрали пульт управления, который позволяет замкнуть переключатель «Пе- рехват» и фактически перехватить управление массивом RAM, чтобы произ- водить запись и чтение данных с помощью переключателей.
    DI
    8
    Addr
    W
    DO
    16 8
    Адрес
    Ввод данных
    Запись
    Панель управления
    Вывод данных
    RAM
    64 Кбайт
    ×
    8
    Если бы вы ввели все 100 двоичных чисел в этот массив RAM, а не напря- мую в сумматор, то сделать несколько исправлений было бы проще.
    Итак, теперь перед нами стоит задача подключить массив RAM к сум- матору, аккумулирующему итоговое значение. Очевидно, что вместо сигна- лов от переключателей на вход сумматора можно подать выходные сигналы массива RAM (DO), однако легко упустить тот факт, что 16-битный счетчик
    (вроде собранного в главе 14) способен управлять адресными сигналами. Сиг- налы массива RAM «Ввод данных» (DI) и «Запись» в этой схеме отсутствуют за ненадобностью.

    234
    Код
    Clk
    Clr
    8-битная защелка
    8
    Лампочки
    Очистка
    Addr
    DO
    16 8
    16-битный счетчик
    Clk
    Clr
    Осциллятор
    8
    V
    8
    CI
    8-битный сумматор
    Пульт управления
    B
    A
    S
    DI
    DO
    RAM
    64 Кбайт × 8
    Разумеется, это не самое простое счетное устройство. Перед его исполь- зованием нужно замкнуть переключатель «Очистка». При этом содержимое защелки обнуляется, а для выходного сигнала 16-битного счетчика задает- ся значение 0000h. Затем вы замыкаете переключатель «Перехват» на пульте управления массивом RAM, после чего можете записать в память набор под- лежащих сложению 8-битных чисел, начиная с адреса 0000h. Если собираетесь суммировать 100 чисел, сохраните их в ячейках памяти с адресами 0000h–0063h.
    Кроме того, вы должны записать значение 00h во все неиспользуемые ячейки памяти. Затем можете разомкнуть переключатель «Перехват» на пульте управ- ления массивом RAM, чтобы снова передать сумматору управление памятью, а также разомкнуть переключатель «Очистка». Теперь можно расслабиться и любоваться мигающими лампочками.
    Вот что происходит при совершении вышеописанных действий: при пер- вом размыкании переключателя «Очистка» текущим адресом массива RAM яв- ляется 0000h. Восьмибитное значение, сохраненное в ячейке по этому адресу, подается на один из входов сумматора. На другой вход подается значение 00h, поскольку содержимое защелки также обнулено.
    Осциллятор генерирует тактовый сигнал, или синхросигнал, который бы- стро колеблется между значениями 0 и 1. После размыкания переключателя

    Глава 17. Автоматизация
    235
    «Очистка» при каждом изменении синхросигнала с 0 на 1 одновременно происхо- дят две вещи: в защелке сохраняется сумма из сумматора, а значение 16-битного счетчика увеличивается на единицу, то есть происходит обращение к следую- щему адресу в массиве RAM. При первом изменении значения синхросигнала с 0 на 1 после размыкания переключателя «Очистка» в защелке сохраняется первое число, а значение счетчика изменяется на 0001h. Во второй раз в за- щелке сохраняется сумма первого и второго чисел, а значение счетчика изме- няется на 0002h. И так далее.
    Разумеется, здесь я делаю некоторые допущения. Прежде всего предпола- гается, что частота колебаний осциллятора достаточно низкая, чтобы осталь- ные компоненты схемы успевали сработать. При каждом изменении значения синхросигнала одни многочисленные реле должны активировать другие, что- бы на выходе сумматора появилось значение суммы.
    Одна из проблем этой схемы в том, что мы не можем остановить ее рабо- ту. В какой-то момент лампочки перестанут мигать потому, что в оставшихся ячейках памяти хранится значение 00h. Тогда вы сможете считать двоичную сумму. Когда счетчик достигнет значения FFFFh, он обнулится (подобно одо- метру автомобиля), и автоматический сумматор снова начнет прибавлять чис- ла к полученной ранее сумме.
    У этого сумматора есть и другие недостатки. Он способен производить только сложение 8-битных чисел. Мало того, что в массиве RAM нельзя сохра- нить число больше 255, — сама сумма также ограничена значением 255. Кро- ме того, наш сумматор не способен производить вычитание, хотя вы можете выразить отрицательные числа с помощью дополнения до двух, в случае чего сумматор будет обрабатывать числа только в диапазоне от –128 до 127. Очевид- но, что для суммирования больших значений (например, 16-битных) требуется удвоить ширину массива RAM, сумматора и защелки, а также добавить еще во- семь лампочек. Однако к таким инвестициям вы можете оказаться не готовы.
    Конечно, я бы даже не упомянул об этих проблемах, если бы не был уве- рен, что они решаемы. Осложнение, на котором я хотел бы сосредоточить ваше внимание в первую очередь, заключается в другом. Что, если вас не интересует одна сумма 100 чисел и вы хотите использовать сумматор для сложения 50 пар чисел и получения 50 разных сумм? Что, если вам нужна машина, способная складывать числа группами по два, десять и т. д., а также предоставлять удоб- ный доступ к результатам своей работы?
    Показанный ранее автоматизированный сумматор отображает текущую сумму с помощью набора лампочек, подключенных к защелке. Такая схема не по- дойдет, если вы решите сложить 50 пар чисел, чтобы получить 50 разных сумм.
    Вместо этого вы, вероятно, захотите, чтобы результаты сохранялись в массиве

    236
    Код
    RAM. Тогда вы можете использовать пульт управления памятью для проверки результатов в удобное для вас время. Специально для этой цели такой пульт управления предусматривает дополнительный набор лампочек.
    Получается, мы можем избавиться от лампочек, подключенных к защел- ке. Вместо этого выход защелки необходимо подключить ко входу DI массива
    RAM для записи сумм в память.
    Clk
    Clr
    Clk
    Clr
    8
    Addr
    DO
    16 8
    8
    CI
    DI
    8
    W
    B
    A
    S
    DO
    DI
    Пульт управления
    16-битный счетчик
    8-битный сумматор
    8-битная защелка
    RAM
    64 Кбайт × 8
    На этой схеме отсутствуют некоторые другие компоненты сумматора, в частности осциллятор и переключатель «Очистка». Я убрал их, поскольку уже не столь очевидно, откуда на входы счетчика и защелки поступают сиг- налы Clr и Clk. Более того, теперь, когда мы задействовали входы DI массива
    RAM, нам нужен способ управления его сигналом «Запись».
    Давайте на мгновение оставим схему и сосредоточимся на стоящей перед нами задаче. Итак, мы хотим сконструировать сумматор, возможности кото- рого не ограничиваются сохранением текущей суммы складываемых чисел, хотим полностью контролировать количество слагаемых, а также количество разных сумм, сохраняемых в памяти для последующего изучения.
    Предположим, нам требуется сложить три числа, потом два, а затем еще три. Мы могли бы сохранить эти числа в массиве RAM, начиная с адреса 0000h, чтобы содержимое памяти выглядело следующим образом.

    Глава 17. Автоматизация
    237 27h
    A2h
    18h
    1Fh
    89h
    33h
    2Ah
    55h
    0000h:
    0004h:
    0007h:
    Первая сумма записывается сюда
    Вторая сумма записывается сюда
    Третья сумма записывается сюда
    Таким образом я буду представлять раздел памяти. Прямоугольники — это ячейки памяти. Каждый байт находится в ячейке. Адрес ячейки указан слева.
    Нет необходимости указывать все адреса, поскольку они идут по порядку, и мы всег да можем выяснить, какой адрес соответствует той или иной ячейке. При- веденные справа комментарии указывают, что сумматор должен сохранить три суммы в пустых ячейках. (Несмотря на то что в этих прямоугольниках ниче- го нет, ячейки памяти необязательно пустые. В памяти всегда что-то содер- жится, даже если это просто случайные данные. Правда, в настоящий момент в ней нет ничего полезного.)
    Знаю, вам не терпится попрактиковаться в сложении шестнадцатерич- ных чисел и самостоятельно заполнить пустые прямоугольники. Однако цель такой демонстрации не в этом. Нужно, чтобы автоматизированный сумматор сделал всю работу за нас.
    Первая версия сумматора выполняла единственное действие — сложение содержимого ячейки памяти со значением в 8-битной защелке, которую я на- звал аккумулятором. Теперь необходимо, чтобы сумматор выполнял четыре
    различных действия. Для начала суммирования потребуется, чтобы сумматор передал байт из памяти в аккумулятор.
    Назовем эту операцию загрузкой. Вторая операция — сложение байта из па- мяти с содержимым аккумулятора, третья — сохранение в памяти суммы из акку- мулятора. В конце нам нужно каким-то образом остановить работу сумматора.
    Давайте подробно распишем действия, которые должен выполнить сум- матор в данном конкретном примере:

    238
    Код
    ȣ загрузить значение из ячейки 0000h в аккумулятор;
    ȣ сложить значение из ячейки 0001h со значением в аккумуляторе;
    ȣ сложить значение из ячейки 0002h со значением в аккумуляторе;
    ȣ сохранить содержимое аккумулятора в ячейке 0003h;
    ȣ загрузить значение из ячейки 0004h в аккумулятор;
    ȣ сложить значение из ячейки 0005h со значением в аккумуляторе;
    ȣ сохранить содержимое аккумулятора в ячейке 0006h;
    ȣ загрузить значение из ячейки 0007h в аккумулятор;
    ȣ сложить значение из ячейки 0008h со значением в аккумуляторе;
    ȣ сложить значение из ячейки 0009h со значением в аккумуляторе;
    ȣ сохранить содержимое аккумулятора в ячейке 000Ah;
    ȣ остановить работу сумматора.
    Обратите внимание: как и в исходной версии сумматора, адресация байтов памяти происходит последовательно, начиная с ячейки 0000h. Исходный сумма- тор просто прибавлял содержимое ячейки памяти по этому адресу к содержи- мому аккумулятора. В некоторых случаях это действие по-прежнему уместно.
    Однако иногда нам требуется загрузить значение из памяти непосредственно в аккумулятор или сохранить содержимое аккумулятора в памяти. После вы- полнения всех этих операций мы хотим, чтобы сумматор прекратил работу и можно было бы проверить содержимое памяти.
    Как это реализовать? Важно понимать, что мы не можем просто записать в память кучу чисел и ожидать, что сумматор догадается, что с ними делать.
    Для каждого числа в массиве RAM необходимо предусмотреть некий число- вой код, соответствующий операциям «Загрузка», «Сложение», «Сохранение» и «Остановка».
    Вероятно, проще всего (и, разумеется, затратнее) хранить эти коды в от- дельном массиве RAM. Доступ к этому второму массиву осуществляется одно- временно с доступом к исходному массиву. Однако вместо слагаемых он будет содержать коды, указывающие на то, что должен сделать сумматор с содержи- мым соответствующей ячейки исходного массива RAM. Исходный массив мож- но обозначить словом «Данные», а новый массив — словом «Код».

    Глава 17. Автоматизация
    239
    DO
    8
    Addr
    DO
    8
    «Код»
    «Данные»
    8 16
    DI
    Addr
    W
    16-битный счетчик
    Пульт управления
    Пульт управления
    RAM
    64 Кбайт × 8
    RAM
    64 Кбайт × 8
    Мы уже выяснили, что наш новый сумматор должен записывать суммы в исходный массив «Данные». Однако в новый массив «Код» значения будут сохраняться только при помощи пульта управления.
    Нам нужны четыре кода для обозначения четырех действий, которые дол- жен выполнять новый сумматор. Мы можем назначить этим действиям любые коды, например следующие.
    1   ...   10   11   12   13   14   15   16   17   ...   28


    написать администратору сайта