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

Любознайкин — Скажи мне, Незнайкин, чувствуешь ли ты сегодня себя в хорошей форме?

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

Л. — Для начала я научу тебя считать… по двоичной системе счисления.

Н. — А я полагал, что прошлый раз мы рассмотрели все связанные со счетом вопросы.

Л. — Тогда мы ознакомились с электронными решениями, а теперь нам предстоит заняться арифметикой.

Н. — Уф!

Л. — Не беспокойся, ты увидишь, что это очень просто Знаешь ли ты точно, что означает число 385?

Н. — Разумеется, 385 показывает, что число состоит из трех сотен, восьми десятков и пяти единиц.

Л. — Совершенно верно. Мы пользуемся десятичной системой счисления и поэтому можем сказать, что названное число представляет собой следующее выражение: трижды взятый квадрат основания (102) плюс 8 раз взятое основание в степени 1 (101), плюс пять единиц (100), т. е. 385 = 3·102 + 8· 101 + 5·100.

А теперь представь себе, что в качестве основания для счисления мы вместо 10 возьмем 2. Тогда достаточно пользоваться только двумя цифрами: 0 и 1. Как в этих условиях ты обозначишь количество, которое в десятичной системе счисления обозначается цифрой 2?

Н. — Я совсем не вижу выхода — ведь я могу пользоваться только цифрами 1 и 0.

Л. — И тем не менее это очень просто. Мы запишем это число в виде 1, после которой следует 0. В самом деле, наше число равно основанию 2 в степени 1 плюс нуль единиц. Поэтому его следует записать, как 1, после которой следует нуль.

Н. — Как же так! Ты написал 10 и говоришь, что это 2!

Л. — Я не написал 10, я написал 1 (единицу), после которой следует нуль. Теперь, когда мы отказались от десятичной арифметики и перешли на двоичную, это число уже не означает десять и читать его нужно не как десять, а как «один, нуль». А как в двоичной системе ты запишешь число, которое в десятичной системе обозначается цифрой 3?

Н. — Я несколько не уверен, но все же попробую. Раз это число представляет собой один раз взятое основание 2 в степени 1 плюс единица, то мне представляется, что его нужно записать в виде двух единиц, стоящих одна за другой.

Л. — Ты совершенно прав. А как записать число 4?

Н. — Не представляю.

Л. — И тем не менее это просто; число 4 не что иное как основание в квадрате. Поэтому это число нужно записать в виде 1, после которой следуют два нуля, чтобы показать, что оно представляет собой один раз взятое основание в квадрате, плюс нуль оснований в степени 1, плюс нуль единиц, т. е. 4 = 22 + 0·21 + 0·20.

Н. — Твоя двоичная арифметика не представляется мне выдающимся достижением. Нужно целых три цифры, чтобы написать число 4… Результат скорее стоит назвать плачевным.

Преобразование и арифметические действия с двоичными числами

Л. — He торопись с выводами, дорогой Незнайкин. Несомненно в двоичной системе счисления требуется большее, чем в привычной нам десятичной, количество цифр. В среднем для написания одного и того же числа нужно в 3 раза больше цифр. Но в двоичных числах используются лишь нули и единицы, что значительно упрощает действия с этими числами. Как ты, например, переведешь на десятичный язык написанное мною по двоичной системе число 1 101 101?

Н. — Для начала я постараюсь не попасть в поставленную тобой ловушку и не скажу, что это один миллион сто одна тысяча сто один. А теперь я начну справа, полагая, что так легче справиться с поставленной задачей. Написанное число, как мы видим, содержит единицу, но оно не содержит основания, потому что его вторая справа цифра нуль; в то же время число содержит основание в квадрате, т. е. 4, и основание в кубе, потому что и третья и четвертая справа цифры — единицы. Затем можно сказать, что число не содержит основания в четвертой степени (это выражение равно 16), но содержит основание в пятой степени (т. е. 32) и основание в шестой степени (т. е. 64). Следовательно, написанное тобою число равно сумме названных чисел, а именно 64, 32, 8, 4 и 1; и на десятичном языке его следует назвать 109.

Л. — Превосходно, Незнайкин, ты прекрасно преобразовал это число. А сможешь ли ты теперь сделать сложение по правилам двоичной арифметики?

Н. — Вероятно, это довольно сложно, но я тем не менее готов попробовать.

Л. — Хорошо, вот тебе числа для сложения

Для облегчения твоей работы я над каждой колонкой расположил маленькие буковки: а обозначает единицы, b — двойки, с — четверки, d — восьмерки, е — шестнадцатки (прости мне этот неологизм, несколько напоминающий десятки), f — тридцать-двойки, g — шестьдесят-четверки и h — сто-двадцать-восьмерки. Теперь можно начинать.

Н. — Возьмусь за дело. Предполагаю, что здесь поступают, как в десятичной арифметике. Не так ли?

Л. — Совершенно верно, только в двоичной арифметике элементарное сложение цифр производится по другим правилам.

Н. — Так, смело вперед. В колонке единиц, обозначенной буквой а, мы имеем 1 вверху и нуль внизу. Я естественно предполагаю, что нуль плюс 1 дает 1 и записываю полученный результат под чертой. Правильно?

Л. — Очень хорошо, но сознайся, что этот случай был не очень сложным.

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

Л. — Но это самый классический случай, он настолько прост, что проще не бывает. Какой бы арифметикой мы ни занимались, для меня нуль плюс нуль всегда дает нуль.

Н. — Очень логично, об этом следовало бы подумать. Итак, в сумме на месте двоек я записываю нуль. Переходим к четверкам, обозначенным буквой с. Здесь тоже нет ничего трудного: 1 вверху и нуль внизу дают в сумме 1, что и записываю под чертой. С восьмерками дело обстоит чуточку посложнее; вверху у нас 1 и внизу тоже 1, их сумма 2, а у меня нет цифры 2, чтобы записать полученный результат.

Л. — Действительно, у тебя нет цифры 2, но ты можешь записать число 2 в двоичной системе в виде 1, за которой следует нуль. Иначе говоря, ты оказался в таком же положении, как при сложении по правилам десятичной арифметики, когда полученный результат превышает 10. Как ты обычно поступаешь в таком случае?

Н. — В таком случае я просто-напросто записываю цифру единиц и запоминаю цифру десятков.

Л. — Хорошо, так запиши цифру единиц, т. е. нуль в колонку d, и запомни цифру двоек, в нашем случае 1, которую ты потом прибавишь к сумме, полученной в колонке е.

Н. — Продолжим; в колонке е все обходится без каких бы то ни было трудностей; нуль в одном слагаемом, нуль в другом слагаемом да запомненная 1 дают в сумме только 1. Этот результат я и вписываю под чертой в колонке е. В колонке f мы сталкиваемся с уже знакомым положением: 1 + 1 дают в сумме 2 — я записываю нуль и запоминаю 1, которую предстоит прибавить к результату, полученному в колонке g. А вот с колонкой g справиться значительно труднее, потому что там мы имеем три слагаемых и каждое из них равно 1.

Л. — Но тебе надлежит применить этот же самый принцип. Сложение трех чисел по 1 в сумме дают 3, а это число в двоичной системе счисления записывается как одна двойка и одна единица, т. е. 1, после которой следует 1. Следовательно, запишешь 1 в колонку g и запомнишь 1.

Н. — Правильно, я сам должен был до этого додуматься; перейдем же к последней нашей колонке h — здесь нет ничего кроме 1, которую я запомнил, и мне остается лишь записать ее под чертой как полученный результат. Теперь я понял, почему ты предусмотрел эту колонку и обозначил очередной буквой, хотя ни в одном из наших слагаемых в этом разряде цифр не было.

Логические элементы

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

Н. — Как! Разве те схемы, о которых ты до сих пор мне рассказывал, не признавали логики?

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

Н. — Все ясно, и я чувствую себя совершенно спокойно, если только дальше не появится что-то более сложное.

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

Начнем с элемента ИЛИ, обозначение которого приведено на рис. 125.

Рис. 125. Обозначение логического элемента ИЛИ , который выдает напряжение на выходе, когда напряжение имеется на одном или на другом входе(или на обоих входах одновременно).

Пусть тебя не беспокоит знак 1; он заимствован из специальной системы обозначений, в которую я предпочитаю тебя не посвящать. Элемент предназначен для выдачи напряжения на выходе 5, когда напряжение имеется на его входе А или на входе В или одновременно на обоих входах. Нечто аналогичное можно получить, если предположить, что напряжения А и В воздействуют на катушки двух реле, нормально разомкнутые контакты которых включены параллельно.

Н. — В твоей идее элемента ИЛИ меня несколько беспокоит отсутствие какой бы то ни было разницы между случаями, когда напряжение подается на один из двух входов и когда оно подается на оба сразу.

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

Н. — Согласен, но тогда твое определение ИЛИ следовало бы заменить каким-либо специальным словом.

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

Перейдем теперь к элементу И. Обозначение этого элемента я воспроизвел на рис. 126.

Рис. 126. Обозначение логического элемента И , который выдает напряжение на выходе, когда напряжение имеется одновременно на одном и на другом входах.

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

А теперь я познакомлю тебя с логическим элементом НЕ. Его условное обозначение приведено на рис. 127.

Рис. 127. Обозначение элемента НЕ , который выдает напряжение на выходе, когда на входе напряжения нет, и наоборот.

Этот элемент дает напряжение на выходе, когда на его входе нет напряжения, и не дает выходного напряжения, когда на его вход подается напряжение. Такую схему можно получить, если входное напряжение А подавать на катушку реле, с нормально замкнутого контакта которого на выход схемы подается положительное напряжение.

Логические элементы без реле

Н. — Твои элементы представляются мне достаточно простыми, но я сожалею о наличии в них реле. Должно быть, имеется возможность заменить их какими-нибудь компонентами, способными работать быстрее.

Л. — Ты прав. Описанные мной элементы, использующие реле, предназначены только для того, чтобы ты хорошо понял принцип работы этих логических элементов. Если тебе нужен пример, то логический элемент (рис. 127) можно с успехом реализовать с помощью электронной схемы, изображенной на рис. 128.

Рис. 128. Схема элемента НЕ на одном транзисторе.

Как ты видишь, при подаче в точку А потенциала +Е (который рассматривается как наличие напряжения) транзистор запирается и выходное напряжение S становится равным нулю. В том случае, когда точка А замкнута на корпус (отсутствие напряжения на входе), по включенному в цепь базы резистору сопротивлением 10 ком протекает ток. Если коэффициент усиления этого транзистора по току превышает 10 (а это вполне нормально), то транзистор находится в режиме насыщения, и протекающий ток создаст на его коллекторе (т. е. на выходе S) потенциал, близкий к +Е. Имеется также возможность сделать на транзисторах довольно простые элементы И и ИЛИ.

Объединения логических элементов

Л. — Не беспокойся. Возможности этих элементов становятся большими, стоит только собрать их в достаточном количестве. Чтобы привести пример, построим схему, которая позволит нам складывать двоичные числа. Как ты сам убедился, при сложении двоичных чисел возможны три результата: нуль, если обе цифры равны нулю; единица, если одна из слагаемых цифр единица; нуль (и перенос единицы в следующий разряд), если обе слагаемые цифры единицы.

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

Н. — В этом случае элемент ИЛИ нас не устроит.

Л. — Правильно, одного этого элемента будет недостаточно. Но посмотри на схему, изображенную на рис. 129.

Рис. 129. Объединение логических элементов, носящее название « исключающее ИЛИ » (без выхода R ) или полусумматора (с выходом S и R ). Устройство дает напряжение на выходе, когда имеется напряжение на входе А или на входе В , но не одновременно на обоих входах.

Напряжения А и В одновременно подаются на элемент ИЛИ (1) и на элемент И (2). Как ты видишь, на выходе элемента И я поместил элемент НЕ (3). На входе этого элемента НЕ я получу единицу. Исключение будет лишь в том случае, если на входе всего устройства одновременно присутствуют напряжения А и В, ибо только при этом условии элемент И (2) дает выходное напряжение.

Н. — До сих пор я все понял без труда.

Л. — Остальное не сложнее. На выходе элемента ИЛИ (1) напряжение будет, когда оно имеется на входе А или на входе В или одновременно на обоих. А теперь посмотри, как ведет себя элемент И (4). Этот элемент не получит напряжения на свой нижний вход только в том случае, когда напряжение подается одновременно на входы А и В всего устройства. Во всех трех других случаях (напряжение в точках А и В равны нулю, напряжение в А равно нулю и присутствует в точке В, напряжение присутствует в А и равно нулю в точке В) на нижний вход элемента И (4) напряжение подается.

Следовательно, этот элемент не пропустит напряжение с выхода элемента 1 только в том случае, когда входное напряжение одновременно подается в точки А и В. Рассмотрев все возможные варианты, ты можешь убедиться, что на выходе S напряжение будет, когда оно подается только в А или только в В, но не одновременно на оба входа.

Н. — Это далеко не так просто, как ты обещал, но все же здесь можно разобраться. Только я не вижу, зачем нужен выход, обозначенный буквой R, который ты сделал после элемента 2.

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

Н. — А не можешь ли ты теперь рассказать мне о больших цифровых электронных вычислительных машинах?

Электрическое представление чисел

Л. — Прежде чем приступить к этому вопросу, я должен в нескольких словах рассказать о методах, используемых для представления чисел в электрической форме. Двоичное число состоит из нескольких нулей или единиц. Предположим, что число состоит из n знаков. Выразить и передать это число в электрической форме можно двумя способами.

Сначала следует сказать о параллельной передаче числа; в этом случае для n знаков используется n проводов, в которые для передачи единицы подается напряжение, а для передачи нуля напряжение не подается, т. е. все знаки поступают одновременно, и для этого проводов требуется по числу знаков.

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

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

Л. — Для устранения такой неуверенности используют средство, хорошо известное всем спортсменам. Что делают, чтобы заставить всех бегунов на 100 м одновременно начать бег?

Н. — Поручают стартеру дать выстрел из пистолета.

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

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

Сдвигающий регистр

Л. — Это всего лишь привычка, но ты же прекрасно знаешь, что выполнение ряда арифметических операций, таких как сложение и умножение, всегда начинают с единиц. Для удобства работы электронных вычислительных машин с этими последовательными числами лучше подавать эти числа единицами вперед. Что же касается самой приятной стороны последовательного способа представления числа — возможности обходиться одним проводом, то нельзя забывать, что за это положительное качество приходится мириться с двумя недостатками: во-первых, передача занимает больше времени; во-вторых, манипулировать полученным числом не так легко. А теперь рассмотрим, как устроено главное, как бы ключевое устройство электронных вычислительных машин, которое называют сдвигающим регистром. Это своеобразная запоминающая скамья, по которой можно перемещать число на одну метку — разряд (за один прием).

Н. — Как ты намереваешься сделать это запоминающее устройство? К тому же мне думается сдвигать записанное число исключительно трудно.

Л. — На рис. 130 я нарисовал схему трех каскадного сдвигающего регистра.

Рис. 130. Структурная схема сдвигающего регистра; схема способна запомнить двоичное число, которое подается на входы Е . Импульс, подаваемый на вход Z , «продвигает» записанное число влево.

Как ты видишь, она представляет собой повторное использование определенного базового элемента. Этот базовый элемент содержит триггер, на один из его входов сигнал подается прямо, а на другой — через элемент ИЛИ. Выходное напряжение триггера преобразуется в импульсы и подается на элемент задержки, обозначенный на рисунке буквой D. Роль элемента задержки может выполнять схема с одним устойчивым состоянием, устройство которой я тебе уже объяснял.

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

Л. — Не бойся, на этот раз ничего страшного нет. Ты, вероятно, заметил, что триггеры, кроме обычных входов, имеют небольшой боковой вход, который я обозначил буквой Z. Этот вход служит для сброса на нуль. Такой результат можно получить, например, подачей отрицательного импульса на базу транзистора Т 2 в приведенной на рис. 82 схеме триггера.

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

Н. — Все это для меня настолько туманно, что я могу сказать тебе лишь, что триггеры, получившие импульс, переключатся с 0 на 1, а больше мне сказать нечего.

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

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

Сдвиг

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

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

Л. — Действительно, все так бы и случилось, не будь в нашем устройстве элементов задержки. При подаче импульса сброса на нуль все стоявшие в положении 1 (единицы) триггеры возвращаются на нуль. Но в момент опрокидывания они дадут импульс на включенные после них элементы задержки. Эти элементы получат импульс и через некоторое время отправят его на следующие триггеры.

Н. — Но раз твои триггеры возвращены на нуль…

Л. — Я возвратил их на нуль подачей короткого импульса на вход Z. Но к тому моменту, когда получившие импульс элементы задержки передают его на следующие триггеры, поданный на вход Z импульс уже полностью закончился. Поэтому все получающие задержанный импульс триггеры независимо от их предыдущего состояния переключаются в положение 1.

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

Л. — Очень просто, показания каждого триггера до возврата на нуль теперь переместились на соседний с ним триггер (в направлении справа налево). Если, например, я послал импульс на Е 1 и Е 2 , но не дал его на Е 3 , то первоначально я получу выходное напряжение на S1 и S 2 , но его не будет на S 3 . Пошлем теперь импульс сброса на нуль. Опрокинувшись в положение нуль, триггеры В 1 и В 2 возбудят элементы задержки D 1 и D 2 . Триггер же В 3 все время находился в положении нуль и на него сигнал сброса на нуль не окажет никакого воздействия. Следовательно, он не возбудит элемента задержки D 3 . Немного позднее, когда элементы задержки D 1 и D 2 выдадут свои импульсы, возвращенный на нуль триггер В 2 опрокинется в положение 1 и оставшийся все время в положении нуль триггер В 3 также опрокинется в положение 1. Следовательно, теперь мы получим напряжение на входах S 3 и S 2 , а выход S 1 останется без напряжения. Если раньше наш регистр показывал число 011, то теперь он показывает 110. Мы переместили его показания на один знак влево, а на освободившееся справа место вписали нуль.

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

Л. — Но это очень просто — число умножается на 2. В этом заключается первая возможность нашей системы. Каждый посылаемый на провода Z импульс удваивает первоначально записанное число. Но наш сдвигающий регистр обладает еще более интересными возможностями. Посмотри, какие импульсы выдаст триггер В 3 после трех последовательных сбросов на нуль с помощью подачи импульсов на вход Z.

Преобразование параллельного представления числа в последовательное

Н. — Чтобы мне было легче ориентироваться, я попробую разобраться на уже рассматривавшемся нами случае с первоначально записанным числом 011. Первый поданный на вход Z сигнал изменяет нашу запись на 110, но, как я полагаю, при этом мы должны учитывать и то обстоятельство, что триггер В 3 не даст импульса, ибо он переключается из положения 0 в положение 1.

Л. — В самом деле он дает только положительный импульс, который мы задерживаем с помощью диода. Следовательно, на выходе триггера В 3 ничего нет. А что произойдет при следующем сбросе на нуль?

Н. — О, теперь это ужасно сложно! Как я вижу, триггер В 2 , находящийся в положении 1, под воздействием импульса Z опрокинется в положение нуль. По-моему, он должен дать на выход импульс, потому что нас интересуют только импульсы, соответствующие переходу на нуль. Импульс с триггера В 2 поступает на элемент задержки D 2 , откуда он через некоторое время поступает на триггер В 3 и переключает его на 1. Но я не очень хорошо представляю, что в итоге получилось.

Л. — В итоге мы получили импульс с триггера В 3 и записанное на регистре число превратилось в 100. При третьем переключении регистра на нуль мы вновь получим импульс с триггера В 3 , потому что он переходит на нуль из положения 1. Теперь уже ни один триггер не может переключиться в положение 1, так как запись постепенно перемешалась и в результате полностью вышла за пределы регистра.

Н. — Но это более чем странно! Трехкратным переключением на нуль ты выталкивал цифру за цифрой записанное в регистре число. Только вытолкнул его не в том направлении, которое нам нужно; сначала мы получили отсутствие импульсов (цифра четверок), затем получили один импульс (цифра двоек) и, наконец, еще один импульс (цифра единиц).

Л. — Совершенно верно, мы цифру за цифрой вытолкнули наше число с того места, где оно было записано. Иначе говоря, на выходе S 3 мы получили наше число в последовательной форме. Ты правильно заметил, что выходящее из регистра число заканчивается единицами. При желании получить его единицами вперед, следует записать число на трех триггерах в обратном порядке: единицы подать на вход Е 3 , двойки — на вход Е 2 и четверки — на вход Е 1 .

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

Преобразование последовательного представления числа в параллельное

Л. — О, ты знаешь, транзисторы этой схемы способны (да позволят мне так сказать) не только на один фокус. Схема может выполнить и обратное преобразование. Представь себе, что мы подаем на вход А последовательное число и после передачи очередной цифры посылаем импульс сброса на нуль. Первая цифра записывается триггером B 1 , а затем импульс сброса на нуль продвигает ее на триггер В 2 . В этот момент следующая цифра записывается предварительно выставленным на нуль триггером B 1 .

Второй поступающий на вход Z импульс сброса на нуль продвигает первую цифру с триггера В 2 на триггер В 3 и вторую цифру с В 1 на В 2 . В это время триггер B 1 выставлен на нуль и готов получить третью цифру передаваемого на вход А числа в последовательной форме.

Н. — Действительно, очень умная схема, на этот раз она преобразовала последовательное представление числа в параллельное.

Параллельное сложение

Л. — Но этим мы еще не исчерпали всех возможностей сдвигающего регистра. Представь себе, что на входы E 1 ,Е 2 и Е 3 нашей схемы мы подали параллельное число. А через некоторое время подаем еще одно такое же число на эти же входы: единицы на E 1 , двойки на Е 2 и четверки на Е 3 . Что мы получим в результате?

Н. — Ужасную смесь!

Л. — Совсем нет. Рассмотрим, что произойдет на одном из триггеров. Предположим, что после записи первого числа он стоит на нуле. Если в соответствующем этому триггеру месте второго числа стоит нуль, то триггер не получит никакого импульса и останется на нуле. Но при записи второго числа наш триггер может получить импульс (на соответствующем ему месте находится единица) и тогда он переключится на 1. Возможно также, что при записи первого числа триггер получит импульс, а при записи второго импульса не получит. В этом случае, как и в предыдущем после передачи второго числа, триггер будет стоять на 1. Как ты видишь, во всех этих трех случаях на каждом триггере мы получим цифру, равную сумме соответствующих цифр из двух чисел.

Н. — Очень занятно, но признайся, что все рассказанное тобой справедливо лишь для некоторых случаев.

Л. — Сейчас я докажу тебе, что справедливо для всех случаев. Предположим, например, что триггер В 1 при записи первого числа получил один импульс (что означает, что в первом числе на месте единиц стоит цифра 1). Теперь предположим, что при записи второго числа на вход Е 1 поступил еще один импульс. Этот импульс переключит триггер на нуль и тем самым запишет последнюю цифру суммы двух полученных цифр. При опрокидывании на нуль триггер посылает импульс на элемент задержки D 1 . Этот импульс представляет собой не что иное, как единицу, переносимую при сложении в следующий разряд. После того как сдвигающий регистр зафиксирует второе число, эта переносимая единица поступает на триггер В 2 и прибавляется к записанной в нем цифре, т. е. переключает триггер В 2 из одного состояния в другое.

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

Л. — Это возможное, но не наилучшее решение. Представь себе, что первым мы передали на сдвигающий регистр число 111, а вторым — число 001. Когда мы запишем второе число, триггер В 1 опрокинется и вернется на нуль. Через элемент D 1 он передаст импульс на триггер В 2 , который после соответствующей задержки опрокинется и вернется на нуль. Триггер В 2 через элемент D2 пошлет импульс на триггер В 3 , который спустя еще один период задержки опрокинется и вернется на нуль. Как ты видишь, задержки накапливаются и может оказаться, что для завершения записи суммы потребуется значительное время.

Н. — Но ты сам в этом виноват, зачем ты поставил элементы задержки?

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

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

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