РадиоКот :: Счетчик - часть 3. Апгрейд.
Например TDA7294

РадиоКот >Обучалка >Микроконтроллеры и ПЛИС >Программируемая логика Altera - первые шаги >

Теги статьи: Добавить тег

Счетчик - часть 3. Апгрейд.

Автор:
Опубликовано 04.11.2005

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

Апгрейд будет заключаться в добавлении следующих вещей:

  1. Вход синхронного и асинхронного сброса (R и SR)
  2. Вход разрешения счета E
  3. Входы параллельной синхронной загрузки данных D[3..0], PE
  4. Выход переполнения Ovf

Поехали.

Сначала приделаем к счетчику входы сброса.
Открываем файл counter.gdf.
Вызываем элемент input. Обзываем его R - это будет асинхронный сброс.
Вызываем input еще раз (или копируем существующий), обзываем его SR. Это будет синхронный сброс.

Чем различаются синхронный и асинхронный сбросы?

Синхронный - происходящий по фронту тактового импульса;
Асинхронный - происходящий в любой момент времени, не зависимо от тактового сигнала.

Думаем…
Асинхронный сброс присобачить проще простого. На триггере DFF есть входы асинхронного сброса. Синхронный - его можно организовать, подав на входы всех триггеров нули. Поскольку у нас на входы уже идут сигналы с элемента increment, то подавать нули мы будем посредством элемента "И".

Дополняем нашу схему:

Схема счетчика с синхронным и асинхронным сбросом

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

Ну теперь давайте сообразим с загрузкой. Тут уже не обойтись без мультиплексора.

Мультиплексор - это "переключатель". То есть, у него много входов и один выход. В зависимости от заданного адреса, мультиплексор подключает к выходу соответствующий вход.

В нашем случае, нужен мультиплексор на два 4-разрядных входа. Давайте его создадим.

Итак, товарищи творцы и созидатели - делаем раз: File>New>Graphic Editor File.
Делаем два: вытаскиваем на свет божий 9 входов и 4 выхода.
Можно вытащить один вход и один выход, а потом накопировать сколько угодно любимой комбинацией плагиатора (Ctrl+C - Ctrl+V). Или, просто таская элементы с зажатой клавишей Ctrl.

Восемь входов - это 4+4 (называем их соответственно D00…D03 и D10…D13)
Девятый вход - адресный - A0. Если на нем 0 - подключается группа входов D0, если 1 - D1. Тут все понятно.
Выходы - Q0…Q3. Нарисовали…

Входы и выходы

Рисуем таблицу истинности для 2 входов и 1 выхода.

     D0.0 D1.0 A0 | Q0
     -------------|---
1.    0    0    0 | 0
2.    0    0    1 | 0
3.    0    1    0 | 0
4.    0    1    1 | 1
5.    1    0    0 | 1
6.    1    0    1 | 0
7.    1    1    0 | 1
8.    1    1    1 | 1

Во-общем то и без нее все было ясно. Рисуем:

Схема мультиплексора

Нарисовали? Сохраняем файл под именем mux_2x4.gdf
Ставим на этот файл текущий проект (Set Project to Current File) - для того чтобы скомпилировать и проверить работу.
Компилируем. Проверяем на Waveform Editor"е…

Временная диаграмма работы мультиплексора

Проверили. Ну, вроде все работает как надо.
Создаем символ (Create default symbol). Закрываем, возвращаемся к схеме счетчика. Сразу ставим на нее проект, а то забудем. Вызываем символ mux_2x4.

Символ mux_2x4

Вставляем его в схему…

Та же схема счетчика, с добавленной синхронной загрузкой

Итак, теперь когда на входе PE - лог. 1, сигнал на триггеры подается с элемента increment. То есть, счетчик считает.
Когда на PE - 0, триггеры подключаются к входу данных D3..0.

Еще один момент: мы кажется хотели сделать разрешение счета? Ну так значит нужен еще один мультиплексор. Этот мультиплексор будет подавать на входы триггеров данные либо с инкрементора, либо напрямую с выходов самих себя. Соответственно, в первом случае будет счет, во втором - не будет. То есть, с каждым фронтом тактовой частоты триггеры будут хлопать в себя, себя же.
Нарисую только ту часть схемы, в которой произошли изменения:

Та же схема счетчика, с добавлением разрешения счета

Когда на CE - лог.0, счета нет (сигнал берется напрямую с выходов триггеров),
когда лог.1 - сигнал идет с инкремента - счет есть.

Так. Осталось сделать только выход переполнения. Что это такое?
На выходе переполнения появляется сигнал, когда счетчик досчитывает до максимального значения. У 4-разрядного счетчика может быть только 2^4 = 16 значений. От 0 до 15. То есть, 15 - это максимальное значение. Значит, нам надо навертеть такую схему, которая будет выдавать единицу только на число 15.
В двоичное с.с. 15 - это 1111. Путем неимоверных умственных усилий можно понять, что с поставленной задачей с легкостью справится один-единственный элемент И на 4 входа. Называется он and4.

Внешний вид элемента and4

Ну чего, ставим в схему :

Окончательная схема счетчика во всей красе

Ну вот, что хотели - соорудили. Теперь можно сделать это все символом. Компилируем, делаем.

Получился вот такой симпатичный элементик:

Элемент counter

Это все на сегодня. Дальше будет хуже :)

<<--Вспомним пройденное----Поехали дальше-->>




Как вам эта статья?

Заработало ли это устройство у вас?

10 0 0
2 0 0