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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Непонятные глюки в проекте
seldim
сообщение Sep 4 2012, 04:54
Сообщение #1


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

Группа: Участник
Сообщений: 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 Гц. Вроде заработало. В чем могла быть причина сбоя не понятно. Модель ничего не показывает. Инкрементная компиляция отключена. Проглядеть все цепочки сигнал тапом пока небыло возможности. Если у кого нибудь есть идеи по поводу причин данных сбоев пожалуйса напишите.
Go to the top of the page
 
+Quote Post
vadimp61
сообщение Sep 4 2012, 05:29
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 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 Кгц.
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 4 2012, 05:51
Сообщение #3


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



PLL функция ведь от производителя и по моим понятиям должна работать во всем задаваемом диапазоне
Go to the top of the page
 
+Quote Post
troiden
сообщение Sep 4 2012, 06:05
Сообщение #4


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

Группа: Свой
Сообщений: 108
Регистрация: 19-02-09
Из: Москва
Пользователь №: 45 069



Цитата(seldim @ Sep 4 2012, 09:51) *
PLL функция ведь от производителя и по моим понятиям должна работать во всем задаваемом диапазоне

По документации 62,5 кГц входит в диапазон работы PLL?
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 4 2012, 06:39
Сообщение #5


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



В мегафункции делитель 400 при входной частоте 25 МГц дают 62, 5 КГц. Если есть ограничения на PLL покажите ссылочку.

Сообщение отредактировал seldim - Sep 4 2012, 06:40
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Sep 4 2012, 11:43
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Вы все частоты правильно прописали в sdc и временные ошибки отсутствуют? Сами по себе частоты низкие, но описанная ситуация похожа на невыполнение временных соотношений. Со сбросом тоже вопрос - Вы его подаете как синхронный и он один для всех триггеров?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Sep 4 2012, 13:12
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(bogaev_roman @ Sep 4 2012, 15:43) *
Вы все частоты правильно прописали в sdc и временные ошибки отсутствуют? Сами по себе частоты низкие, но описанная ситуация похожа на невыполнение временных соотношений. Со сбросом тоже вопрос - Вы его подаете как синхронный и он один для всех триггеров?

Согласен, я бы еще отчет таймквеста на месте ТС посмотрел, какие клоки он увидел, совпадают ли они с действительностью и нет ли отрицательных слэков.
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 4 2012, 16:23
Сообщение #8


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



По времянке могут быть вопросы, но работа контроллера зависит только от сброса, после которого инициализируется контроллер. Если бы проблема была во времянках то переход от 16 разрядного счетчика на частоте 25 МГц на 8-и разрядный счетчик на 62,5 КГц ситуацию должен только значительно улучшить, а работа наоборот прекращалась. Вот это и ставит в тупик. Если брать задержку одного тригера 7 ns то на 8-и разрядах задержка 56 ns при длительности тактового импульса 16000 ns без ТС видно что здесь должно работать.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Sep 4 2012, 16:44
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(seldim @ Sep 4 2012, 20:23) *
Если бы проблема была во времянках то переход от 16 разрядного счетчика на частоте 25 МГц на 8-и разрядный счетчик на 62,5 КГц ситуацию должен только значительно улучшить, а работа наоборот прекращалась. Вот это и ставит в тупик. Если брать задержку одного тригера 7 ns то на 8-и разрядах задержка 56 ns при длительности тактового импульса 16000 ns без ТС видно что здесь должно работать.

Я не видел времянки и результата TQ, не видел описания работы (может там куча словев логики). Не знаю, пустил ли вообще квартус частоту по линии частот. Не знаю - возможно получаемый сброс - синхронный, но никаках не описан как и частоты и триггеры падают в метастабильность, а счетчик по сбросу не в нуле, а в каком то другом состоянии.
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 4 2012, 17:33
Сообщение #10


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

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Alexey K
сообщение Sep 4 2012, 18:38
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 5 2012, 02:47
Сообщение #12


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



Да так должно быть сброс генерится 1 раз по включению питания. На счет библиотек спасибо я их один раз подключил кокда начал изучать HDL так и таскаю. Разберусь оставлю нужные.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Sep 6 2012, 18:10
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(seldim @ Sep 4 2012, 21:33) *
То есть после загрузки плис при указании в квартусе начального значения счетчика := 0 возможно что счетчик окажется не в нулевом значении?

Я не знаю, можно ли в vhdl указать начальное значение счетчику, в верилоге это initial - структура работает только для моделирования, синтезатором игнорируется, но для альтера по умолчанию все значения на регистрах - 0. Но вообще, при определенных условиях можно после сброса загнать регистр (ну или схемы хранения, счетчики, значения автоматов) в непредсказуемое состояние при заданном нулевом - в случае метастабильности.
Пример - 2 триггера, выход второго поступает на вход первого, сброс синхронный 1 такт и софтовый - т.е. перестало работать и требуется локальный сброс. Ограничений нет, получилось так, что изменение сброса почти совпадает с фронтом, но первый его "хватает" на первый такт (и при этом хватает выход второго триггера, который еще не обнулился и может быть любым), а второй на следующий. Результат - если на выходе второго случайно была 1, а первый требовалось по сбросу скинуть в 0, то ахтунг maniac.gif .
Судя по коду, у Вас сброс будет иметь длительность ~40нс * 65535, т.е. менее 4*10-(3)с. Если его подавать как синхронный на регистры с рабочей частотй 2Гц (она была упомянута), где гарантия, что он сработает?
Опять же, судя по коду (vhdl плохо знаю, тут могу ошибиться), сброс - комбинационный, т.е. не выход регистра? Если это так, то абсолютно точно будет гонка сигналов, т.е. сброс будет представлять из себя не единичный переход из 0 в 1, а несколько раз с непонятной длительностью и дальнейшее поведения всей схемы - непредсказуемо.
Если все ограничения грамотно описать в TQ, все данные ситуации будут им определены как ошибочные и все расписано подробным образом.
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 7 2012, 03:01
Сообщение #14


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



Да действительно он без регистра этоя обязательно исправлю. Спасибо за подсказку. Возмоно это и есть причина второго глюка. Остается вопрос с как исправление значения счетчика в обработчике кнопок, который является только источником данных портится управление контроллером. Может имеет смыст использовать инкрементную компиляцию?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Sep 7 2012, 11:18
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(seldim @ Sep 7 2012, 07:01) *
Остается вопрос с как исправление значения счетчика в обработчике кнопок, который является только источником данных портится управление контроллером. Может имеет смыст использовать инкрементную компиляцию?

А чем инкрементальная компиляция поможет?
Приведите хотя бы на словах, что есть управление контроллером, каким образом сброс используется в контроллере, на какой частоте работает сам контроллер и его управление, есть ли пересинхронизация, если частоты разные, сброс синхронный/асинхронный. В каком месте конкретно сбоит если возможно определить. Экстрасенсов я думаю здесь нет biggrin.gif
Go to the top of the page
 
+Quote Post

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

 


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


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