|
Непонятные глюки в проекте |
|
|
|
Sep 4 2012, 04:54
|
Частый гость
 
Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142

|
Здравствуйте. Есть проект задачей которого является обработка набока кнопок (антидребезг 30 ms, проверка на залипание 5 сек), выдача данных (информация от обработчика кнопок) во внешний контроллер биполярного кода по паралельной шине, прием данных из этого контроллера и выдача их на светодиоды. ПЛИС циклон 4. Сброс организован внутри ПЛИС на счетчике. Внешний генератор 25 МГц. Для обработки кнопок был сделан делитель частоты до 610 Гц и 2 Гц (предварительно 25 МГц на PLL поделены до 62,5 КГц). Проблема в следующем: проект заработал, но были неправильно выбраны значения счетчика для 5 сек проверки на залипание (признак залипания кнопки появлялся через 7 сек а не через 5). При смене значения счетчика при котором надо выставить признак залипания кнопки у меня ломалася не обработчик кнопок, а весь проект. Переставал обслуживаться контроллер биполярного кода, хотя его управление никаким образом не связано с обработчиком кнопок. Вторая проблема со схемой сброса. Сначала ее сделал от частоты генератора но значения счетчика на котором происходил сброс (65534) слишком большое и я решил попробовать перейти на частоту 62,5 КГц от PLL соответственно разрядность счетчика значительно уменьшилась, но возникла ситуация аналогичная предыдущей - ничего не работает! Сейчас оставил генератор сброса на частоте 25 МГц, а в обработчике кнопок залипание проверяю от частоты не 2 Гц а 610 Гц. Вроде заработало. В чем могла быть причина сбоя не понятно. Модель ничего не показывает. Инкрементная компиляция отключена. Проглядеть все цепочки сигнал тапом пока небыло возможности. Если у кого нибудь есть идеи по поводу причин данных сбоев пожалуйса напишите.
|
|
|
|
|
Sep 4 2012, 05:29
|
Знающий
   
Группа: Участник
Сообщений: 599
Регистрация: 28-08-08
Из: Ростов папа
Пользователь №: 39 872

|
Цитата(seldim @ Sep 4 2012, 08:54)  Здравствуйте. Есть проект задачей которого является обработка набока кнопок (антидребезг 30 ms, проверка на залипание 5 сек), выдача данных (информация от обработчика кнопок) во внешний контроллер биполярного кода по паралельной шине, прием данных из этого контроллера и выдача их на светодиоды. ПЛИС циклон 4. Сброс организован внутри ПЛИС на счетчике. Внешний генератор 25 МГц. Для обработки кнопок был сделан делитель частоты до 610 Гц и 2 Гц (предварительно 25 МГц на PLL поделены до 62,5 КГц). Проблема в следующем: проект заработал, но были неправильно выбраны значения счетчика для 5 сек проверки на залипание (признак залипания кнопки появлялся через 7 сек а не через 5). При смене значения счетчика при котором надо выставить признак залипания кнопки у меня ломалася не обработчик кнопок, а весь проект. Переставал обслуживаться контроллер биполярного кода, хотя его управление никаким образом не связано с обработчиком кнопок. Вторая проблема со схемой сброса. Сначала ее сделал от частоты генератора но значения счетчика на котором происходил сброс (65534) слишком большое и я решил попробовать перейти на частоту 62,5 КГц от PLL соответственно разрядность счетчика значительно уменьшилась, но возникла ситуация аналогичная предыдущей - ничего не работает! Сейчас оставил генератор сброса на частоте 25 МГц, а в обработчике кнопок залипание проверяю от частоты не 2 Гц а 610 Гц. Вроде заработало. В чем могла быть причина сбоя не понятно. Модель ничего не показывает. Инкрементная компиляция отключена. Проглядеть все цепочки сигнал тапом пока небыло возможности. Если у кого нибудь есть идеи по поводу причин данных сбоев пожалуйса напишите. А зачем PLL применяли, возможно на низких частотах оно глючит? Поделите 25Мгц по модулю 200 и потом Т триггером еще на 2 -получите меандр 62,5 Кгц.
|
|
|
|
|
Sep 4 2012, 06:05
|
Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 19-02-09
Из: Москва
Пользователь №: 45 069

|
Цитата(seldim @ Sep 4 2012, 09:51)  PLL функция ведь от производителя и по моим понятиям должна работать во всем задаваемом диапазоне По документации 62,5 кГц входит в диапазон работы PLL?
|
|
|
|
|
Sep 4 2012, 17:33
|
Частый гость
 
Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142

|
То есть после загрузки плис при указании в квартусе начального значения счетчика := 0 возможно что счетчик окажется не в нулевом значении? код сброса следующий: Код LIBRARY ieee; use IEEE.Std_logic_1164.all; use IEEE.Std_logic_unsigned.all; use IEEE.std_logic_arith.all; use IEEE.numeric_std.all; ENTITY Reset_gen IS PORT ( CLK_25_MHz : IN STD_LOGIC; Reset : out std_logic ); END Reset_gen;
ARCHITECTURE arhitektura OF Reset_gen IS
signal CLK_25_MHz_count : integer range 0 to 65535 := 0; signal reset_int : std_logic := '0'; BEGIN PROCESS (CLK_25_MHz, CLK_25_MHz_count) BEGIN if CLK_25_MHz'EVENT and CLK_25_MHz = '1' and CLK_25_MHz_count < 65534 THEN CLK_25_MHz_count <= CLK_25_MHz_count + 1; end if; END PROCESS; Reset <= '0' when CLK_25_MHz_count < 65534 else '1';
END arhitektura;
Сообщение отредактировал seldim - Sep 4 2012, 17:36
|
|
|
|
|
Sep 4 2012, 18:38
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 14-07-11
Пользователь №: 66 220

|
У вас сброс постоянно в лог 1 после отсчета счетчика(если это конечно не то что надо). Ну и подключать одновременно numeric_std и std_logic_arith + std_logic_unsigned не стоит. (проблемы с дополнительным кодом могут быть связаны с этим) Или numeric_std или std_logic_arith + std_logic_unsigned. Ну и в принципе шаблон счетчика с разрешением можно посмотреть в quartus.
Сообщение отредактировал Alexey K - Sep 4 2012, 18:59
|
|
|
|
|
Sep 6 2012, 18:10
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(seldim @ Sep 4 2012, 21:33)  То есть после загрузки плис при указании в квартусе начального значения счетчика := 0 возможно что счетчик окажется не в нулевом значении? Я не знаю, можно ли в vhdl указать начальное значение счетчику, в верилоге это initial - структура работает только для моделирования, синтезатором игнорируется, но для альтера по умолчанию все значения на регистрах - 0. Но вообще, при определенных условиях можно после сброса загнать регистр (ну или схемы хранения, счетчики, значения автоматов) в непредсказуемое состояние при заданном нулевом - в случае метастабильности. Пример - 2 триггера, выход второго поступает на вход первого, сброс синхронный 1 такт и софтовый - т.е. перестало работать и требуется локальный сброс. Ограничений нет, получилось так, что изменение сброса почти совпадает с фронтом, но первый его "хватает" на первый такт (и при этом хватает выход второго триггера, который еще не обнулился и может быть любым), а второй на следующий. Результат - если на выходе второго случайно была 1, а первый требовалось по сбросу скинуть в 0, то ахтунг  . Судя по коду, у Вас сброс будет иметь длительность ~40нс * 65535, т.е. менее 4*10-(3)с. Если его подавать как синхронный на регистры с рабочей частотй 2Гц (она была упомянута), где гарантия, что он сработает? Опять же, судя по коду (vhdl плохо знаю, тут могу ошибиться), сброс - комбинационный, т.е. не выход регистра? Если это так, то абсолютно точно будет гонка сигналов, т.е. сброс будет представлять из себя не единичный переход из 0 в 1, а несколько раз с непонятной длительностью и дальнейшее поведения всей схемы - непредсказуемо. Если все ограничения грамотно описать в TQ, все данные ситуации будут им определены как ошибочные и все расписано подробным образом.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|