g614380

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

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

g614380    0

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

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

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

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


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
o_l_e_g    1 613

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

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


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

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    597

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сообщения

    • К цифровому, еще хотите добавить шум ДС/ДС? Если уж так не можете отфильтровать. Если принципиально двухполярка, примените низковольтный ОУ и поделите  5 В банальным делителем пополам.  
    • Можно добавить УЗИП на вводе и по желанию на группы в щиток. В некоторых поселениях без такой штуки в ВУ не подключат к ЛЭП . Говорят в нутре у них мощные варисторы и даже от попадания молнии защищают.
    • @Pont 007 Я, признаться, не знаю зачем автору темы это нужно, ну уж коли спросил..., а питание с аудиокарт не видел ни разу, разумеется брать +5 вольт с материнки просто так нельзя, помехи будут жуть. @pips Конечно я работал и с этими микросхемами ещё в советской реинкарнации, названия уж не помню. Что касается тактовой частоты ещё раз говорю она здесь особой роли не играет, все равно по питанию как с +5 так и с -5 надо ставить фильтры. На мой взгляд лучше это LC фильтры, индуктивность типа такой или такой выводом от источника напряжения, а другим выводом на  питание ОУ и конденсатор на землю микрофарад 220 + керамика 0,1 мкФ. Просто рисовать неохота, просто ведь.
    • В "Моделисте-конструкторе" нечто подобное делали - трансформатор для сварочника из электродвижка:   МК 8-1992, стр. 19 МК 1-1996, стр. 11 МК 9-2000, стр. 11
    • wm5102e где стоит: Lenovo Yoga Tablet 2 10-51; Samsung Galaxy S4 GT-I9500; Meizu MX3;
    • @o_l_e_g  Спасибо. Но это вам в соседнюю мою тему, я там с этим вопросом уже обсуждал. )))) Если кратко, то весь цифровой бред (шум питания) который по USB питанию попадает на вход усилителя. А я не знаю как его фильтровать нормально. Да и вообще костыль всё это.   В общем эту тему средней точки, пожалуйста тут не развивайте, если хотите помочь молости прошу, Тема моя ниже по ссылке:   Спасибо за совет, но я что буду приходить к каждому с паяльником со словами "давайте мы сейчас ваш комп разберем, попаяем, а потом продолжим".  В общем ваши предлоложения касательно зачем мне это нужно были не верны, спасибо.