|
Обработка нажатия кнопок |
|
|
|
Jun 18 2018, 18:12
|
Частый гость
 
Группа: Участник
Сообщений: 167
Регистрация: 24-12-08
Из: Россия
Пользователь №: 42 714

|
Всем доброго дня. Привожу нижеследующий код: Код OnButtonLeft_Down: process(OnBtnLeft_DownEvent) begin if rising_edge(OnBtnLeft_DownEvent) then if (PulsePerPeriod_VAR > 0) then PulsePerPeriod_VAR := PulsePerPeriod_VAR - 1; --<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end if; end if; end process OnButtonLeft_Down;
OnButtonRight_Down: process(OnBtnRight_DownEvent) begin if rising_edge(OnBtnRight_DownEvent) then if (PulsePerPeriod_VAR < PulsePerPeriod_VAR_MAX) then PulsePerPeriod_VAR := PulsePerPeriod_VAR + 1; --<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end if; end if; end process OnButtonRight_Down; (PulsePerPeriod_VAR объявлена как shared variable)Это обработка нажатия двух кнопок (вправо, влево) Само нажатие работает нормально, по которому я формирую "событие-сигнал" нажатия кнопки (либо правой, либо левой - по названиям процессов все понятно) при этом обращаю внимание на выделенные две строки. Если их закоментировать - все компилируется. Если оставить одну из них - тоже компилируется. А вот обе - сразу дает ошибку. Я чую конечно что так писать нельзя. (Переменная PulsePerPeriod_VAR в обоих процессах одна и таже) Но почему? Не могу понять и найти объяснение. Уже неделю копаю и в инете и в книгах Бибило. 1. Может кто-нибудь популярно объяснить почему так нельзя? 2. Как реализовать нажатие нескольких кнопок, когда по нажатию надо изменять значение одного и того же параметра (в данном случае увеличить или уменьшить значение переменной PulsePerPeriod_VAR) 3. Может кто посоветовать литературу такого плана - дается к.л. конструкция кода и далее какую структуру она порождает и описание это (примеры). Не готовые схемы счетчиков и т.п. а наоборот, с т.з. языка vhdl. Код -> структура -> описание.
Сообщение отредактировал aBoomest - Jun 18 2018, 18:18
--------------------
C уважением!
|
|
|
|
|
 |
Ответов
|
Jun 21 2018, 18:39
|
Частый гость
 
Группа: Участник
Сообщений: 167
Регистрация: 24-12-08
Из: Россия
Пользователь №: 42 714

|
Цитата(Flip-fl0p @ Jun 19 2018, 07:43)  Предлагаю все объединить в одном процессе. Заменить переменную на сигнал и таким образом описать суммирующие-вычитающий счетчик. Цитата(aBoomest @ Jun 19 2018, 14:07)  На счет того как засунуть в один процесс - ясно, это я тупанул жутко. Не, чего-то и где-то я не допонимаю.  Запихал все в один процесс, как советовали выше. И, как я понимаю, ошибка в том, что нельзя в двух местах изменять переменную PulsePerPeriod_VAR. Как из ситуации-то выходить? Если по нажатию одной кнопки мне нужно увеличить значение на 1цу, по нажатию другой, соответственно уменьшить. Существует какое-то классическое/общепринятое решение в данном случае? МОжет в этот процесс надо как-то Clock какой-нибудь добавить. Код OnButtonLeftRight_Down: process(OnBtnLeft_DownEvent,OnBtnRight_DownEvent) -- изменение длительности импульса begin if rising_edge(OnBtnLeft_DownEvent) then if (PulsePerPeriod_VAR > 0) then PulsePerPeriod_VAR := PulsePerPeriod_VAR - 1; end if; elsif rising_edge(OnBtnRight_DownEvent) then if (PulsePerPeriod_VAR < PulsePerPeriod_VAR_MAX) then PulsePerPeriod_VAR := PulsePerPeriod_VAR + 1; end if; end if; end process OnButtonLeftRight_Down;
--------------------
C уважением!
|
|
|
|
|
Jun 21 2018, 19:54
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(aBoomest @ Jun 21 2018, 21:39)  Не, чего-то и где-то я не допонимаю.  process(OnBtnLeft_DownEvent,OnBtnRight_DownEvent) -- изменение длительности импульса begin if rising_edge(OnBtnLeft_DownEvent) then Ситуация примерно такая. Садитесь в "готовый" автомобиль. Нажимаете педали, крутите руль - едете. Структура автомобиля фиксированная, а Вы определяете "действия". Вот так работает микроконтроллер. А в ПЛИС - другая ситуация. Вот куча, в ней лежат колеса, руль, мотор и другие железяки. Так вот в ПЛИС дело выглядит так: надо взять одну железку, к ней привинтить другую, потом мотор, потом колеса, потом руль. А уж куда поедет - так это как руль и мотор привинтили. Т.е. структуру Вы определяете сами. Восемь колес накрутите, получите БТР. Руль в одну сторону заклините, получите авто для гонок по кругу... Поэтому перестаньте мыслить Сишными функциями, как например OnBtnLeft_DownEvent... В ПЛИС это никак не пойдет. Тут как в авто, есть мотор, вот от его вала и шестерни и ремень на вентилятор, и чего-то на распределитель... Так что "старые мозги" - выкинуть, "новые" - вставить... Трудно, но кто говорил, что будет легко. А еще эти кривые скобки вместо которых "begin-end". ..
--------------------
www.iosifk.narod.ru
|
|
|
|
Сообщений в этой теме
aBoomest Обработка нажатия кнопок Jun 18 2018, 18:12 Plain Да потому что кнопки сейчас мифические. Перейдите ... Jun 18 2018, 19:09 Александр77 А может корректнее завести все в один процесс и та... Jun 19 2018, 03:10 Flip-fl0p Предлагаю все объединить в одном процессе. Заменит... Jun 19 2018, 04:43 aBoomest Цитата(Plain @ Jun 18 2018, 22:09) Да пот... Jun 19 2018, 06:48 Flip-fl0p ЦитатаЕсли есть знатоки как красиво делать антидре... Jun 19 2018, 07:08 _Anatoliy Цитата(aBoomest @ Jun 19 2018, 09:48) Jun 19 2018, 07:18 Plain Цитата(aBoomest @ Jun 19 2018, 09:48) син... Jun 19 2018, 08:39 aBoomest Цитата(Flip-fl0p @ Jun 19 2018, 10:0... Jun 19 2018, 07:24 Flip-fl0p Цитата(aBoomest @ Jun 19 2018, 10:24) На ... Jun 19 2018, 07:37 aBoomest Цитата(Plain @ Jun 19 2018, 11:39) В этом... Jun 19 2018, 10:47 iosifk [quote name='aBoomest' date='Jun 19 20... Jun 19 2018, 10:52 aBoomest Так точно, работает!
PS: На счет того как зас... Jun 19 2018, 11:07 Flip-fl0p Цитата(aBoomest @ Jun 21 2018, 21:39)
Пе... Jun 21 2018, 19:33 Plain В схеме по-прежнему несколько тактовых сигналов, а... Jun 21 2018, 19:42 Flip-fl0p Цитата(Plain @ Jun 21 2018, 22:42) Наприм... Jun 21 2018, 19:53  Plain Цитата(Flip-fl0p @ Jun 21 2018, 22:5... Jun 21 2018, 20:15   Flip-fl0p Цитата(Plain @ Jun 21 2018, 23:15) Резуль... Jun 21 2018, 20:24 Plain Цитата(Plain @ Jun 21 2018, 22:42) создат... Jun 24 2018, 11:42 Plain У автора тактовая частота 100 Гц. Jun 21 2018, 20:46 aBoomest Спасибо всем за ответы!
Все говорят и советуют... Jun 22 2018, 05:48 Flip-fl0p Цитата(aBoomest @ Jun 22 2018, 08:48)
Во... Jun 22 2018, 06:12 Plain Цитата(aBoomest @ Jun 22 2018, 08:48) вро... Jun 22 2018, 08:20 aBoomest Цитата(Plain @ Jun 24 2018, 14:42) ... Jun 27 2018, 19:17 iosifk Цитата(aBoomest @ Jun 27 2018, 22:17) Как... Jun 27 2018, 19:33 Plain Цитата(aBoomest @ Jun 27 2018, 22:17) при... Jun 27 2018, 20:17 Flip-fl0p Цитата(aBoomest @ Jun 27 2018, 22:17)
Чт... Jun 28 2018, 04:50 Plain Конкретизирую по повторам. Минимальный период ручн... Jun 28 2018, 11:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|