Как известно при нажатии кнопок, при контакте возникает дребезг, и вместо нужного простого перехода из нуля в единицу одной ступенькой возникает сигнал в несколько скачков как показано на рисунке 3.2.1
Рис 3.2.1 Сигнал включения с дребезгом и без дребезга
Антидребезговая защита была реализована в модуле antibounce. Принцип его работы, основан на счетчике и одном триггере защелке. При возникновении дребезга счетчик начинает считать до определенной константы в программе она названа delay т.е. задержка и если по истечении счета на входе по прежнему стоит единица то триггер защелка перещелкивается и возникает переключение, смотри рис 3.2.2.
Рис 3.2.2 Схема антидребезгового устройства
Счетчик реализован с посредством макрофункции Lpm_counter. Встроенная в среду макрофункция Lpm_counter, есть ни что иное, как счетчик с задаваемыми пределами и параметрами, созданная для облегчения процесса разработки подобных устройств.
3.2.1,1 Встроенная макрофункция – счетчик lpm_counter
Двоичный счетчик с возможностью прямого и обратного счета и синхронного и асинхронного сброса. Lpm_counter описывается как переменная в разделе VARIABLE. Форма описания счетчика следующая:
Имя_счетчика : lpm_counter WITH STATES (Параметры счетчика);
Например
COUNTER : lpm_counter WITH (lpm_width=4);
Таблица 3.2.1 Параметры счетчика
Параметры счетчика | Тип | Обязательный | Описание |
LPM_WIDTH | Целочисленный | Да | Ширина счетчика(число битов на выходе) |
LPM_DIRECTION | Строковый | Нет | Устанавливается в прямом “UP” или обратном “DOWN” направлении идет счет, по умолчанию стоит прямой. |
LPM_MODULUS | Целочисленный | Нет | Установка максимума счета, если параметр не усыновлен то счет не ограничен. |
LPM_AVALUE | Целочисленный/Строковый | Нет | Ограничивает максимум счета 32 битами во избежания перегрузки счетчика, когда поведение счетчика не определено при переполнении |
LPM_SVALUE | Целочисленный/Строковый | Нет | Постоянное значение означает что нагрузка включается по переднему фронту clock когда sset или sconst в “1”. Этот параметр должен быть использован если sconst используется |
LPM_HINT | Строковый | Нет | Позволяет с большой точностью перевести текстовый файл из AHDL в VHDL. По умолчанию не используется. |
LPM_TYPE | Строковый | Нет | Связывает LPM_имя с VHDL графическим файлом |
CARRY_CNT_EN | Строковый | Нет | Принимает значения “SMART”, “ON”, “OFF”. При включении lpm_counter функция cnt_en передает сигнал через несущую цепочку. В некоторых случаях, этот параметр используется как параметр установки появления изменения в скорости, но при желании это можно выключить. По умолчанию стоит “SMART”, который сохраняет лучшие отношение между скоростью и размером. |
LABWIDE_SCLR | Строковый | Нет | Принимает значения “ON”,”OFF” или не используется. По умолчанию стоит “NO”. Он позволяет выключить использование LAB-ширины sclr особенно при использовании устройств на базе FLEX 6000. Уменьшает использование случайных библиотек, и таким образом даёт возможность использовать высшей логики плотнее, когда SCLR не используется в LAB. |
Таблица 3.2.2 Таблица истинности lpm_counter
Входы | Выходы | Функции | |||||||||
aclr | aset | aload | clk_en | clock | Sclr | sset | sload | cnt_en | updoun | q[] | |
1 | x | x | x | x | x | x | x | x | x | 000… |
|
0 | 1 | x | x | x | x | x | x | x | x | 111… | |
0 | 1 | x | x | x | x | x | x | x | x | LPM_AVALUE | Асинхр. установка значений |
0 | 0 | 1 | x | x | x | x | x | x | x | data[] | Асинхр. загрузка данных |
0 | 0 | 0 | 0 | x | x | x | x | x | x | q[] | Текущее значение |
0 | 0 | 0 | 1 | ò | 1 | x | x | x | x | 000… | Синхронный сброс |
0 | 0 | 0 | 1 | ò | 0 | 1 | x | x | x | 111… | Синхронная установка |
0 | 0 | 0 | 1 | ò | 0 | 1 | x | x | x | LPM_SVALUE | Синхронная установка значении для LPM_SVALUE |
0 | 0 | 0 | 1 | ò | 0 | 0 | 0 | 0 | 0 | q[] | Текущее значение |
0 | 0 | 0 | 1 | ò | 0 | 0 | 1 | x | x | data[] | Синхронная загрузка данных |
0 | 0 | 0 | 1 | ò | 0 | 0 | 0 | 1 | 1 | q[]+1 | Счет в прямом направл. |
0 | 0 | 0 | 1 | ò | 0 | 0 | 0 | 1 | 0 | q[]-1 | Счет в обратном направл. |
Дата: 2019-12-22, просмотров: 259.