go2winner 0 18 ноября, 2016 Опубликовано 18 ноября, 2016 · Жалоба Доброго времени суток. Я описал проект, который управляет контроллером CAN. В итоге после симуляции я его вставил в схемный проект и загрузил его на ПЛИС. По логике работы, в начале модуль должен был по SPI сконфигурировать контроллер. Этого не произошло. Модуль работает совершенно не верно. Тогда я создал на отладочной плате верхнего уровня проект и вывел контрольные точки. Все равно не работает. Симуляцию поведенческую прошел. Пост мап уже нет. Ошибки находил, но не помогло (rom описал через сигнал , а не константу.) Ну и вопрос. Как найти ошибки? Как исправить? и почему симуляция поведенческая прошла, а модуль даже близко не заработал , как в симуляции??? Исх. данные: Клок 50 Мгц на отладочной( на основной плате 100 ) Взял из этого модуля автомат для инициализации, отдельно начал тестить. Пост мап симуляцию не проходит. Кидаю сюда сам конечный автомат + обвязка. Может быть я что - то не то делаю. У меня вообще по нулям, по идеям и вообще со всем.. Логика автомата такая: после сброса автомат получает сигнал en_init и включает счетчик, который выбирает из памяти байты для отправки по SPI. Так же выдает управляющие сигналы для SPI( spi_txe -данные на входе есть, один такт, spi_trq - запрос на передачу.). После того , как spi отправил байт он возвращает флаг rxne( один такт, флаг завершения принятия посылки и готовности к следующей транзакации ). Входы cmp - означают конец первого приема/передачи ( это нужно чтобы запись следующая с нового адреса началась ). CMP_END - конец передачи. Тест бенч не прилагаю( удалил видимо, приложу симуляцию модуля по выше, если надо заново напишу тб) Этот автомат - часть большего автомата. Он работает в самом начале , после снятия rst. Топ модуль state_init. Остальные - компоненты. ( есть слабые коменты, то по смысле большая часть понятная( счетчки/сравнение)) Еще раз ..симуляцию проходит, но после загрузки не работает ничего( пост мап тоже не прошел симуляцию). В основном управляющая логика не работает, в частности данный модуь... В чем может быть причина? state_init.vhd rom_init.vhd counter_simple.vhd counter.vhd control_init.vhd compare.vhd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivan_ 0 18 ноября, 2016 Опубликовано 18 ноября, 2016 · Жалоба Смотрели ли вывод ошибок синтезатора и разводчика? Какая схема резета в девайсе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
go2winner 0 18 ноября, 2016 Опубликовано 18 ноября, 2016 (изменено) · Жалоба Смотрели ли вывод ошибок синтезатора и разводчика? Какая схема резета в девайсе? Затрудняюсь..данный автомат (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 от кнопки завел, чтобы проверять. Просто не представляю что творится. Работают только делители и пару еще простых вещел. Автомат лежит Изменено 18 ноября, 2016 пользователем go2winner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 18 ноября, 2016 Опубликовано 18 ноября, 2016 · Жалоба Доброго времени суток. Я описал проект, который управляет контроллером CAN. В итоге после симуляции я его вставил в схемный проект и загрузил его на ПЛИС. По логике работы, в начале модуль должен был по SPI сконфигурировать контроллер. Этого не произошло. Еще раз ..симуляцию проходит, но после загрузки не работает ничего( пост мап тоже не прошел симуляцию). В основном управляющая логика не работает, в частности данный модуь... В чем может быть причина? Прицепите UART вместо SPI и на хосте убедитесь, что требуемые для инициализации данные выбираются из памяти и передаются... Либо доработайте CAN чтобы его вообще не надо было инициализировать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
go2winner 0 18 ноября, 2016 Опубликовано 18 ноября, 2016 (изменено) · Жалоба Прицепите UART вместо SPI и на хосте убедитесь, что требуемые для инициализации данные выбираются из памяти и передаются... Либо доработайте CAN чтобы его вообще не надо было инициализировать... Проблема не в этом..... Проблема в том, что я описал блок,а он непонятно( для меня) почему не работает. Я осциллографом смотрел , ничего не увидел на выходе , даже тактовых для SPI. Начал выводить сигналы и дошел до этого куска. Думаю отправка хосту убьет лишь время, т.к. если модуль не работает( основной автомат вообще не работает/прием/передача/инийиализация ), то и отправлять нечего. Вот пример выше приводил модуля управляющего (подает SPI флаги начало передачи и выборку из памяти байтов для SPI на передачу). Он не работает, причины не понятны мне, в какую сторону смотреть тоже. ЗЫ. сам SPI еще не проверял, только автоматы для работы с микросхемой(иниц/чтени и т.п.)...боюсь , что он тоже наверное не работает. Изменено 18 ноября, 2016 пользователем go2winner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuravg 0 18 ноября, 2016 Опубликовано 18 ноября, 2016 · Жалоба почему симуляция поведенческая прошла, а модуль даже близко не заработал , как в симуляции??? Причиной может бить использование защелки вместо тригера Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
go2winner 0 18 ноября, 2016 Опубликовано 18 ноября, 2016 (изменено) · Жалоба Причиной может бить использование защелки вместо тригера Может быть....но не уверен...я защелки по крайней мере не описывал..и в синтезаторе на схеме пост синтез не наблюдал( на память) Но сей час еще раз гляну. Глянул. Нету . Только д-тригеры Изменено 18 ноября, 2016 пользователем go2winner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivan_ 0 18 ноября, 2016 Опубликовано 18 ноября, 2016 · Жалоба Подаю rst. нет изменений, репрограю , нет имзенений, щелкаю switch кнопки(флаги) не работает.....беда. На отладочной rst от кнопки завел, чтобы проверять. Просто не представляю что творится. Работают только делители и пару еще простых вещел. Автомат лежит Резет от кнопки не очень хорошо. У вас может быть так, что снятие резета в произвольный момент времени способствует метастабильности всех регистров под резетом, поэтому схема не работает. http://www.eetimes.com/document.asp?doc_id=1278998 А клок откуда подается? Идет ли он через PLL или DCM или так напрямую? Какая плис? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
go2winner 0 18 ноября, 2016 Опубликовано 18 ноября, 2016 (изменено) · Жалоба Резет от кнопки не очень хорошо. У вас может быть так, что снятие резета в произвольный момент времени способствует метастабильности всех регистров под резетом, поэтому схема не работает. http://www.eetimes.com/document.asp?doc_id=1278998 Я одну ошибку грубую нашел..исправлю отпишусь..я счетчик описал, а разрешающий сигнал подал от клока....думаю он просто не успевал ловить флаг...а счетчик запускал автомат... думаю в этом вся соль....по крайне мере вот так получается.. Да....счетчик не считал => флаг не выдавал => автомат оставался в одном и том же состоянии. Проблема решена. Извините, что отнял время) Если есть модераторы, то они могут удалить данный топик, т.к. он не представляет окружающим интереса. Изменено 18 ноября, 2016 пользователем go2winner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться