Перейти к содержанию

Инкрементирующе-Декрементирующий Счетчик.


g614380

Рекомендуемые сообщения

Добрый день, Уважаемы коллеги! Начинаю разбираться в программировании ПЛИС на Verilog.

Появилась задача описать двоичный семиразрядный счетчик, который бы по нажатию одной кнопки инкрементировал бы свое значение, а по нажатию второй- декрементирова. По нажатию кнопок на порты ПЛИС приходят положительние импульсы, одно нажатие, один импульс. Прошу тапками не закидывать, только начал своение, и никак не могу решить такую простенькую задачку. Подкиньте мыслю:-)

Прошу прощения за ошибки и опечатки, пишу с телефона.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

Errare humanum est. Коли людЯм позволено, что же о нас то говорить!
 

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

module cnt_inc_dec(
clk,
rstn,
inc_pulse,
dec_pulse,
cnt_out
);

input clk;
input rstn;
input inc_pulse;
input dec_pulse;

output [6:0] cnt_out;

reg [6:0] cnt;

always @(posedge clk or negedge rstn)
if(!rstn) cnt <= 7'b0;
else
begin
if(inc_pulse) cnt <= cnt + 7'b1;
else if(dec_pulse) cnt <= cnt - 7'b1;
end

assign cnt_out = cnt;

endmodule

Простейший вариант, поскольку не описано поведение при одновременном приходе обоих импульсов.

Изменено пользователем Vascom
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Спасибо за код. Тут все понятно, приходит тактовый сигнал clk на счетчик,и если inc_pulse то инкрементируем, а если dec_pulse декрементируем. Это все предельно ясно. Но в этом случае если какой либо из разрешающих сигналов постоянен и длительность этого сигнал больше длительность клоков, то счетчик за врнмя удержания этого сигнала проинкрементируется не на единицу, а к примеру на 10ть, ну или сколько там тактовых импульсов прилетит за время разрешающего сигнала. А вот как считать именно количество нажатий кнопки в одну сторону и потом вычитать количество нажатий другой кнопки. Можно клоковый импульс сделать больше по времени чем время зажатия конопки, но все равно, если кнопкк все же зажать, то счетчик пойдет считать ипульсы. А как сделать чтоб при зажатой кнопке он не считал а именно инкрементировался на один, а при зажатии другой, декрементировался с предыдущего значения на один?

Ссылка на комментарий
Поделиться на другие сайты

А, не по клоку...

Правильнее сделать, чтобы импульсы были всегда длиной один клок, то есть выделить фронт импульса. Сделать это проще простого, надо лишь добавить:

reg inc_pulse_d;
wire inc_pulse_1;

always @(posedge clk or negedge rstn)
if(!rstn) inc_pulse_d <= 1'b0;
else	 inc_pulse_d <= inc_pulse;

assign inc_pulse_1 = inc_pulse & ~inc_pulse_d;

И использовать полученный inc_pulse_1.

Для надёжности можно предварительно inc_pulse защёлкнуть один раз по клоку.

Изменено пользователем Vascom
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • @vaegor У меня описанная вами неполадка не наблюдается. Но я на всякий случай в профилактических целях подправил немного программу. Проверяйте. Если текущее время при установке будильника будет сбиваться, то мне понадобится более точная информация. Насколько сбивается, и зависит ли отклонение от времени установки будильника.  Желательно сделать следующий опыт: войти в режим установки будильника и выждать некоторое время после установки будильника, например минуты 2. Затем вернуться в режим часов и посмотреть есть ли отклонение текущего времени.   FM_KOMBI_1.3.hex
    • Как это "ни слова"? Самый главный принцип - потенциал неинвертирующего входа является всего-навсего ОПОРНЫМ. Всё управление идёт по инвертирующему входу, охваченному ООС. Вот параметры этой самой цепи ООС и являются главными и единственными, требующими учёта и расчёта.
    • При 12-вольтовом питании можно и BD135/BD136. Можно и пары 137/138 и 139/140, они имеют большее допустимое коллекторное напряжение, а остальные параметры такие же.
    • Мне почему-то вспоминается фильм "Особенности национальной охоты"...
    • Попытка уменьшить проникновение помех от анодного питания, я так думаю... Пульсации с анода лампы первого каскада (по сути с делителя внутреннее сопротивление лампы / анодное сопротивление) попадают на сетку выходной лампы. Если такое же напряжение помехи подать в катод этой лампы, то можно её скомпенсировать. Кроме того, считается, что при переносе блокирующего катодного конденсатора в анодную часть переменный ток в выходном каскаде замыкается по более короткому пути. Причём можно уменьшить ёмкость этого конденсатора. Правда, знал ли об этих ньюансах составитель этой схемы, неизвестно...
    • He3haika, а вы видели его прибор? Я же писал модификаций полно и чтобы выкладывать здесь схему надо знать что у него. А он глубоко это засекретил. Ни фото ни описания на словах. Вот я уверен что у него ТРЕХЭТАЖНЫЙ галетник, а у вас на схеме один.  Ё-МАЁ, лишь бы что то ляпнуть? Питание на элементах чисто для измерения сопротивлений.
×
×
  • Создать...