реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Счетчик нажатия кнопок на LDM-XC3S500E-PQ208 (Spartan 3e), Проект считает количество нажатий и выводит результат на светодиоды
aleshanoff
сообщение Jul 9 2015, 06:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484



Здравствуйте. Собираю 4-х разрядный счетчик нажатия кнопки на плате LDM-XC3S500E-PQ208.

Выдает следующую ошибку:

......
ERROR:Place:1018 - A clock IOB / clock component pair have been found that are not placed at an optimal clock IOB /
clock site pair. The clock component <but1_BUFGP/BUFG> is placed at site <BUFGMUX_X1Y0>. The IO component <but1> is
placed at site <IPAD174>. This will not allow the use of the fast path between the IO and the Clock buffer. If this
sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf
file to demote this message to a WARNING and allow your design to continue. However, the use of this override is
highly discouraged as it may lead to very poor timing results. It is recommended that this error condition be
corrected in the design. A list of all the COMP.PINs used in this clock placement rule is listed below. These
examples can be used directly in the .ucf file to override this clock rule.
< NET "but1" CLOCK_DEDICATED_ROUTE = FALSE; >


подскажите, где я ошибся?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jul 9 2015, 06:30
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(aleshanoff @ Jul 9 2015, 12:01) *
Здравствуйте. Собираю 4-х разрядный счетчик нажатия кнопки на плате LDM-XC3S500E-PQ208.

Выдает следующую ошибку:

......
ERROR:Place:1018 - A clock IOB / clock component pair have been found that are not placed at an optimal clock IOB /
clock site pair. The clock component <but1_BUFGP/BUFG> is placed at site <BUFGMUX_X1Y0>. The IO component <but1> is
placed at site <IPAD174>. This will not allow the use of the fast path between the IO and the Clock buffer. If this
sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf
file to demote this message to a WARNING and allow your design to continue. However, the use of this override is
highly discouraged as it may lead to very poor timing results. It is recommended that this error condition be
corrected in the design. A list of all the COMP.PINs used in this clock placement rule is listed below. These
examples can be used directly in the .ucf file to override this clock rule.
< NET "but1" CLOCK_DEDICATED_ROUTE = FALSE; >


подскажите, где я ошибся?

Там в общем-то английским по-белому написано где вы ошиблись. Если уж совсем лень учить язык - то знайте, что в ПЛИС на вход тактирования нежелательно (о чем там и пишут) подавать
любой сигнал, источником клока могут быть далеко не все цепи и примитивы. Это называется "gated clock" и чревато массой самых разных неприятностей. Дальше вам поможет великий Гугл.

Go to the top of the page
 
+Quote Post
egorman44
сообщение Jul 9 2015, 06:51
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 141
Регистрация: 22-11-12
Из: Нижний Новгород
Пользователь №: 74 507



Цитата(aleshanoff @ Jul 9 2015, 09:01) *
Здравствуйте. Собираю 4-х разрядный счетчик нажатия кнопки на плате LDM-XC3S500E-PQ208.

Выдает следующую ошибку:

......
ERROR:Place:1018 - A clock IOB / clock component pair have been found that are not placed at an optimal clock IOB /
clock site pair. The clock component <but1_BUFGP/BUFG> is placed at site <BUFGMUX_X1Y0>. The IO component <but1> is
placed at site <IPAD174>. This will not allow the use of the fast path between the IO and the Clock buffer. If this
sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf
file to demote this message to a WARNING and allow your design to continue. However, the use of this override is
highly discouraged as it may lead to very poor timing results. It is recommended that this error condition be
corrected in the design. A list of all the COMP.PINs used in this clock placement rule is listed below. These
examples can be used directly in the .ucf file to override this clock rule.
< NET "but1" CLOCK_DEDICATED_ROUTE = FALSE; >


подскажите, где я ошибся?

Извините конечно, но мне кажется, что Вы на тактовый вход триггера, хотите подать сигнал с кнопки ?! В то время как надо подавать тактовый сигнал sm.gif
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jul 9 2015, 07:12
Сообщение #4


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(aleshanoff @ Jul 9 2015, 10:01) *
......
ERROR:...........
< NET "but1" CLOCK_DEDICATED_ROUTE = FALSE; >


подскажите, где я ошибся?


..вставьте в лист констрейнов (файл с раcширением ucf) эту строчку : NET "but1" CLOCK_DEDICATED_ROUTE = FALSE; и ошибка исчезнет.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jul 9 2015, 07:53
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Lmx2315 @ Jul 9 2015, 13:12) *
..вставьте в лист констрейнов (файл с раcширением ucf) эту строчку : NET "but1" CLOCK_DEDICATED_ROUTE = FALSE; и ошибка исчезнет.

Ошибка не исчезнет, а превратится в ворнинг. Следующим этапом ищите ответ на вопрос "почему я нажимаю на кнопку один раз, а счетчик изменяется не всегда на единицу?".
Дальше "что такое глитчи и как с ними бороться?". Ну и в конце концов "что такое синхронный дизайн и почему все советуют смотреть в эту сторону?".

В общем, стандартная дорога по известным граблям...
Там кстати есть один популярный закоулок типа "я изобрел крутую асинхронную штуку, почему никто не оценил крутости моего изобретения?".
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jul 9 2015, 08:03
Сообщение #6


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(Bad0512 @ Jul 9 2015, 11:53) *
Ошибка не исчезнет, а превратится в ворнинг. Следующим этапом ищите ответ на вопрос "почему я нажимаю на кнопку один раз, а счетчик изменяется не всегда на единицу?".

..иногда надо быть проще, дайте человеку возможность столкнуться с новыми проблемами и познать их суть.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
aleshanoff
сообщение Jul 9 2015, 08:27
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484



Всем спасибо за такое бурное обсуждение)))

Ошибка не исчезнет, а превратится в ворнинг. Следующим этапом ищите ответ на вопрос "почему я нажимаю на кнопку один раз, а счетчик изменяется не всегда на единицу?".

как избавиться от дребеззжания? я добавил к кнопке слово PULLUP , как говорится в статье http://habrahabr.ru/post/133871/


# PlanAhead Generated physical constraints

NET "but1" LOC = P54;
NET "but1" PULLUP;
NET "but4" LOC = P58;
NET "but4" PULLUP;
NET "led1" LOC = P47;
NET "led2" LOC = P48;
NET "led3" LOC = P49;
NET "led4" LOC = P50;

# PlanAhead Generated IO constraints

К тому же, в учебнике Тарасова написано, что

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jul 9 2015, 08:39
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(aleshanoff @ Jul 9 2015, 14:27) *
Всем спасибо за такое бурное обсуждение)))

Ошибка не исчезнет, а превратится в ворнинг. Следующим этапом ищите ответ на вопрос "почему я нажимаю на кнопку один раз, а счетчик изменяется не всегда на единицу?".

как избавиться от дребеззжания? я добавил к кнопке слово PULLUP , как говорится в статье http://habrahabr.ru/post/133871/


# PlanAhead Generated physical constraints

NET "but1" LOC = P54;
NET "but1" PULLUP;
NET "but4" LOC = P58;
NET "but4" PULLUP;
NET "led1" LOC = P47;
NET "led2" LOC = P48;
NET "led3" LOC = P49;
NET "led4" LOC = P50;

# PlanAhead Generated IO constraints

К тому же, в учебнике Тарасова написано, что

Вы статью прочитайте до конца, там с дребезгом малость по-другому борьба идёт. Pullup тут нужен лишь для того, чтобы при отжатой кнопке на входе было известное состояние.
Кстати заметьте, что счётчик тактируется в приведённом примере (в конце статьи) от стабильного 50МГц источника клока, а не от кнопки.
Go to the top of the page
 
+Quote Post
aleshanoff
сообщение Jul 9 2015, 08:57
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484



Собрал, работает, считает, но как и предполагалось - кнопка дребеззжит. Способ от хабра не помог

Цитата(Bad0512 @ Jul 9 2015, 13:39) *
Кстати заметьте, что счётчик тактируется в приведённом примере (в конце статьи) от стабильного 50МГц источника клока, а не от кнопки.

мне нужно от кнопки. И CLR - не тактовый вход, а вход очистки асинхронный.

Цитата(Bad0512 @ Jul 9 2015, 13:39) *
Вы статью прочитайте до конца, там с дребезгом малость по-другому борьба идёт. Pullup тут нужен лишь для того, чтобы при отжатой кнопке на входе было известное состояние.

статью прочитал, но сложновато как-то для меня))) Можно как-нить понятнее мне объяснить? По военному sm.gif sm.gif sm.gif
И где взять файл VHD, если я работаю на схематическом уровне?
Go to the top of the page
 
+Quote Post
qwa
сообщение Jul 9 2015, 08:59
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 8-02-15
Из: Санкт-Петербург
Пользователь №: 85 020



Цитата(aleshanoff @ Jul 9 2015, 11:57) *
И где взять файл VHD, если я работаю на схематическом уровне?

Не знаю,как в ISE, но в Квартусе и HDL Designer от Менторов его можно сгенерировать.
Go to the top of the page
 
+Quote Post
aleshanoff
сообщение Jul 9 2015, 09:00
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484



Особенно не понятна фраза из статьи:
"Для этого мы заведем счетчик, который увеличивается на 1, пока кнопка имеет значение логической единицы. Счетчик обнуляется, если кнопка приняла значение логического нуля. Таким образом, сколько бы не было импульсов во время нажатия кнопки из-за дребезга, настанет момент, когда значение btn четко установится в логическую единицу, счетчик достигнет определенного значения, и мы сможем судить о том, что действительно было совершено нажатие кнопки."

о каком счетчике идет речь?
Go to the top of the page
 
+Quote Post
Amurak
сообщение Jul 9 2015, 09:09
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 18-11-12
Пользователь №: 74 459



Цитата(aleshanoff @ Jul 9 2015, 12:00) *
о каком счетчике идет речь?

О том, который вы завели в строчке "Для этого мы заведем счетчик, который увеличивается на 1 ...".
Go to the top of the page
 
+Quote Post
aleshanoff
сообщение Jul 9 2015, 09:16
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484



Цитата(Amurak @ Jul 9 2015, 14:09) *
О том, который вы завели в строчке "Для этого мы заведем счетчик, который увеличивается на 1 ...".

что значит завели?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 9 2015, 09:56
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вот вам пример

Код
reg knopka_old = 0;
reg [7:0] ButHolder = 0;
reg knopka = 0;
reg knopka_0 = 0;


always @(posedge clk)
   begin
      //устраняем метастабильность
     knopka_0 <= knopka_in;
     knopka <= knopka_0;
     //выделяем фронт
     knopka_old <= knopka;

     //устраняем дребезг
     if(ButHolder != 0)
        ButHolder <= ButHolder - 1'b1;

     //реагируем на нажатие
     if((ButHolder == 0) && (knopka_old == 1'b1) && (knopka == 1'b0)) //для нулящей кнопки
        begin
           ButHolder <= 255;  
           .... //действия на нажатие кнопки
        end

   end


тут надо использовать внешний клок с заданной частотой идущий на клоковую ногу, можно его поправить при помощи PLL
knopka_in - это ножка кнопки, считаем что кнопка нулит вход, его надо подтянуть в 1.

первое что делается это устраняется метастабильность - это обязательно надо делать со всеми входными произвольными сигналами.

второе это сохраняется старое значение кнопки, когда старое будет 1, а новое 0 - это фронт, это переход из не нажатого состояние в нажатое, мы реагиурем не на уровень а на изменение, причем в одну сторону.

Но нажатие детектируется только когда счетчик в 0. Этот счетчик каждое нажатие кнопки взводиться в число, тем самым определяется пауза, во время этой паузы не будет детектироваться нажатия кнопки.


вот собственно и все. Дребезг - это по сути многократные нажатия кнопки, мы вводим паузу которая их просто пропускает.
Go to the top of the page
 
+Quote Post
aleshanoff
сообщение Jul 9 2015, 10:07
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484



Цитата(Golikov A. @ Jul 9 2015, 14:56) *
вот вам пример

Код
reg knopka_old = 0;
reg [7:0] ButHolder = 0;
reg knopka = 0;
reg knopka_0 = 0;


always @(posedge clk)
   begin
      //устраняем метастабильность
     knopka_0 <= knopka_in;
     knopka <= knopka_0;
     //выделяем фронт
     knopka_old <= knopka;

     //устраняем дребезг
     if(ButHolder != 0)
        ButHolder <= ButHolder - 1'b1;

     //реагируем на нажатие
     if((ButHolder == 0) && (knopka_old == 1'b1) && (knopka == 1'b0)) //для нулящей кнопки
        begin
           ButHolder <= 255;  
           .... //действия на нажатие кнопки
        end

   end


а на VHDL можно? или в схематике? я мало что понял из программы.

и что такое метастабильность?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 18:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01524 секунд с 7
ELECTRONIX ©2004-2016