Периодическая порча данных видео в формате BT.656 с использованием TVP5150, FPGA и интерфейса Xillybus PCIe.

Вопрос или проблема

Я работаю над видеопотоком, в котором сигнал видео PAL преобразуется в BT.656 с помощью декодера TVP5150. Затем поток BT.656 отправляется на FPGA, который передает данные на процессор через соединение Xillybus PCIe.

Проблема, с которой я сталкиваюсь, заключается в том, что каждый 16-й байт в получаемом потоке байтов становится 0, что нарушает видеосигнал, включая синхронизационные преамболы. Например:

Ожидаемый поток (рабочая плата):

`128, 16, 128, 16, 128, 16, ...`

Поврежденный поток (нерабочая плата):

`128, 16, 128, 16, 128, 0, 128, 16, ...`

Наблюдения:

  1. Повреждение проявляется постоянно и периодически, затрагивая каждый 16-й байт.

  2. Проблема возникает в 2/3 случаев, когда процессор считывает данные из Xillybus с использованием функций open() и read().

  3. Проблема не возникает на всех платах.

Принятые меры:

  1. Проверил конфигурацию TVP5150 (вход PAL и выход BT.656 верны).
  2. Зарегистрировал сырые данные, считанные из Xillybus, и наблюдал непостоянные значения 0, которые иногда портят SAV или EAV.

Вопросы:

  1. Что может вызывать периодическое повреждение каждого 16-го байта в видеопотоке байтов?

  2. Как я могу отладить проблемы синхронизации между FPGA и процессором?

  3. Может ли это быть проблема с пересечением доменов тактовых сигналов, и как я могу это проверить?

  4. Существуют ли специфические конфигурации или практики, которых я должен придерживаться, чтобы избежать повреждения данных с Xillybus?

Ответ или решение

Анализ и устранение периодической ошибки передачи данных в потоковом видео

Введение

В вашей системе передачи видео, где PAL сигнал конвертируется в BT.656 с помощью декодера TVP5150, возникает проблема периодической потери данных: каждое 16-е значение в потоке байтов заменяется на 0. Данная статьяAnaly содержит анализ возможных причин данной проблемы, а также методы её диагностики и устранения.

Причины периодической коррупции данных

  1. Конфликт в синхронизации: Если синхронизация между FPGA и процессором нарушена, данные могут быть неправильно интерпретированы. Ожидание данных в неправильные моменты может привести к тому, что каждый 16-й байт будет потерян.

  2. Частота тактирования: Различия в тактировании между компонентами могут вызвать несоответствие сигналов. Например, если тактирование FPGA и процессора различается, это может привести к периодическим потерям.

  3. Управление памятью и буферизация: Возможно, на уровне Xillybus происходит неправильная обработка или освобождение памяти, что делает систему более подверженной ошибкам при чтении данных каждым из компонентов.

Диагностика проблем синхронизации

  1. Журналирование сигналов: Проследите за временными интервалами передачи данных между FPGA и процессором. Используйте логическое осциллографирование или анализаторы протоколов для отслеживания сигналов сохранения активного видеосигнала (SAV) и вызовов конца активного видеосигнала (EAV).

  2. Тестирование на разных платах: Поскольку проблема не проявляется на всех ваших платах, попробуйте сравнить работоспособные и неработающие платы на уровне сигналов, тактирования, а также используемых компонентов. Это поможет выявить физические или логические различия.

Проверка проблем с пересечением тактовых доменов

  1. Тестирование синхронных/асинхронных интерфейсов: Если ваши компоненты работают на различных частотах, проверьте наличие механизма синхронизации, который гарантирует правильное взаимодействие. Внедрение FIFO-блоков может помочь избежать проблем, связанных с частотой.

  2. Анализ временных задержек: Используйте временные характеристики системного кода или ресурсы/инструменты FPGA для анализа временных задержек между сигнальными линиями, чтобы обнаружить возможные атаки в пересечении тактовых доменов.

Рекомендации по предотвращению коррупции данных с использованием Xillybus

  1. Тщательная настройка буферизации: Убедитесь, что параметры буфера в Xillybus правильно настроены, чтобы учетные записи не переполнялись, и данные не терялись.

  2. Фрагментация данных: Рассмотрите возможность внедрения механизма подтверждения приема данных как на стороне FPGA, так и на стороне процессора. Это поможет определить узкие места, где данные могут быть потеряны.

  3. Использование контроля целостности: Внедрение контрольных сумм или хеш-функций для проверки целостности данных может помочь обнаружить проблемы до их использования в дальнейших обработках.

  4. Окончательное тестирование на различных конфигурациях и с использованием различных нагрузок поможет выявить специфические условия, при которых может возникать ошибка.

Заключение

Проблема периодической потери данных в вашем проекте является сложной и требует многопрофильного подхода к диагностике и устранению. Сосредоточив внимание на синхронизации, пресечении тактовых доменов и настройке интерфейса передачи данных, можно значительно улучшить стабильность и надежность видеоpipeline. Профессиональный подход к каждой из выделенных областей позволит вам избежать прежде возникших проблем и оптимизировать работу всей системы.

Оцените материал
Добавить комментарий

Капча загружается...