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

Принцип работы ILA ядер в XILINX Vivado (2018 и выше)

  Всем привет. Много работал ранее с проектами в среде QUARTUS, очень часто приходилось отлаживать проекты в железе при помощи встроенного логического анализатора Signal Tap II. Очень удобный инструмент, ни один раз помогал мне найти и выявить ошибки, пропущенные на стадии моделирования и некоторые моменты, которые моделирование в принципе не способно обнаружить. 

  В данный момент создаю проект в Xilinx Vivado, где на ПЛИС принимаю по JESD отчёты из АЦП, провожу некоторую обработку данных и кладу в память. Столкнулся с ситуацией, что на модели всё идеально, никаких проблем нет, но в железе не работает должным образом моя внутренняя логика (при этом приём сигнала с АЦП по JESD в норме). Стал разбираться, с помощью ядер ILA выводить интересующие меня сигналы JESD, флаги и статусы для анализа. Первая проблема, с которой я столкнулся, не могу завести ядра на частоте, которой изначально нет в ПЛИС (в момент подачи питания). Частота появляется с программируемого генератора позже и САПР Vivado говорит мне, что не может запустить ядро ILA и показать результаты... Пришлось перебрасывать все нужные мне сигналы через три регистра на стабильный клок (от DDR у меня есть 300МГц, которые всегда поступают в ПЛИС). ILA запускается, но тут начинается танец с бубном. У меня либо совсем умрёт JESD, что перестают корректно приниматься данные, либо работает но данные бьются. Причём бьются не те данные, которые я вывел на ILA, а реальные отчёты АЦП, поступающие в память. Лечится эта штука путём полного сброса проекта (команда "reset_project" TCL) и 1-2 перекомпиляции, не меняя исходников или настроек. В итоге этот процесс очень сильно стопорит процесс отладки. После каждых изменений в проекте, приходится танцевать с бубном и надеяться, что после 2-3 перекомпиляций проект получится рабочий, JESD запустится и ILA ему мешать не будет. Прошу помощи у более опытных пользователей. Как вы работаете с ILA? Как тестируете работоспособность проекта в железе на xilinx? 

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


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

Мой опыт говорит, что хоть ILA, хоть Signal TAP сами врать горазды, точнее за ними нужно пристально следить, чтобы быть уверенным, что проект не настолько развалился после компиляции, что им ещё можно верить. Это же не волшебство какое - они требуют для себя ресурсы и констрейны, соответственно и проблемы идут теже, как и со всем проектом.

Я всегда делал так - упрощал проект, разбивал на этапы чтобы быть уверенным что то что ila показывает это правда и сравнивал с симуляцией.

з.ы.

Не представляю такого что симуляция не может показать, а сигнал тап пожалуйста? Такого просто не может быть.

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


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

On 6/9/2022 at 5:15 PM, Lmx2315 said:

мой опыт говорит что хоть ILA хоть Signal TAP сами врать горазды, точнее за ними нужно пристально следить чтобы быть уверенным что проект не настолько развалился после компиляции что им ещё можно верить, это же не волшебство какое - они требуют для себя ресурсы и констрейны, соответственно и проблемы идут теже как и со всем проектом.

Я всегда делал так - упрощал проект, разбивал на этапы чтобы быть уверенным что то что ila показывает это правда и сравнивал с симуляцией.

з.ы.

Не представляю такого что симуляция не может показать, а сигнал тап пожалуйста? Такого просто не может быть.

Я в своей работе не моделирую ядра PLL, PCIe, JESD, DDR и прочие.. Ибо этот процесс моделирования будет занимать очень очень много времени.. Я проверяю свою логику, которую пишу лично я, эмулируя подачу сигналов и поведение ядер в идеальных условиях так сказать написанием простенькой симуляционной модели на базе спецификаций ядер. Но на практике часто выясняется, что какой либо сигнал становится на два такта раньше или на 10 тактов позже, чем я ожидал на модели. Я ввожу корректировки, перекомпиливаю и всё работает. В этом SIGNAL TAP очень сильно помогает и ускоряет в разы стадию отладки. Можно конечно заморочиться и отмоделировать поведение каждого ядра, каждого сигнала во всём проекте, но этот процесс заберёт очень много времени и не известно сколько ресурсов компьютера...

Я понимаю, что сам SIGNAL TAP (и ILA) не залог достоверности захваченных данных. Ни раз сталкивался с тем, что сигнал просто не захватывался, инвертировался или вовсе вёл себя непредсказуемо. Это я понимаю. Я не понимаю как "эффект наблюдателя" ломает сам процесс работы. Пытаясь заглянуть во внутренние процессы через ILA, я нарушаю тем самым эти процессы и много что начинает отрабатываться неверно или вовсе зависает внутри ПЛИС... 

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


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

В 09.06.2022 в 18:15, Kronac сказал:

Я не понимаю как "эффект наблюдателя" ломает сам процесс работы. Пытаясь заглянуть во внутренние процессы через ILA, я нарушаю тем самым эти процессы и много что начинает отрабатываться неверно или вовсе зависает внутри ПЛИС... 

А что тут не понимать, никаких специальных механизмов для контроля ваших сигналов через сигнал тап или илу нет, ILA что бы подключиться к каким либо вашим регистрам встревает в ваш проект и занимает место где-то по пути следования ваших сигналов, добавляя туда комбинаторики , как это потом разведётся - зависит от многого. Как результат не все сигналы добегут куда надо вовремя, а если ваш проект и до ИЛЫ не особо дружил со слаками, то гадать можно долго.

 

  

В 09.06.2022 в 18:15, Kronac сказал:

Я в своей работе не моделирую ядра PLL, PCIe, JESD, DDR и прочие.. Ибо этот процесс моделирования будет занимать очень очень много времени..

Ломайте для себя эту логику, люди моделируют ВСЁ и это залог успеха, да это может занимать много времени но другого пути нет , то что вы там отсебятиной занимаетесь на ИЛЕ это не правильно. ИЛА нужна чтобы в реальном железе отловить какие-либо несоответствия управляющих воздействий , всё остальное вам абсолютно точно даст симуляция.

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


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

On 6/9/2022 at 6:15 PM, Kronac said:

Но на практике часто выясняется, что какой либо сигнал становится на два такта раньше или на 10 тактов позже, чем я ожидал на модели. Я ввожу корректировки, перекомпиливаю и всё работает.

У вас тактовый сигнал ILA и тактовый сигнал наблюдаемой логики - разные? В этом случае надо принимать в расчет возможность разницы в наблюдаемых диаграммах (проявление неопределенности/метастабильности при сэмплировании наблюдаемых сигналов другим клоком). Кстати, в настройках ILA есть параметр на кол-во стадий DFF синхронизатора на входе (по умолчанию он 0, выключен).

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


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

On 6/9/2022 at 6:15 PM, Kronac said:

Но на практике часто выясняется, что какой либо сигнал становится на два такта раньше или на 10 тактов позже, чем я ожидал на модели.

On 6/9/2022 at 4:39 PM, Kronac said:

Лечится эта штука путём полного сброса проекта (команда "reset_project" TCL) и 1-2 перекомпиляции, не меняя исходников или настроек.

Звучит как "я что-то собрал, сам х.з. что, и че то оно кажется не работает". Боюсь что ila в этом случае не поможет. Сначала нужно разобраться с дизайном, а потом уже подключать отладку через ila. Перекомпиляция без каких-либо изменений в надежде на то, что заработает - это вообще тупиковый путь.

Проблема с клоком в ila существует, она непонятна для многих пользователей (в том числе и для меня). Но в целом ila - достаточно надежный инструмент для отладки. Рекомендую собирать ila не через GUI, а с помощью скрипта. Сначала да, нужно потратить некоторое время на составление скрипта, но затем он сильно сэкономит время, так как один и тот же скрипт можно будет использовать для всех проектов.

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


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

On 6/10/2022 at 9:18 AM, attaboy said:

Проблема с клоком в ila существует, она непонятна для многих пользователей (в том числе и для меня)

Проблема с клоком состоит в том что для работы ILA dbg_hub нужен постоянный стабильный клок из за того что внутри dbg_hub присутствуют FIFO.
Кроме того есть и ограничение (~25 MHz) нижней частоты такого клока. 
А  Vv в автомате не всегда может определить какой клок из имеющихся в дизайне для этого можно использовать.
Решением есть ручное назначение нужного клока на вход dbg_hub констрейнами перед имплементацией.

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


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

On 6/10/2022 at 10:51 AM, RobFPGA said:

Проблема с клоком состоит в том что для работы ILA dbg_hub нужен постоянный стабильный клок из за того что внутри dbg_hub присутствуют FIFO.
Кроме того есть и ограничение (~25 MHz) нижней частоты такого клока. 
А  Vv в автомате не всегда может определить какой клок из имеющихся в дизайне для этого можно использовать.
Решением есть ручное назначение нужного клока на вход dbg_hub констрейнами перед имплементацией.

Это не так. ila не работает, когда на момент запуска нет dbg_core_clk, даже если есть dbg_hub_clk.

Ну и кроме того, в "древнем" ISE такого ограничения не было - все прекрасно работало, даже если на момент запуска ila тактовый сигнал отсутствовал. 

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


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

Ila не работает если нет clk сигнала при подаче питания, но после того как внешний синтезатор сконфигурировался, то в Hardware Manager надо нажать кнопку Refresh Target, тогда ILA запускается. Правда она при этом тормозит страшно, но после того как будут захвачены первые данные, то всё начинает работать нормально. 

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


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

Добрый вечер. Мы разделяем частоту работы JESD от фабрики через dual clock FIFO и ILA ставим на фабрике. В этом решении есть одно но, FIFO тоже криво работает, если нет клока. Разрешение работы такого фифо с порта приема данных от JESD, только после появления частоты. Частомер стоит на стороне фабрики. Сигнал разрешения через CDC из домена фабрики в домен JESD. Тут нужно понимать, что частота фабрики должна быть выше частоты JESD. ЗЫ у вас частота JESD и ПЛИС какая?

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


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

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

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

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

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

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

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

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

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

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