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

логическое уравнение имеет вид:
На том же рисунке (рис.1б) дана совершенная реализация этой ячейки, имеющая более понятный вид для упомянутых схемотехников, а именно RS -триггер с функциями установки S и сброса R:
Для удобства толкования работы ячейки обозначим состояние через P (рабочее состояние) , а
- через Г (состояние гашения).
Пусть исходно все n ячеек рис.1 устройства находятся в состоянии Г, а источник, подключенный к первой ячейке, пытается перевести ее в состояние Р. Для этого первая ячейка должна быть в состоянии Г, как и следующая за ней вторая ячейка, что и имеет место. Как впрочем и для дальнейшего продвижения состояния Р по цепочке, перед ячейкой в состоянии Р должны находится, как минимум, две в состоянии Г. С другой стороны, чтобы послать в цепочку следующее состояние Р источник должен погасить первую ячейку и дальше состояние Г будет распространяться по цепочке до тех пор, пока не достигнет ячейки в состоянии Р, перед которой будет погашенная ячейка. Итак, чередуя посылку состояний Р и Г, передатчик сможет заполнить все цепочку, но при этом из сказанного следует, что ячейки в состояниях Р и Г будут чередоваться т.е. в состояниях Р будет только половина из общего числа n. Аналогично и приемник может получить из цепочки не более n/2 состояний Р при неработающем источнике, т.е. описанная цепочка обладает буферными свойствами, позволяя некоторым образом согласовать неравномерность работы источника и приемника. Но главное - этот принцип позволяет в n/2 раз ускорить темп обработки информации по сравнению с чисто последовательным способом.
В случае pipeine счетчика это означает, что источник импульсов не должен ожидать срабатывания всех n разрядов, как в случае самого длинного переноса, а только первых двух, что и побуждает
обратится к таким схемам.
Счетчик
Строительным материалом (буквально, кирпичом) для построения pipeline счетчика будет схема рис.2а, уже обсуждённая в статье "О совершенной реализации". Из диаграммы переходов

(красного цвета на том же рис.2б) видно, что в течение цикла значение переменной Z меняется четыре раза, тогда как всех остальных только по два. Если исключить связь, показанную на рисунке пунктиром, то образуются счетный вход и выход индикации состояния схемы. Это минимальная (по числу элементов) схема счетного триггера да еще и с элементом Z, индицирующим окончание переходных процессов в каждой фазе ее работы. А фаз таких всего две: результатом одной будет состояние, в котором при этом выполнится равенство
- будем считать это состоянием Г схемы, а другой -
и
- состоянием Р. В свою очередь каждое из этих двух состояний распадается еще на два, определяемые, например, значением элемента X. Вот одно из рабочих состояний
и назначим переносом.
Приведенная на том же рисунке совершенная реализация рис.2в (на самом деле вот она-то и будет кирпичом) представляет собой обычный двухтактный счетный триггер снабженный дополнительным RS-триггером Z, выполняющим функцию индикатора фазы работы, замыкание выходов которого на тактовые входы устройства и превращает последнее в генератор. Система уравнений для этого счетного триггера имеет вид:
Из этих уравнений видно, что при переключении элемента X схема переходит в состояние Р, причем эт�� переключение осуществляется при (т.е. из состояния Г), а обратный переход осуществляется при
переключением элемента Y.
Чтобы заставить функционировать (в смысле смены состояний Р и Г) разряд i счетчика, как ячейку pipeline, надо обратить внимание, что функции (S и R совершенной реализации), заставляющие последнюю переходить в состояние Р и Г, не только разные, но и не имеющие общих частей, не то, что в счетном триггере рис.2в:
Здесь не случайно не приведены такие же функции для элемента Z, так как последний предполагается исключить из схемы ячейки pipeline счетчика, совместив его миссию с совершенной реализацией других элементов этой ячейки. Потенциальную возможность такого совмещения предопределяет отсутствие памяти у элемента Z в схеме рис.2а (переменная Z отсутствует в левой части его логического уравнения).
Первой рассмотрим функцию установки , в которая, очевидно, будет сомножитель
необходимый для сохранения ячейкой функции счетного триггера. Еще один сомножитель
- это то, что осталось от назначенного выше переноса
после удаления из ячейки элемента Z. И, наконец, сомножитель, подтверждающий состояние Г ячейки i+1, т.е.
- вот она функция удаленного элемента
В результате имеем:
Функция сброса , тоже переводит ��чейку i счетчика в состояние Р, которое, однако, не влияет на ячейку i+1 и, следовательно, от последней не требуется никаких данных для формирования этой функции (эти данные будут учтены при переходе ячейки i в состояние Г):
Выполнение функций установки и сброса
переводит ячейку i счетчика pipeline в состояние Г. При этом первая из них вызовет переключение предшествующее сбросу переноса (т.е.
), поэтому она должна учитывать то, что ячейка i+1 уже отработала этот перенос, т.е. находится в рабочем состоянии. По аналогии с
имеем:
Функция же сброса , как и предыдущая функция сброса, не влияющая на изменение состояния ячейки i+1, выглядит гораздо проще:
Получившаяся схема ячейки pipeline счетчика изображена на рис.3.

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