g614380

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

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

g614380    0

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

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

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

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


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

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

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


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

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    657

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сообщения

    • Уважаемый serste! Тон Вашего поста напоминает реакцию человека, которому нечаянно наступили на мозоль. Особенно удивляет Ваше стремление спрогнозировать ответ, который Вы, по всему, ожидаете услышать. Применяя для этого написание текста в верхнем регистре, что не приветствуется Правилами форума. Не очень боясь ошибиться, скажу, что усилитель имелся ввиду ламповый. Правильно спроектированный и настроенный. Места здесь такие. Что касается ресиверов, перечинил не мало и знаю их основную беду - редко в каком есть БП достаточно мощный, чтобы тянуть хотя бы пару каналов на полную заявленную мощность. Не говоря, уже, о 5-ти. И не зря, редко в каком есть усилитель саба. Из тех же причин дохлости БП.  В кино это не самая большая проблема, если учесть, что внимание не концентрируется исключительно на прослушивании саундтрека. Но... у меня, тоже, за плечами жизнь, отсутствие абсолютного слуха и, какой-никакой, личный опыт, включая... много чего. К стати, абсолю́тный слух, всего то, способность определять абсолютную высоту музыкальных звуков. А ля первой октавы, оно и будет ля первой октавы, хоть через радиоточку, хоть через топовый ресивер. Личный опыт мне говорит, что не требуется музыкального образования, чтобы понять и оценить звучание системы. Как не требуется знание хореографии, чтобы заметить из зала разницу в танце двух балерин. Вы просто слушаете музыку. Желательно, разноплановую. Если у вас не возникает при этом дискомфорта, значит система Вас полностью устраивает. В ином случае, через время, Вы неизбежно поймёте, что есть "слабое звено". Это может быть любой компонент системы. Но, определяется он точно. По себе знаю. Меняете. Система делает "шаг вперёд". И Вы, некоторое время, наслаждаетесь "подросшим звуком". Но, растёте и сами. И, вполне можете обнаружить следующее "слабое звено". Последовательность действий описана выше. Процесс итерационный, и заканчивается либо тем, что Вам удаётся создать систему, которая Вас устраивает (это сходимость), либо вложение капитала больше не даёт адекватного прироста в звуке (это асимптота). И Вы понимаете, что хватит. Третьего варианта, в чистом виде, не встречал. Так что, разница в звучании ресивера и лампового усилителя, всё таки существует. Особенно это слышно при прямом сравнении. Неоднократно наблюдал на реакции даже не подготовленной публики. Разводить же демагогию, типа - Производитель, элементная база, цена - ? - считаю бессмысленным. Ибо, адекватно обсуждать звучание можно только с человеком, который сидит, сию секунду, рядом с Вами на диване, и слышит то же, что и Вы. Иначе, это просто бесполезное словоблудие. Часто переходящее на личность. P.S. Говоря - создать систему, которая Вас устраивает - я имею ввиду, то, что написано. С акцентом на "Вас". А не то, что Вы создали самую идеальную систему, которая "кроет" все другие системы в мире, стоимостью до 10000 $.
    • Оно уже управляется по zigbee, на первой фотке плата с антенной. PS. Резисторы померяю.
    • Ну а с чего бы нет?Ведь сопротивление разряда постоянное,напряжение на кондере тоже.
    • Всем доброго времени суток. Общая задача такова - надо снимать сигнал (осциллограмму) с полосой до 400 кГц и временем записи 5 минут. Результат должен быть куда-то сохранен, чтобы потом была возможность сбросить цифровые данные на комп.  Нужен совет по одному (пока) вопросу. Я хочу писать бинарные данные напрямую на SD-карту. Минимальная частота дискретизации 800 кГц. Разрешение АЦП можно взять 8 бит. Как вы думаете, успеет ли флешка скушать данные?  Шаблон кода создаю кубом с использованием HAL, тестирую на камне 407VET6. При записи планирую использовать буфер, куда загоняю массив данных, чтобы писать не по одной выборке, а сразу пачкой. ЗЫ Есть еще вариант. Использовать в качестве промежуточной памяти вот такое https://static.chipdip.ru/lib/435/DOC001435109.pdf  , сохранить туда, а потом уже на внешнюю карту. По идее, есть возможность соединить по FSMC. Но для меня это крайний вариант, ибо до этого не пробовал такое.
    • Ну вот из того что я обнаружил,это то что  тепло на Р1 сильно зависит от напряжения питания,но вот почему это так я не понимаю..Ведь количество зарядок кондера в секунд всегда одинаковое число,оно не меняется,по скольку нагрузка разряда там постоянная,меняется только то время,пока открыт транзистор ,но чем больше напряжение тем меньше времени он открыт,и вроде как получается что при 24 вольтах конденсатор зарядится до тех же вольт в 4 раза быстрее чем при 12,и для резистора Р1 не будет никакой разницы с 12 заряжать конденсатор или с 24..Или тут что то не то......?
    • Конечно, искал. На TDA8362 есть схемы с обвязкой. Но это самый крайний вариант. Уж слишком большой по габаритам получается платка. А вот больше в нете на транскодеры CVBS в RGBS схем на другой элементной базе нет. По поводу LMH1251, так судя по картинкам, она преобразует компонентный видеосигнал в RGB. Хотя могу и ошибаться. Уже завтра на трезвую голову гляну даташит.