g614380

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

6 сообщений в этой теме

g614380    0

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 640

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    644

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
g614380    0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    644

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
g614380    0

Вот спасибо за оперативные ответы. Пошел разбираться

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • Самый простой вариант (хотя не для всех) - взять тряпку и сделать влажную уборку на столе. Вернуть на место потерянные резиновые ножки корпуса. Провести профилактику системы вентиляции (убрать пыльную "шубу" с лопастей вентилятора, входной и выходной сеток-фильтров)... И на будущее. Не загромождать выход воздушного потока посторонними предметами и не засовывать бумажные листки под ноут.
    • Не, там был самолёт. Режиссёру надо показать устройство и принцип работы двигателя самолёта. Тогда не придумал бы такую хрень.
    • Мы знаем, что в отрыжку... а рекламщики нет, они ж дебилы... только дебил может придумат дебильное объяснение про маленькие самолётики, которые доставляют.... но не каждый сможет. Чтоб так креативить, точняк надо что-то принимать или курить. Реклама авто... тачка летит по дороге, голос за кадром рассказывает как ништяково она едет... а дорога пуста! Для этой тачки город внезапно вымер. А это... И пусть весь мир подождёт... этот слоган надо написать на двери туалета в вагоне поезда. Зашёл, повернул ручку и хренакс- вместо банального "занято" появляется такая вот "философия".
    • страницы такой я не знаю, такого вопроса ни у кого не возникало. тут все просто. с выходов обоих ОУ сделан сумматор. и и какой из ОУ "пересилит", то и будет снижать базовый потенциал, возьмет управление на себя. и да, архив я нашел быстро потому, что это было сравнительно недавно. но помнить, что находится на каждой странице я не могу...
    • 1) Браться за коммерческую (!) работу, не имея абсолютно всех параметров применяемых компонентов (включая геометрические размеры) - откровенное ламерство. Даже если очень сильно деньги нужны - на санкциях за кривую разводку можно потерять больше заработанного. 2) @nvju1967  абсолютно прав. Если заказчик поленился предоставить полного объема информации - пускай потрудится, апаивая ту или иную перемычку. Лень наказуема. 3) Оффтоп, конечно, но если у меня бывают схожие проблемы (неполный объем информации, а делать девайс надо срочно) - спокойно иду на усложнение схемы, чем снимаю будущие проблемы со своего афедрона. К примеру, проект схемы автостробоскопа, срабатывающего от любой полярности импульса с датчика искрообразования (компараторы DA1.1, DA1.2): В "железе" эта схема реализована не была, т.к. после проведенного дополнительного исследования было установлено, что полярность запускающего импульса положительная в любом случае. Исключительно как пример практической реализации п. 2).
    • не исключает подбора Это всё моя лень: проще даже полчаса времени потратить для разработки схемы с карандашом на бумаге, чем 5 минут подбирать... Проще поставить ЛМ по питанию. Но подбирать режим ОУ в зависимости от применённого микрофона и напряжения питания в угоду упрощения схемы на половину десятка мелких деталей и разводки платы... А схема вполне пригодна для ЦМ и с Скор., и без неё. Я ж не против! С уважением В. ПС. На научность никогда не претендовал. Но моя лень давно научила рассуждать конструктивно.