русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование JK-триггера


Дата добавления: 2013-12-24; просмотров: 22688; Нарушение авторских прав


 

На рис. 4.24 представлены варианты построения различных триггеров на базе синхронного JK-триггера.

Рис. 4.24. Способы использования JK-триггера

 

4.6 Регистры и регистровые файлы

Регистр – последовательностное логическое устройство, осуществляющее приём и запоминание n- разрядного слова (кода), х1, х2,… хn-1, xn, а также выполнение определённых микроопераций над этим словом. Число разрядов в регистре называют его длиной. В n-разрядном регистре может быть записано 2n различных n-разрядных двоичных чисел, т.е. находится в 2n различных состояниях. Регистр представляет собой упорядоченную совокупность триггеров (RS-, D- или JK- типов с динамическим или статическим управлением). Разрядность регистра соответствует количеству используемых в нём триггеров. Каждый триггер имеет прямой и инверсный выходы, используемые соответственно для получения прямого и инверсного кодов. Кроме триггеров в состав регистра входит комбинационная схема, формирующая функцию возбуждения (входные сигналы) триггеров. Регистры – самые распространенные узлы цифровых устройств. Они оперируют с множеством связанных переменных, составляющих слово. Над словами выполняется ряд операций: прием, хранение, сдвиг в разрядной сетке. С помощью регистров можно осуществлять операции преобразования информации из одного вида в другой (последовательного кода слова в параллельный и т.п.), а также некоторые логические операции (поразрядное логическое сложение и умножение и т.п.).

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

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



По количеству тактов управления, необходимых для записи кода слова, различают одно-, двух- и многотактные(n-тактные) регистры.

По способу приёма и передачи информации различают последовательные (с записью кода числа путем его последовательного сдвига тактирующими сигналами, начиная с младшего или старшего разряда), параллельные (с записью числа во все разряды одновременно параллельным кодом) и параллельно- последовательные регистры.

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

В последовательных регистрах слова принимаются и выдаются разряд за разрядом. Их называют сдвигающими, т.к. тактирующие сигналы при вводе и выводе слов перемещают их в разрядной сетке. Сдвигающий регистр может быть нереверсивным (с однонаправленным сдвигом) или реверсивным (с возможностью сдвига в обоих направлениях).

Последовательно-параллельные регистры имеют входы-выходы одновременно последовательного и параллельного типа. Существует несколько вариантов последовательно-параллельных регистров: с последовательным входом и параллельным выходом (SIPO, Serial Input – Parallel Output), параллельным входом и последовательным выходом (PISO, Parallel Input – Serial Output), а также варианты с возможностью любого сочетания способов приема и передачи слов.

Для современной схемотехники характерно построение регистров на триггерах, преимущественно с динамическим управлением. Многие регистры имеют выходы с третьим состоянием, некоторые из них относятся к числу буферных, т.е. рассчитаны на работу с большими емкостными и/или низкоомными активными нагрузками. Это обеспечивает их работу непосредственно на магистраль без дополнительных схем интерфейса.

4.6.1 Регистры памяти

Назначение регистров памяти – хранение двоичной информации небольшого объёма в течение короткого промежутка времени. Регистры представляют собой набор синхронных триггеров, каждый из которых хранит один разряд двоичного числа. Ввод (запись) и вывод (считывание) информации производится параллельным кодом. Ввод обеспечивается тактовым импульсом (с приходом очередного тактового импульса записанная информация обновляется). Считывание производится в прямом или обратном коде.

На рис. 4.25 приведена схема двухтактного регистра на основе RS –триггеров. Информация в регистр заносится по шинам х1, х2, …хn , только в том случае, когда на шину Пр подан управляющий сигнал приёма информации.

При этом через схему &1 проходят сигналы установки триггеров в состояние 1 только в тех разрядах, где х1=1. Чтобы в остальных разрядах был записан 0, необходимо предварительно все разряды устанавливать в нулевое состояние. Записанный в регистр код слова будет храниться в нём до тех пор, пока не будет снова подан сигнал установки в состояние 0. Прямой код хранимого в регистре слова, будет выдан при наличии на шине Вп управляющего сигнала «Выдача прямого кода». При этом код слова с прямых выходов триггеров регистра пройдёт через группу схем &2 и в каждом разряде на выходе будет выработан сигнал .

Сигнал «Выдача инверсного кода» Ви позволяет через группу схем &3 получить инверсное значение кода, хранимого в регистре. При этом в каждом его разряде вырабатывается значение кода .

Рис. 4.25. Схема функциональная двухтактного регистра на RS- триггерах

 

Из статических регистров (регистров памяти) составляются блоки регистровой памяти - регистровые файлы. Такие блоки позволяют осуществлять независимую и одновременную запись одного слова и чтение другого.

К примеру, микросхема ИР26 из серии КР1533 или К555 позволяет хранить 4 четырехразрядных слова. Информационные входы регистров RG1÷RG4 соединены параллельно (см. рис. 4.26). Входы адресов записи WA и WB дают 4 комбинации, каждая из которых позволяет соответствующему регистру принять информацию с входов данных D1-4 при условии наличия на входе разрешения записи активного низкого уровня сигнала. При высоком уровне сигнала на входе входы данных и адресов запрещены. Выходные данные выдаются с данного регистрового файла в прямом коде.

Рис. 4.26. Схема регистрового файла

 

Содержимое файла (выход одного из регистров RG1÷RG4) вызывается на выход блока Q1-4 с помощью дешифратора считывания (адресных входов мультиплексора) адресами RА и RВ при условии присутствия низкого активного уровня сигнала разрешения чтения . При высоком уровне сигнала выходы блока Q1-4 находятся в состоянии высокого импеданса.

 

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

 

Предназначены для выполнения операции поразрядного сдвига хранимого двоичного слова информации после каждого тактового импульса (по сигналу С), т.е для перемещения всех цифр слова в направлении от старших к младшим разрядам (сдвиг вправо) или от младших к старшим разрядам (сдвиг влево). Реверсивный сдвигающий регистр способен сдвигать информацию как влево, так и вправо. Сдвиг кода влево на один разряд соответствует умножению кода числа на основание системы счисления, а сдвиг вправо - делению. Это объясняется тем, что вес каждого разряда кода для позиционной системы счисления определяется его позицией в коде. В регистре сдвиг числа на к разрядов осуществляется за к тактов или же за к микроопераций сдвига. Сдвигающий регистр содержит такие же схемы передачи по входам, как и регистры приёма и передачи информации, но триггеры должны быть двойными типа MS (см. рис 4.27). Если использовать простые триггеры, например RS, то необходимо использовать ещё один дополнительный регистр для промежуточного запоминания слова в процессе сдвига, т.е. каждый разряд регистра будет состоять из двух триггеров (рис. 4.28).

 

 

Рис. 4.27. Схема функциональная n-разрядного регистра на D – триггерах

 

 

Рис. 4.28. Схема функциональная двух разрядов сдвигающего регистра на RS – триггерах (а) и условное графическое обозначение регистра (б)

 

Сдвигающий регистр можно использовать не только для сдвига кода, но и для преобразования параллельного кода, принятого в регистр, в последовательный. Для этого достаточно принятый код сдвигать до тех пор, пока весь он не будет выдвинут из регистра. Данный регистр может выполнять функцию также преобразования последовательного кода в параллельный. С точки зрения уменьшения количества связей и оборудования регистры целесообразно строить на D – триггерах (рис. 4.27). Установка регистра в состояние «0» выполняется отрицательным импульсом, подаваемым на вход . Параллельный код поступает на входы Х1÷Х4. Запись параллельного кода осуществляется положительным импульсом, подаваемым на вход С2. Последовательный код поступает на вход D1 и записывается в первую ступень триггера с выходом Q1 по положительному фронту синхросигнала С1. В первые ступени триггеров с выходами Q2-4 по этому же фронту переписываются выходы вторых ступеней триггеров с выходами Q1-3. По заднему фронту сигнала С1 информация с первых ступеней триггеров Q1-4 переписывается в их вторые ступени.

 

4.6.3 Универсальные регистры

В сериях ИС и библиотеках БИС/СБИС программируемой логики имеется множество вариантов регистров (в схемотехнике ТТЛШ их около 30). Среди них есть многорежимные (многофункциональные) или универсальные, способные выполнять набор микроопераций. Многорежимность достигается композицией в одной и той же схеме частей, необходимых для выполнения различных операций. Управляющие сигналы, задающие вид выполняемой операции, активизируют необходимые для этого части схемы.

Типичным представителем многорежимных регистров является микросхема ИР13 серии КР1533 (см. рис. 4.29). Это восьмиразрядный регистр с возможностью двухсторонних сдвигов. Регистр имеет также параллельные входы и выходы (DSR – Data Serial Right, DSL - Data Serial Left), вход асинхронного сброса и входы выбора режима S0 и S1, задающие четыре режима (параллельная загрузка, два сдвига и хранение).

Рис. 4.29. Схема функциональная многорежимного регистра

Функционирование регистра определяется таблицей 4.2. В таблице применяются следующие сокращения состояния входов и выходов:

Х – безразличное состояние, L – низкий уровень (лог. «0»),

Н – высокий уровень (лог. «1»), - положительный фронт.

Таблица 4.2

Режим Входы Выходы
C R S0 S1 DSR DSL Dn Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7
Сброс X L X X X X X L L L L L L L L
Хранение   H L L X X X Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7
Сдвиг влево   H H H H L L X X L H X X Q1 Q1 Q2 Q2 Q3 Q3 Q4 Q4 Q5 Q5 Q6 Q6 Q7 Q7 L H
Сдвиг вправо   H H L L H H L H X X X X L H Q0 Q0 Q1 Q1 Q2 Q2 Q3 Q3 Q4 Q4 Q5 Q5 Q6 Q6
Параллельная загрузка       H   H   H   X   X   Dn   D0   D1   D2   D3   D4   D5   D6   D7

 

 

4.7 Счётчики

 

Счетчики – это последовательностные цифровые устройства, предназначенные для подсчета числа входных сигналов, фиксации этого числа в виде много разрядного двоичного числа, хранящегося в триггерах. Они обеспечивают преобразование числоимпульсного кода в двоичный или двоично-десятичный коды. Количество разрядов счетчика определено в каждом конкретном случае. Для счета и выдачи результатов в счетчиках имеется один вход и n выходов в зависимости от количества разрядов. В общем случае счетчик имеет Ксч= 2n (n = log2 M) устойчивых состояний, включая нулевое. Под действием входных сигналов счетчик, установленный в определенное состояние, сохраняет его до тех пор, пока на вход не поступит следующий сигнал. Каждому состоянию счетчика соответствует порядковый номер 0, 1, 2, . . ., Ксч. – 1. Если в момент времени t счетчик находится в i-м состоянии, то оно определяет число поступивших на счетчик сигналов. При подаче на вход счетчика Ксч. - го входного сигнала на выходе его возникает сигнал переполнения и счетчик возвращается в начальное состояние, т.е. счет единичных сигналов осуществляется в нем по модулю Ксч. или с периодом счета Т=Ксч. Специфичной для счетчиков операцией является изменение их содержимого на единицу (может быть и условную).

Счетчики применяют для формирования адресов, команд, счета количества циклов выполнения операций, формирования кода в аналого-цифровых преобразователях и т.п.

По способу кодирования внутренних состояний различают двоичные счетчики, счетчики Джонсона, счетчики с кодом «1 из N» и др.

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

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

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

Основными характеристиками счетчика являются модуль счета (период счета или коэффициент пересчета), разрешающая способность, время регистрации и емкость. Модуль счета характеризует число устойчивых состояний счетчика, т.е. предельное число входных сигналов, которое может сосчитать счетчик. Разрешающая способность – минимально допустимый период следований входных сигналов, при котором обеспечивается надежная работа счетчика. Чем больше частота поступления счетных сигналов, тем большее быстродействие требуется от счетчика. Время регистрации – интервал времени между моментами поступления входного сигнала и окончания самого длинного переходного процесса в счетчике. Емкость счетчика – максимальное число единичных сигналов, которое может быть зафиксировано на счетчике. Эта характеристика счетчика зависит от основания системы счисления и числа разрядов.

Как и любой автомат, счетчик можно строить на триггерах любого типа, однако удобнее всего использовать для этого Т- (счетные) или JK-триггеры, имеющие при J=1 и K=1 счетный режим.

Простейшим счетчиком можно считать Т – триггер. Он считает до двух. Основой для построения счетчиков являются асинхронные или синхронные Т – триггеры, реализованные на D – триггерах с динамическим управлением или на JK – триггерах. Используется свойство Т – триггеров изменять свое состояние при подаче очередного сигнала на счетный вход Т.

На рисунке 4.30 показана схема трех разрядов суммирующего счетчика, построенного на Т – триггерах. Логика его работы представлена в таблице переходов (табл.4.3)

Таблица 4.3

Вход X Состояние Режим
Хранение
Счет

 

Рис. 4.30 Схема функциональная счетчика на Т – триггерах (а) и его временная диаграмма (б).

4.7.1 Счетчики с непосредственными связями и последовательным переносом

 

В этих счетчиках каждый последующий триггер (i + 1)-го разряда запускается от информационных выходов (,) предыдущего триггера i–го разряда, а счетный сигнал поступает на вход триггера первого разряда.

Схема не синхронизированного двоичного четырехразрядного суммирующего счетчика на триггерах с последовательным переносом сигнала приведена на рис. 4.31а, временная диаграмма его работы – на рис.4.31б.

Таблица 4.4

Xсч. Q4 Q3 Q2 Q1   Xсч. Q4 Q3 Q2 Q1

 

В таблице 4.4 отражены состояния триггеров счетчика при воздействии серии входных сигналов Xсч., подаваемых на счетный вход первого разряда.

Рассмотрим работу счетчика, полагая, что в исходном состоянии в нем записан код 0000. В счетчике выход каждого предыдущего триггера Qt-1 соединен с входом синхронизации Сt последующего триггера. На входы J и K триггеров подаются сигналы 1. Первый входной сигнал Xсч. устанавливает триггер Т1 счетчика в состояние 1, остальные триггеры счетчика останутся в состоянии 0. Второй входной сигнал устанавливает триггер Т1 в состояние 0; третий – вновь в состояние 1 и т.д. Входными сигналами триггера Т2 будут сигналы, снимаемые с прямого выхода триггера Т1. Таким образом, первый раз в состояние 1 триггер Т2 установится только после того, как на выходе триггера Т1 пройдет первый сигнал, а в состояние 0 – после того как пройдет второй сигнал, и т.д. Входными сигналами триггера Т3 будут уже сигналы, снимаемые с прямого выхода триггера Т2, и т.д. После того как на вход счетчика будет подана серия сигналов (импульсов), например, пройдет пять входных импульсов, на выходе триггеров счетчика устанавливается код 0101 (т.е. 5), т.е. счетчик подсчитывает количество импульсов, поданных на его вход.

Обычно счетчик имеет цепь установки в состояние 0 (Уст.0), но начальное состояние триггеров необязательно должно быть нулевое. В счетчик может быть записано заранее некоторое число и уже с него начинается операция счета единиц.

 

Рис. 4.31. Схема не синхронизированного двоичного четырехразрядного счетчика на JK – триггерах с последовательным переносом (а) и временная диаграмма его работы (б)

 

Недостаток рассмотренного счетчика заключается в том, что он имеет зависимость длительности переходного процесса, определяющего время регистрации, от его разрядности. С ростом разрядности счетчика понижается предельная частота его работы. Это связано с тем, что возрастает задержка поступления сигнала на вход С некоторого i-го разряда относительно времени поступления входного сигнала Xсч. на вход С младшего разряда счетчика. Из временной диаграммы видно, что такая задержка может привести к искажению информации в счетчике (момент времени t = 8).

4.7.2 Счетчики с параллельным переносом

 

Для повышения быстродействия счетчики выполняются с параллельным переносом. На рисунке 4.32 изображена схема четырехразрядного счетчика на JK-триггерах с параллельным переносом. В качестве схем И использованы входы триггеров &J и &K.

Отличительной особенностью схемы является то, что сигналы с выходов i–х разрядов подаются на информационные входы JK триггеров (i + 1)-х разрядов.

Из схемы на рисунке 4.32 видно, что с возрастанием порядкового номера триггера увеличивается число входов в элементах И в JK-триггерах. Т.к. количество входов J и K и нагрузочная способность выходов триггеров ограничены, то и разрядность счетчика с параллельным переносом невелика и равна обычно четырём. Поэтому при длине счетчика, большем максимального числа входов J и K, счетчик разбивается на группы, и внутри каждой группы строятся цепи параллельного переноса. Подобным способом организуется счетчик с частично параллельным переносом. Длительность переходного процесса в таком счетчике равна сумме длительностей переходного процесса в каждой группе разрядов.

 

Рис.4.32. Схема четырехразрядного двоичного счетчика на JK-триггерах с параллельным переносом

 

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

Быстродействие рассмотренных счетчиков зависит как от скорости переброса триггера младшего разряда, так и от времени распространения сигнала переноса по цепи переноса.

4.7.3 Реверсивный счетчик с последовательным переносом

В реверсивных счетчиках предусматривается специальная переключающая схема для переключения счетчика либо в режим работы на сложение, либо в режим на вычитание. На рисунке 4.33 приведена схема не синхронизированного реверсивного счетчика с последовательным переносом на три числовых разряда на JK-триггерах с М = 23.

 

Рис. 4.33. Схема функциональная не синхронизированного реверсивного счетчика (а) и временная диаграмма его работы (б)

 

В зависимости от режима работы в счетчике присутствует постоянный управляющий сигнал ”Вычитание” или ”Суммирование”. На вход С первого разряда счетчика подается серия входных сигналов.

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

Для задания начального состояния счетчика в нем предусмотрены цепи параллельного приема информации.

 

В таблице 4.5 отражено состояние реверсивного счетчика, работающего в режиме вычитания.

 

 

Таблица 4.5

Xсч. Q3 Q2 Q1   Xсч. Q3 Q2 Q1

 

 

4.7.4 Двоично-кодированные счётчики с произвольным модулем

 

Количество просчитанных счетчиком импульсов можно определить по коду, записанному в триггеры счетчика. Код в счетчике точно соответствует числу поступивших на вход импульсов, выраженному в двоичном коде. Если после полного заполнения счетчика единицами (код 111…1) не прекратится подача входных импульсов, то после перехода счетчика через состояние 0 во всех разрядах подсчет импульсов начинается сначала. Этот режим работы счетчика называется циклическим. За один цикл работы на счетчик поступает 2n импульсов (n – количество разрядов счетчика) т.е. модуль счета такого счетчика М=2n. Иногда требуется, чтобы число импульсов в цикле было отличным от 2n, например, если нужно организовать пересчет на десять (количество разрядов этого счетчика должно быть равно четырем, т.к. ближайшее число 2n, большее 10, равно 16). Чтобы модуль счета был равен десяти, необходимо после каждого десятого импульса установить все разряды счетчика в 0. Пересчет на М ¹ 2n всегда приводит к некоторому усложнению схемы счетчика из-за необходимости организации установки в 0 отдельных триггеров счетчика. Модуль счета является одной из характеристик счетчика. Если обычный суммирующий счетчик имеет n разрядов, то лишь после подачи 2n входных импульсов образуется перенос из старшего разряда. Следовательно, модуль счета такого счетчика равен 2n. Модуль счета М счетчика определяет отношение частоты импульсов, подаваемых на его вход, к частоте импульсов, образующихся на выходе его старшего разряда.

С учетом всего выше изложенного следует, что счетчики с модулем, не равным целой степени числа 2, называются счетчиками с произвольным модулем. Для построения таких счетчиков берется разрядность , где - знак округления до ближайшего большего целого числа. Иными словами, исходной структурой как бы служит двоичный счетчик с модулем 2n, превышающим заданный и ближайшим к нему. Такой двоичный счетчик имеет 2n-М=L лишних (неиспользуемых) состояний, подлежащих исключению.

Способы исключения лишних состояний многочисленны, и для любого М можно предложить множество реализаций счетчика. К примеру, исключая некоторое число первых состояний, получим ненулевое начальное состояние счетчика, что приводит к отсутствию естественного порядка счета и регистрации в счетчике кода с избытком. И наоборот – исключение последних состояний позволяет сохранить естественный порядок счета. Сложность обоих вариантов принципиально одинакова, поэтому далее будем ориентироваться на схемы с естественным порядком счета. Состояния счетчиков во всех случаях предполагаем закодированными двоичными числами, т.е. будем рассматривать двоично-кодированные счетчики.

В счетчиках с исключением последних состояний счет ведется обычным способом вплоть до достижения числа М-1. Далее последовательность перехода счетчика в направлении роста регистрируемого числа должна быть прервана, и следующее состояние должно быть нулевым. При этом счетчик будет иметь М внутренних состояний (от 0 до М-1), т.е. его модуль равен М.

Остановимся на двух методах построения счетчика с произвольным модулем: модификации межразрядных связей и управлении сбросом.



<== предыдущая лекция | следующая лекция ==>
D-триггер | Построение счетчика методом модификации межразрядных связей


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.019 сек.