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

 
 
> Непонятные глюки в проекте
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
 
Start new topic
Ответов
seldim
сообщение Sep 10 2012, 05:48
Сообщение #2


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

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



Вроде уже писал. Запись данных в контроллер синхронизируется сигналами записи, Чтение синхронизируется сигналами чтения. Дополнительных частот синхронизации у контроллера не предусмотренно. Временные характеристики сигналов чтения и записи, которые формируются в ПЛИС соответствуют требованиям на контроллер. Сигналы записив контроллер : PL1 - для младших 16 бит, Pl2- для старших 16 бит. Сигналы чтения : En1 - сигнал чтения первого буфера, En2 - сигнал чтения второго буфера (вроде в коде все они описаны). Сигналы должны идти низким уровнем. Данные получаю так :
Код
/*
Данный модуль обеспечивает управление шиной данных между контроллером HI-3584 и ПЛИС
*/
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 bus_drv IS        
    
    PORT    
        (
            clk_25_MHz        : in    std_logic;        -- входная частота 25 МГц
            cwstr                : in    std_logic;        -- сигнал записи в конфигурационный регистр HI-3584
            pl1                : in    std_logic;        -- сигнал записи младшего слова в HI-3584
            pl2                : in    std_logic;        -- сигнал записи старшего слова в HI-3584
            en1                : in    std_logic;        -- сигнал чтения слова из первого приемника БК HI-3584
            en2                : in    std_logic;        -- сигнал чтения слова из второго приемника БК HI-3584
            sel                : in    std_logic;        -- сигнал выбора старшего / младшего слова при чтении из приемников
            word1                : in    std_logic_vector (31 downto 0);    -- первое слово для передатчика
            word2                : in    std_logic_vector (31 downto 0);    -- второе слово для передатчика
            word3                : in    std_logic_vector (31 downto 0);    -- третье слово для передатчика
            word4                : in    std_logic_vector (31 downto 0);    -- четвертое слово для передатчика
            Data_in_out        : inout    std_logic_vector (15 downto 0);     -- шина данных
            Data_pr1            : out    std_logic_vector (31 downto 0);         -- данные принятые от первого приемника
            Data_pr2            : out    std_logic_vector (31 downto 0)        -- данные принятые от второго приемника
        );
    END bus_drv;

ARCHITECTURE arhitektura OF bus_drv IS
signal         holt_wr                : std_logic;             -- признак любой записи в контроллер HI-3584
signal         Buf_out                : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер для записи в HI-3584
signal         Buf_pr1_1            : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер младшего слова Пр 1
signal         Buf_pr1_2            : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер старшего слова Пр 1
signal         Buf_pr2_1            : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер младшего слова Пр 2
signal         Buf_pr2_2            : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер старшего слова Пр 2
signal         pl_count            : integer range 0 to 3; -- счетчик слов записаных в HI-3584
    BEGIN

data_in_out <= buf_out when holt_wr = '0' else "ZZZZZZZZZZZZZZZZ";
Data_pr1(15 downto 0) <= Buf_pr1_1(15 downto 0);
Data_pr1(31 downto 16) <= Buf_pr1_2(15 downto 0);
Data_pr2(15 downto 0) <= Buf_pr2_1(15 downto 0);
Data_pr2(31 downto 16) <= Buf_pr2_2(15 downto 0);

------ Любая запись в HI-3584 формирует сигнал holt_wr имеющий сдвинутый нарастающий фронт-----
        PROCESS (clk_25_MHz, cwstr, pl1, pl2 )
            BEGIN
                if cwstr = '0' or pl1 = '0' or pl2 = '0' then holt_wr <= '0';
                elsif clk_25_MHz'EVENT and clk_25_MHz = '0' THEN
                    holt_wr <= '1';
                end if;
            END PROCESS;        
    
-- Процес подсчета выдаваемых слов
        PROCESS (cwstr, pl2)
            BEGIN
                if cwstr = '0' then pl_count <= 0;    
                    elsif pl2'EVENT and pl2 = '1' THEN
                      if pl_count = 3 then pl_count <= 0;
                      else pl_count <= pl_count + 1;
                      end if;
                end if;
            END PROCESS;

------------------------------- формирование буфера для записи в HI-3584 --------------------------------------------         
        PROCESS (Holt_wr,  cwstr, pl1, pl2)
            BEGIN
                if Holt_wr'EVENT and Holt_wr = '0' THEN
                    if cwstr = '0' then Buf_out <= X"8030";
                        else if pl_count = 0 and pl1 = '0' then Buf_out(15 downto 0) <= word1(15 downto 0);
                            else if pl_count = 0 and pl2 = '0' then Buf_out(15 downto 0) <= word1(31 downto 16);
                                else if pl_count = 1 and pl1 = '0' then Buf_out(15 downto 0) <= word2(15 downto 0);
                                    else if pl_count = 1 and pl2 = '0' then Buf_out(15 downto 0) <= word2(31 downto 16);
                                        else if pl_count = 2 and pl1 = '0' then Buf_out(15 downto 0) <= word3(15 downto 0);
                                            else if pl_count = 2 and pl2 = '0' then Buf_out(15 downto 0) <= word3(31 downto 16);
                                                else if pl_count = 3 and pl1 = '0' then Buf_out(15 downto 0) <= word4(15 downto 0);
                                                    else if pl_count = 3 and pl2 = '0'  then Buf_out(15 downto 0) <= word4(31 downto 16);
                                                    end if;
                                                end if;
                                            end if;
                                        end if;
                                    end if;
                                end if;
                            end if;
                        end if;
                    end if;
                end if;
            END PROCESS;
            
------------------------------ Чтение данных из HI-3584 ------------------------------------------------
        PROCESS (en1, sel)
            BEGIN
                if en1'EVENT and en1 = '1' and sel = '0' THEN
                    Buf_pr1_1 <= Data_in_out;
                end if;
            END PROCESS;
        PROCESS (en1, sel)
            BEGIN
                if en1'EVENT and en1 = '1' and sel = '1' THEN
                    Buf_pr1_2 <= Data_in_out;
                end if;
            END PROCESS;
        
        
        PROCESS (en2, sel)
            BEGIN
                if en2'EVENT and en2 = '1' and sel = '0' THEN
                    Buf_pr2_1 <= Data_in_out;
                end if;
            END PROCESS;
        PROCESS (en2, sel)
            BEGIN
                if en2'EVENT and en2 = '1' and sel = '1' THEN
                    Buf_pr2_2 <= Data_in_out;
                end if;
            END PROCESS;    
    
    
    END arhitektura;


Сообщение отредактировал seldim - Sep 10 2012, 05:52
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- seldim   Непонятные глюки в проекте   Sep 4 2012, 04:54
- - vadimp61   Цитата(seldim @ Sep 4 2012, 08:54) Здравс...   Sep 4 2012, 05:29
- - seldim   PLL функция ведь от производителя и по моим поняти...   Sep 4 2012, 05:51
|- - troiden   Цитата(seldim @ Sep 4 2012, 09:51) PLL фу...   Sep 4 2012, 06:05
- - seldim   В мегафункции делитель 400 при входной частоте 25 ...   Sep 4 2012, 06:39
- - bogaev_roman   Вы все частоты правильно прописали в sdc и временн...   Sep 4 2012, 11:43
|- - alexPec   Цитата(bogaev_roman @ Sep 4 2012, 15:43) ...   Sep 4 2012, 13:12
- - seldim   По времянке могут быть вопросы, но работа контролл...   Sep 4 2012, 16:23
|- - bogaev_roman   Цитата(seldim @ Sep 4 2012, 20:23) Если б...   Sep 4 2012, 16:44
- - seldim   То есть после загрузки плис при указании в квартус...   Sep 4 2012, 17:33
|- - Alexey K   У вас сброс постоянно в лог 1 после отсчета счетч...   Sep 4 2012, 18:38
|- - bogaev_roman   Цитата(seldim @ Sep 4 2012, 21:33) То ест...   Sep 6 2012, 18:10
- - seldim   Да так должно быть сброс генерится 1 раз по включе...   Sep 5 2012, 02:47
- - seldim   Да действительно он без регистра этоя обязательно ...   Sep 7 2012, 03:01
|- - bogaev_roman   Цитата(seldim @ Sep 7 2012, 07:01) Остает...   Sep 7 2012, 11:18
- - seldim   Контроллер работает под управление хоста (в моем с...   Sep 9 2012, 14:20
|- - Maverick   Цитата(seldim @ Sep 9 2012, 17:20) Контро...   Sep 9 2012, 18:05
- - XVR   У вас получилась асинхронная схема (или синхронная...   Sep 10 2012, 07:13
- - seldim   Для исключения метастабильности используются разны...   Sep 10 2012, 07:35
|- - sazh   Цитата(seldim @ Sep 10 2012, 10:35) Для и...   Sep 10 2012, 07:58
- - bogaev_roman   to seldim. Сброс на логику блока управления запись...   Sep 10 2012, 12:35
- - seldim   Насчет контроллера внутри ПЛИС с объвязкой из драй...   Sep 10 2012, 17:46
|- - sazh   Цитата(seldim @ Sep 10 2012, 20:46) А с а...   Sep 11 2012, 07:11
- - seldim   Спасибо посмотрю. Реализацию контроллеров аринга ...   Sep 12 2012, 05:15
- - seldim   Всем откликнувшимся хочу сказать огромное спасибо,...   Sep 17 2012, 04:56


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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 00:37
Рейтинг@Mail.ru


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