g614380

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

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

g614380    0

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

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

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

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


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

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

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


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

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    647

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сообщения

    • Ленц здесь не причем ... Это по следам какого-то очередного открытия из сарая, которое "не в состоянии объяснить официальная физика"? 100 МГц при такой мощности - параметры эфирного ТВ передатчика в городе. Никто на досуге этим заниматься не будет ... 
    • Это может защита срабатывать, или питания не хватает ИРке, проверьте цепь питания... Стабилитрон, диоды, элоктролит по питанию ИРки...
    • @grek685 , вопрос о "правильном звуке"  не имеет однозначного ответа. Это всё очень относительно. И я, конечно, дико извиняюсь, но судя по Вашим вопросам, Вам ещё очень рано собирать такой усилитель. Это очень опасное и сложное мероприятие - и если Вы думаете, что на "опасность" можно наплевать, то вспомните, как вычисляется энергия, накопленная конденсатором... Ну, а сложность будет скрываться в конструктиве - при высоком напряжении питания качеству изготовления выходных трансформаторов должно быть уделено особое внимание. Блок питания получится совсем "недецких" размеров и тоже должен быть сделан качественно и с учётом высоковольтности(там же кроме накальных напряжений ещё  и два "высоких" с задержкой их включения надо делать). Ну, и "по деньгам" это будет совсем недёшево...
    • Благодарю. Буду изучать схемы с ГУ-72, теперь. Я верно понимаю, что триодное включение лампы даёт самый "правильный" звук? Да уж 1000в это круто! Ну вот хочется, но страшно 1000в !)  Главное уже понимаю, что работа предстоит опасная.  Благодарю Вас за советы. Пошёл искать, изучать схемы на гм.
    • Ну и что же по-твоему может дать информация о производителе этого динамика?   Порой даже брендовые производители подобных динамиков не выкладывают в открытый доступ полную тех. инфу о своих изделиях, чего уж тогда ожидать от азиатских "штамповщиков".  У тебя имеется двухкатушечный динамик, и в принципе не важно кто его производитель - азиаты сейчас научились делать не хуже брендовых производителей, зачастую являясь нет только поставщиками комплектующих для этих "брендов", но и непосредственными производителями изделий этих "брэндов".  Делай серию замеров TS-параметров с одной катушкой, с другой, с их параллельным включением, с последовательным - это даст больше информации как о характеристиках динамика, так и о его тех. состоянии и качестве изготовления, что позволит сделать собственные выводы о производителе, кем бы он не был и какой бы красивый пинжак на себя не натягивал. Но главное, реальные параметры позволят не только точно рассчитать  "короб" для этого динамика, но и сделать наиболее правильную инсталляцию всей акустической системы авто, в составе которой предполагается использовать этот сабвуфер. 
    •   2х25 это переменка у меня, нашел еще в закромах SS510 100V 5A
    • Диодов хватит, если питание не поднимать выше  +/- 25 В.