g614380

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

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

g614380    0

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

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

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

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


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

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

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


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

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    651

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сообщения

    • Коллеги, предлагаю перейти в русло интеллигентного обсуждения данного вопроса   В результате бурного обсуждения было высказано некоторое сомнение в работоспособности данного изделия. Нисколько не умаляя заслуг ТС-а в изучении фундаментальной физики (аж целых 15 лет!!! ), хочу спросить автора каким образом и по каким правилам он проводил настройку и калибровку прибора, о чём он уверенно заявил в 1 посту: Так же хочется спросить, как обеспечивается соответствие протекающего тока и тока, указанного на шкале прибора? Ибо даже такой плохонький источник, как интернет, в первом же запросе выдаёт: "Тело человека состоит из различных тканей, и каждый вид тканей обладает своим сопротивлением. Так например, сухожилия, кожа, жировая ткань, хрящи и кости имеют удельное сопротивление порядка 3 - 20 кОм/м. Кровь, мышцы, лимфа, головной и спинной мозг — всего от 0,5 до 1 Ом/м" , при этом на другой странице: "Сопротивление кожи, а следовательно сопротивление тела в целом резко уменьшается при повреждении ее рогового слоя, наличие влаги на ее поверхности, интенсивном потовыделении и загрязнении". Таким образом, гарантировать хоть какое то попадание в шкалу при такой схеме очень проблематично.
    • Модель не указал, ну да ладно. Выход пара наружу осуществляется в 2х вариантах, при качении утюга вода попадает в камеру нагрева и далее в виде пара наружу, т.е. частями или при нажатии отпаривания включается компрессор, в этом случае пара выходит много и это работает в вертикальном положении но не во всех моделях. Для отсутствия накипи используйте дистиллят.
    • Это вообще флеш память, какой нахрен, PIC?  Такие микросхемы часто используются в компьютерных материнках. Если задача одноразовая, поспрашивай в серьёзных мастерских по ремонту оргтехники, у них должен быть программатор, прошьют. За денежку, разумеется.
    • Таки я верю больше здравому смыслу, и мнению официального специалиста в теме (который здесь высказался), нежели сомнительным статейкам в сети и залётному барыге - эзотерику.
      Че-то дискуссия завернула вообще уж в какую-то бесовщину. Осталось пентаграмму на полу начертить и вызвать дух доктора Попова.
    • Античные фантазии. Родом из времен, когда земля была плоская и покоилась на трех китах/слонах. В особенности впечатлило вот это:  Да что там античность. И в наше время бредятины хватает. За каждой такой выдумкой скрываются или досужие любознательные бездельники, или глупцы, или те, кому это выгодно. Что-то в тему никто не вспомнил электроакупунктуру. Лет 30 назад эти самопальные приборчики были модными. Режим поиска точек, режим подачи импульсов. Частота, скважность, сила тока, все дела. Наверняка есть сертифицированные промышленные изделия, а, @Falconist ?