воскресенье, 20 ноября 2011 г.

Parallelizer (распараллелировщик)

Как бы странно ни звучало название устройства, оно всегда должно отображать то, что это устройство делает. Или, по-крайней мере, намекать это.



У нас частенько возникает такая ситуация, когда некоторый поток данных (даже если это команда) идет последовательно по одной линии, и, вдруг, резко понадобилось использовать эти данные, но параллельно. При чем, все их кванты одновременно. Очевидно, это неосуществимо до тех пор, пока данные не будут полностью получены неким устройством, делающим их параллельными данными. Назовем такое устройство параллелизатором. Конечно же можно реализовать его на контроллере, но случается, что нам не хватает памяти, а ставить еще один МК выходит дороговато. В таких случаях можно поступить следующим образом. Поскольку, в схеме работающей с последовательно входящими данными время строго тарировано, то должно присутствовать тактирующее устройство (Тактовый Генератор, ТГ). Нам нужно произвести распараллеливание последовательных данных (даже если это команда, опоследователь на нее смотрит как на данные). Характерная особенность последовательных данных это то, что каждая составная часть этих данных имеет свое место и только в этом месте и может быть. Характерная особенность параллельных данных это то, что каждая составная часть этих данных имеет строго определенную для нее линию и только на этой линии может быть. Когда одни и теже самые данные присутствуют в разных местах (на разнах линиях), то это уже разные данные. То же самое можно записать следующим образом -


|--> DATA_IN = sum(D[k]*2^k, k:1:n) ==> DATA_OUT[k] = D[k]

D[k] - данные в k-ый момент времени (на k-ом такте)
DATA_IN - входящие последовательные данные, рассматриваемые как число.
DATA_OUT[k] - состояние k-ой выходной линии.

Теперь мы видим как должно работать наше устройство. Задача у "распараллеливателя" - такая же как и у демультиплексора. Нужно только сохранить результат до "стопового" (!) такта в параллельном регистре, состоящем из набора RS-триггеров.
Принципиальная схема -

Развернутая структура триггера (SC) -
Отдельный (не показанный) сигнал переполнения таймера (при его включении как пересчетной схемы) нужно посылать на управляющуя часть схемы, осуществляющую чтение состояния триггерного парраллельного регистра. В момент появления этого сигнала - стоит отключить синхронизацию - на вход нижнего демультиплекора подать 0.

На этом все.

P.S.: "Опоследователь" вышлядит примерно также, но вместо _де_мультиплексоров стоят _мультиплексоры_