Борис Цирлин

В предыдущей статье "Pipeline цифровые устройства" в качестве образцов таковых рассматривались различные сдвиговые (точнее буферные) регистры. В данной - расширим круг примеров счетчиком такого же типа.

Введение

Схемотехникам наверняка известно понятие переноса в многоразрядных счетчиках, т.е. появления сигнала, который возникает при переполнении текущего разряда и инициирует изменение состояния следующего (более старшего) разряда. В двоичном счётчике каждый разряд может находиться в одном из двух состояний: 0 или 1. Когда разряд, находящийся в состоянии 1, получает очередной счётный импульс, он переключается в состояние 0 и формирует этот самый перенос в следующий разряд. Таким образом, обеспечивается «перетекание» счёта на следующий уровень, подобно тому как в десятичной системе при переходе от 9 к 10 происходит перенос единицы в следующий разряд. Т.е. если все n разрядов двоичного счетчика находятся в состоянии 1, то время реакции на счетный импульс, поданный на первый разряд определяется суммарным временем последовательного срабатывания всех n разрядов, что ограничивает быстродействие устройства.

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

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

Основание

В качестве такового рассмотрим функционирование устройства моделирующего pipeline процесс, что-то типа распределителя импульсов, ячейка которого приведена на рис.1а, соответствующее

Рис.1
Рис.1

логическое уравнение имеет вид:

\mathbf{Z_i=Z_i Z_{i-1}\lor Z_i\overline{Z}_{i+1}\lor Z_{i-1}\overline{Z}_{i+1}}

На том же рисунке (рис.1б) дана совершенная реализация этой ячейки, имеющая более понятный вид для упомянутых схемотехников, а именно RS -триггер с функциями установки S и сброса R:

\mathbf{S_{i}=Z_{i-1}\overline{Z}_{i+1}}
\mathbf{R_{i}=\overline{Z}_{i-1}Z_{i+1}}

Для удобства толкования работы ячейки обозначим состояние \mathbf{Z_{i}=1} через P (рабочее состояние) , а \mathbf{Z_{i}=0} - через Г (состояние гашения).

Пусть исходно все n ячеек рис.1 устройства находятся в состоянии Г, а источник, подключенный к первой ячейке, пытается перевести ее в состояние Р. Для этого первая ячейка должна быть в состоянии Г, как и следующая за ней вторая ячейка, что и имеет место. Как впрочем и для дальнейшего продвижения состояния Р по цепочке, перед ячейкой в состоянии Р должны находится, как минимум, две в состоянии Г. С другой стороны, чтобы послать в цепочку следующее состояние Р источник должен погасить первую ячейку и дальше состояние Г будет распространяться по цепочке до тех пор, пока не достигнет ячейки в состоянии Р, перед которой будет погашенная ячейка. Итак, чередуя посылку состояний Р и Г, передатчик сможет заполнить все цепочку, но при этом из сказанного следует, что ячейки в состояниях Р и Г будут чередоваться т.е. в состояниях Р будет только половина из общего числа n. Аналогично и приемник может получить из цепочки не более n/2 состояний Р при неработающем источнике, т.е. описанная цепочка обладает буферными свойствами, позволяя некоторым образом согласовать неравномерность работы источника и приемника. Но главное - этот принцип позволяет в n/2 раз ускорить темп обработки информации по сравнению с чисто последовательным способом.

В случае pipeine счетчика это означает, что источник импульсов не должен ожидать срабатывания всех n разрядов, как в случае самого длинного переноса, а только первых двух, что и побуждает
обратится к таким схемам.

Счетчик

Строительным материалом (буквально, кирпичом) для построения pipeline счетчика будет схема рис.2а, уже обсуждённая в статье "О совершенной реализации". Из диаграммы переходов

Рис.2
Рис.2

(красного цвета на том же рис.2б) видно, что в течение цикла значение переменной Z меняется четыре раза, тогда как всех остальных только по два. Если исключить связь, показанную на рисунке пунктиром, то образуются счетный вход и выход индикации состояния схемы. Это минимальная (по числу элементов) схема счетного триггера да еще и с элементом Z, индицирующим окончание переходных процессов в каждой фазе ее работы. А фаз таких всего две: результатом одной будет состояние, в котором \mathbf{X=Y} при этом выполнится равенство \mathbf{Z=0} - будем считать это состоянием Г схемы, а другой - \mathbf{X\neq{Y}} и \mathbf{Z=1} - состоянием Р. В свою очередь каждое из этих двух состояний распадается еще на два, определяемые, например, значением элемента X. Вот одно из рабочих состояний \mathbf{X=Z=1} и назначим переносом.

Приведенная на том же рисунке совершенная реализация рис.2в (на самом деле вот она-то и будет кирпичом) представляет собой обычный двухтактный счетный триггер снабженный дополнительным RS-триггером Z, выполняющим функцию индикатора фазы работы, замыкание выходов которого на тактовые входы устройства и превращает последнее в генератор. Система уравнений для этого счетного триггера имеет вид:

\mathbf{X=XZ\lor\overline{Y}\,\overline{Z}}
\mathbf{Y=Y\overline{Z}\lor{YZ}}
\mathbf{Z=X\overline{Y}\lor{\overline{X}Y}}

Из этих уравнений видно, что при переключении элемента X схема переходит в состояние Р, причем эт�� переключение осуществляется при \mathbf{Z=0} (т.е. из состояния Г), а обратный переход осуществляется при \mathbf{Z=1} переключением элемента Y.

Чтобы заставить функционировать (в смысле смены состояний Р и Г) разряд i счетчика, как ячейку pipeline, надо обратить внимание, что функции (S и R совершенной реализации), заставляющие последнюю переходить в состояние Р и Г, не только разные, но и не имеющие общих частей, не то, что в счетном триггере рис.2в:

    \mathbf{S_{X}=\overline{Y}\,\overline{Z}}
\mathbf{R_{X}=X\overline{Z}}
\mathbf{S_{Y}=XZ}
\mathbf{R_{Y}=\overline{X}Z}

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

Первой рассмотрим функцию установки \mathbf{S_{X_i}}, в которая, очевидно, будет сомножитель \mathbf{\overline{Y_i}} необходимый для сохранения ячейкой функции счетного триггера. Еще один сомножитель \mathbf{X_{i-1}} - это то, что осталось от назначенного выше переноса \mathbf{X_{i-1}Z_{i-1}} после удаления из ячейки элемента Z. И, наконец, сомножитель, подтверждающий состояние Г ячейки i+1, т.е. \mathbf{\overline{X}\,\overline{Y}\lor{XY}} - вот она функция удаленного элемента \mathbf{Z_{i+1}}
В результате имеем:


\mathbf{S_{X_i}=\overline{Y}_{i}X_{i-1}( X_{i+1}Y_{i+1}\lor\overline{X}_{i+1}\overline{Y}_{i+1})}

Функция сброса \mathbf{R_{X_i}}, тоже переводит ��чейку i счетчика в состояние Р, которое, однако, не влияет на ячейку i+1 и, следовательно, от последней не требуется никаких данных для формирования этой функции (эти данные будут учтены при переходе ячейки i в состояние Г):

\mathbf{R_{X_i}=Y_{i} X_{i-1}}

Выполнение функций установки \mathbf{S_{Y_i}} и сброса \mathbf{R_{Y_i}} переводит ячейку i счетчика pipeline в состояние Г. При этом первая из них вызовет переключение предшествующее сбросу переноса (т.е. \mathbf{X_i}), поэтому она должна учитывать то, что ячейка i+1 уже отработала этот перенос, т.е. находится в рабочем состоянии. По аналогии с \mathbf{S_{X_i}} имеем:

\mathbf{S_{Y_i}=X_{i}\overline{X}_{i-1}(\overline{X}_{i+1}Y_{i+1}\lor{X}_{i+1}\overline{Y}_{i+1})}

Функция же сброса \mathbf{R_{Y_i}}, как и предыдущая функция сброса, не влияющая на изменение состояния ячейки i+1, выглядит гораздо проще:

\mathbf{R_{Y_i}=\overline{X}_i\overline{X}_{i-1}}

Получившаяся схема ячейки pipeline счетчика изображена на рис.3.

Рис.3
Рис.3

Заключение

Полученная ячейка несколько проще аналогичной, приведенной в книге "Автоматное управление асинхронными процессами в ЭВМ и дискретных системах" и защищённой Авт. св. СССР № 561298. Заметим, что для реализации последней также использован метод совершенной реализации, но на RS-триггерах имеющих транзитное состояние 11, т.е. двойственных тем, что применены в этой и предыдущей статьях.

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