Перейти к содержанию
    

Не работает проект

Доброго времени суток. Я описал проект, который управляет контроллером CAN. В итоге после симуляции я его вставил в схемный проект и загрузил его на ПЛИС. По логике работы, в начале модуль должен был по SPI сконфигурировать контроллер. Этого не произошло. Модуль работает совершенно не верно. Тогда я создал на отладочной плате верхнего уровня проект и вывел контрольные точки. Все равно не работает. Симуляцию поведенческую прошел. Пост мап уже нет. Ошибки находил, но не помогло (rom описал через сигнал , а не константу.) Ну и вопрос. Как найти ошибки? Как исправить? и почему симуляция поведенческая прошла, а модуль даже близко не заработал , как в симуляции???

 

Исх. данные:

Клок 50 Мгц на отладочной( на основной плате 100 )

 

Взял из этого модуля автомат для инициализации, отдельно начал тестить. Пост мап симуляцию не проходит. Кидаю сюда сам конечный автомат + обвязка. Может быть я что - то не то делаю. У меня вообще по нулям, по идеям и вообще со всем..

 

Логика автомата такая: после сброса автомат получает сигнал en_init и включает счетчик, который выбирает из памяти байты для отправки по SPI. Так же выдает управляющие сигналы для SPI( spi_txe -данные на входе есть, один такт, spi_trq - запрос на передачу.). После того , как spi отправил байт он возвращает флаг rxne( один такт, флаг завершения принятия посылки и готовности к следующей транзакации ). Входы cmp - означают конец первого приема/передачи ( это нужно чтобы запись следующая с нового адреса началась ). CMP_END - конец передачи.

Тест бенч не прилагаю( удалил видимо, приложу симуляцию модуля по выше, если надо заново напишу тб)

Этот автомат - часть большего автомата. Он работает в самом начале , после снятия rst.

 

Топ модуль state_init. Остальные - компоненты. ( есть слабые коменты, то по смысле большая часть понятная( счетчки/сравнение))

 

Еще раз ..симуляцию проходит, но после загрузки не работает ничего( пост мап тоже не прошел симуляцию). В основном управляющая логика не работает, в частности данный модуь... В чем может быть причина?

post-88917-1479458442_thumb.jpg

post-88917-1479458449_thumb.jpg

state_init.vhd

rom_init.vhd

counter_simple.vhd

counter.vhd

control_init.vhd

compare.vhd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрели ли вывод ошибок синтезатора и разводчика?

Какая схема резета в девайсе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрели ли вывод ошибок синтезатора и разводчика?

Какая схема резета в девайсе?

 

Затрудняюсь..данный автомат (spi_init, который тут выложил), он синтезировался бюез единого замечания, но если часть ног повешу на пост уровень( см.код rxne => '1',), начинает часть схемы резать, якобы все константное( счетчики/память и т.п. ). Взял тогда входы( busy, rxne . . ) вывел на ружу, на переключатели( код не приведу ибо он такой же). Без ошибок синтезируется и предупреждений. Он же опять таки проходит поведенческое симулирование, заваливает пост мап и в жизни не ловиться осцилограффом те сигналы которые должны( spi_txe, spi_txrq). Из констрейнов задал только на глобальный клок, его частоту и заполнение. Все это сей час проделал на отладочной при клоке 50 МГц. Для этого создал топ модуль...в иделале ...он хотябы один раз должен флаг spi_txe, spi_trq дернуть.а на выходе, что в пост мап, что в жизни постоянный уровень...только поведенеское симулирование сработало:

entity state_init_debug is
port(

                clk            : in    std_logic;
                rst            : in    std_logic;
                spi_txe        : out std_logic;
                spi_cont        : out    std_logic;
                spi_trq        : out    std_logic;
                init_end        : out    std_logic;
                tx_data        :  out std_logic_vector( 8 -1 downto 0 )

);
end state_init_debug;

architecture Behavioral of state_init_debug is

COMPONENT state_init is
        generic(
            cnt_max            : integer      := 48;        -- количество байт памяти
            cnt_max_delay    : integer      := 512;        -- задержка
            data_width         : integer      := 8;
            g_cmp0             : integer      := 16;        -- пороги сравнения для начало новой порции передачи
            g_cmp1             : integer     := 30;        -- пороги сравнения для начало новой порции передачи
            g_cmp2             : integer      := 48;        -- пороги сравнения для передачи последнего пакета
            rst_active_lvl    : std_logic := '0'
        );    
        port (
            clk            : in    std_logic;
            rst            : in    std_logic;
            en_init        : in    std_logic;
            rxne            : in  std_logic;
            busy            : in  std_logic;
            
            spi_txe        : out std_logic;
            spi_cont        : out    std_logic;
            spi_trq        : out    std_logic;
            init_end        : out    std_logic;
            tx_data        : out std_logic_vector( data_width -1 downto 0 )
        );
        End component;        
begin

unit1: state_init                             
                            port map        (     clk         => clk,
                                                rst         => rst,
                                                en_init     => '1',                                                    
                                                rxne         => '1',
                                                busy         => '0',
                                                spi_txe     => spi_txe,                                    
                                                spi_cont => spi_cont,
                                                spi_trq     => spi_trq,
                                                init_end => init_end,  
                                                tx_data     => tx_data 
    );


end Behavioral;

 

 

Подаю rst. нет изменений, репрограю , нет имзенений, щелкаю switch кнопки(флаги) не работает.....беда. На отладочной rst от кнопки завел, чтобы проверять.

Просто не представляю что творится. Работают только делители и пару еще простых вещел. Автомат лежит

Изменено пользователем go2winner

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго времени суток. Я описал проект, который управляет контроллером CAN. В итоге после симуляции я его вставил в схемный проект и загрузил его на ПЛИС. По логике работы, в начале модуль должен был по SPI сконфигурировать контроллер. Этого не произошло.

 

Еще раз ..симуляцию проходит, но после загрузки не работает ничего( пост мап тоже не прошел симуляцию). В основном управляющая логика не работает, в частности данный модуь... В чем может быть причина?

 

Прицепите UART вместо SPI и на хосте убедитесь, что требуемые для инициализации данные выбираются из памяти и передаются... Либо доработайте CAN чтобы его вообще не надо было инициализировать...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прицепите UART вместо SPI и на хосте убедитесь, что требуемые для инициализации данные выбираются из памяти и передаются... Либо доработайте CAN чтобы его вообще не надо было инициализировать...

Проблема не в этом.....

Проблема в том, что я описал блок,а он непонятно( для меня) почему не работает. Я осциллографом смотрел , ничего не увидел на выходе , даже тактовых для SPI. Начал выводить сигналы и дошел до этого куска. Думаю отправка хосту убьет лишь время, т.к. если модуль не работает( основной автомат вообще не работает/прием/передача/инийиализация ), то и отправлять нечего.

Вот пример выше приводил модуля управляющего (подает SPI флаги начало передачи и выборку из памяти байтов для SPI на передачу). Он не работает, причины не понятны мне, в какую сторону смотреть тоже.

ЗЫ. сам SPI еще не проверял, только автоматы для работы с микросхемой(иниц/чтени и т.п.)...боюсь , что он тоже наверное не работает.

Изменено пользователем go2winner

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

почему симуляция поведенческая прошла, а модуль даже близко не заработал , как в симуляции???

Причиной может бить использование защелки вместо тригера

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Причиной может бить использование защелки вместо тригера

Может быть....но не уверен...я защелки по крайней мере не описывал..и в синтезаторе на схеме пост синтез не наблюдал( на память)

Но сей час еще раз гляну.

 

Глянул. Нету . Только д-тригеры

Изменено пользователем go2winner

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подаю rst. нет изменений, репрограю , нет имзенений, щелкаю switch кнопки(флаги) не работает.....беда. На отладочной rst от кнопки завел, чтобы проверять.

Просто не представляю что творится. Работают только делители и пару еще простых вещел. Автомат лежит

 

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

http://www.eetimes.com/document.asp?doc_id=1278998

 

А клок откуда подается? Идет ли он через PLL или DCM или так напрямую?

Какая плис?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

http://www.eetimes.com/document.asp?doc_id=1278998

 

Я одну ошибку грубую нашел..исправлю отпишусь..я счетчик описал, а разрешающий сигнал подал от клока....думаю он просто не успевал ловить флаг...а счетчик запускал автомат...

думаю в этом вся соль....по крайне мере вот так получается..

 

Да....счетчик не считал => флаг не выдавал => автомат оставался в одном и том же состоянии. Проблема решена. Извините, что отнял время)

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

Изменено пользователем go2winner

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...