Тайминг FPGA

Ответить
Аватара пользователя
mxdamage

Activity
assistant
assistant
Сообщения: 113
Зарегистрирован: 11 авг 2011, 15:45
Награды: 1
Версия LabVIEW: 2011
Откуда: Москва
Контактная информация:

Тайминг FPGA

Сообщение mxdamage »

Здравствуйте, коллеги.
Работаю на данный момент с FPGA cRio 9074. Цель - снятие данных и синхронизация с GPS с помощью PPS с точностью до нескольких отсчетов на частоте 200Гц.
Для этого я "нарезаю" данные по приходу сигнала PPS на цифровой модуль.

Проблемы начинаются, когда я хочу поддержать работу системы в условиях потери сигнала PPS. Я хочу отсчитывать нужные моменты по тактам FPGA.

Когда считаю количество "тиков" FPGA между PPS, он выдает мне число ~39999700 вместо 40000000
А это дает ошибку 0,00075%, или 0.6 секунды в сутки, что плохо...
Неужели в FPGA негде найти точного временного генератора, или хотя бы определить точную частоту шины, которая отличается от 40МГц (хоть и несильно, но критично)?

Спасибо.
Аватара пользователя
Vasiliy Baev

Activity Gold Bronze
leader
leader
Сообщения: 545
Зарегистрирован: 31 окт 2011, 09:02
Награды: 4
Версия LabVIEW: 2019
Откуда: Санкт-Петербург
Благодарил (а): 8 раз
Поблагодарили: 10 раз
Контактная информация:

Re: Тайминг FPGA

Сообщение Vasiliy Baev »

Скриншто программы для плис приложите. Не работал с gps , поясните что такое pps? Трафик?
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Тайминг FPGA

Сообщение Andrew Lunev »

Покажите ваш код, возможно вы что-то не так делаете, например обработка сигнала не успевает в выделенный вами промежуток, ну а если все правильно, то что вам мешает ввести коррекцию? Вы же сами определяете величину ошибки, вот ее и корректируйте. Частота генератора никогда не будет равна точно 40 МГц, но для конкретного контроллера она не будет меняться, так что когда есть сигнал PPS определяйте ошибку, записывайте ее в файл и затем используйте это значение для коррекции.
Аватара пользователя
mxdamage

Activity
assistant
assistant
Сообщения: 113
Зарегистрирован: 11 авг 2011, 15:45
Награды: 1
Версия LabVIEW: 2011
Откуда: Москва
Контактная информация:

Re: Тайминг FPGA

Сообщение mxdamage »

Andrew Lunev писал(а):Покажите ваш код, возможно вы что-то не так делаете, например обработка сигнала не успевает в выделенный вами промежуток, ну а если все правильно, то что вам мешает ввести коррекцию? Вы же сами определяете величину ошибки, вот ее и корректируйте. Частота генератора никогда не будет равна точно 40 МГц, но для конкретного контроллера она не будет меняться, так что когда есть сигнал PPS определяйте ошибку, записывайте ее в файл и затем используйте это значение для коррекции.
Безымянный.png
Вот такой код, отвечающий за ловлю PPS. В программе реализован счетчик, на который завязана дальнейшая синхронизация.
Время тиков на выполнение фиксировано и тут получилось равно 6. Моя задача тут - выставить таймаут в ровно 2 секунды.
Если поставить таймаут ровно 1 секунду, то функция может не дожидаться PPS.
Если ошибка частоты генератора зависит лишь от конкретного экземпляра шасси, то все действительно становится довольно-таки просто. Спасибо, что натолкнули на эту мысль.
Скриншот программы для плис приложите. Не работал с gps , поясните что такое pps? Трафик?
PPS - peak per second - синхронизирующий сигнал с устройства GPS, выдает импульс раз в секунду, с точностью до нс.
Аватара пользователя
Vasiliy Baev

Activity Gold Bronze
leader
leader
Сообщения: 545
Зарегистрирован: 31 окт 2011, 09:02
Награды: 4
Версия LabVIEW: 2019
Откуда: Санкт-Петербург
Благодарил (а): 8 раз
Поблагодарили: 10 раз
Контактная информация:

Re: Тайминг FPGA

Сообщение Vasiliy Baev »

mxdamage, могу ошибаться, но плодовая на вход метода wait for rising edge положительное значение вы определяете время до следующей синхронизации. То есть ваша программа ждет положительного фронта, после чего 2 секунды "курит", потом снова ждет.
обязательно сами задавайте частоту цикла, не оставляйте его в таком виде.
Поищу описание метода и попробую уточнить свой ответ.
Аватара пользователя
mxdamage

Activity
assistant
assistant
Сообщения: 113
Зарегистрирован: 11 авг 2011, 15:45
Награды: 1
Версия LabVIEW: 2011
Откуда: Москва
Контактная информация:

Re: Тайминг FPGA

Сообщение mxdamage »

Vasa писал(а):mxdamage, могу ошибаться, но плодовая на вход метода wait for rising edge положительное значение вы определяете время до следующей синхронизации. То есть ваша программа ждет положительного фронта, после чего 2 секунды "курит", потом снова ждет.
обязательно сами задавайте частоту цикла, не оставляйте его в таком виде.
Поищу описание метода и попробую уточнить свой ответ.
Нет, это просто таймаут команды. Она висит и ждет 2 секунды сигнал, потом заканчивает свое выполнение, выдавая true на timed out.
И цикл начинается заново.
Аватара пользователя
mark
beginner
beginner
Сообщения: 39
Зарегистрирован: 18 ноя 2010, 21:35
Версия LabVIEW: 2015

Re: Тайминг FPGA

Сообщение mark »

mxdamage, привет!


Я выскажу свою точку зрения, и хочу, чтобы сообщество меня опровергло в случае, если я не прав. С ПЛИСом я знаком только на уровне LabVIEW FPGA Module.
Когда считаю количество "тиков" FPGA между PPS, он выдает мне число ~39999700 вместо 40000000
А это дает ошибку 0,00075%, или 0.6 секунды в сутки, что плохо...

Думаю, что это "нормальная ситуация". В своем проекте я так же получаю pps от GPS, и у меня количество тиков между импульсами ~39 999 9840. Шасси NI 9112.

Дело в том, что источником времени на ПЛИС и сигналом синхронизации, насколько мне известно, служит осциллятор, частота которого зависит, как минимум, от температуры. Это означает, что ПЛИС будет работать на частоте 40 МГц при правильном написании кода, но эти 40 МГц - не совсем 40 МГц "настоящих", а 40 МГц по мнению осциллятора. В вашем случае 39,9997 МГц.

Об этой величине есть упоминание в DataSheet на шасси.
Accuracy ±100 ppm (max)

Это означает, что на каждый МГц у вас частота (в самых :vampire: худших условиях) может отличаться на +- 100 Гц. В случае 40 МГц - +-4000 Гц. И эта величина достаточно велика. Это означает, в частности, что за секунду у вас тики могут "недобежать" целых 10 us.

Решение - синхронизироваться как можно чаще, в идеале - каждую секунду.
Или, вычислив один раз поправку, всегда ее применять по возможности (если внешние условия не меняются).
Аватара пользователя
mxdamage

Activity
assistant
assistant
Сообщения: 113
Зарегистрирован: 11 авг 2011, 15:45
Награды: 1
Версия LabVIEW: 2011
Откуда: Москва
Контактная информация:

Re: Тайминг FPGA

Сообщение mxdamage »

mark писал(а): Дело в том, что источником времени на ПЛИС и сигналом синхронизации, насколько мне известно, служит осциллятор, частота которого зависит, как минимум, от температуры. Это означает, что ПЛИС будет работать на частоте 40 МГц при правильном написании кода, но эти 40 МГц - не совсем 40 МГц "настоящих", а 40 МГц по мнению осциллятора. В вашем случае 39,9997 МГц.

Об этой величине есть упоминание в DataSheet на шасси.
Accuracy ±100 ppm (max)
Привет, mark!

Спасибо за столь подробный комментарий, думаю, все есть так на деле. Только на мое шасси (9074) вообще указано 200 ppm нестабильности. Это означает, что если я потеряю сигнал pps, то мои часы убегут быстро и далеко. А так как контроллер будет стоять в "поле", то возможность потерять что-либо надо учитывать. После некоторых прикидок у меня вышло, что меня вполне устроит 1 ppm, то есть уход примерно на 50 мс в сутки.

Предположил, что частота осциллятора зависит лишь от температуры. Поставил маленький эксперимент.
Контроллер стоит в офисе, поэтому большого разброса температур достичь не получилось.
Частота, думаю, считалась достаточно точно, потому что Trimble заявляет стабильность pps в 15 нс. Время же "Тика" ПЛИС -25нс
За точность внутреннего датчика температуры ПЛИС ручаться не могу, правда.
Безымянный.png
Верхний чарт - частота, Гц, нижний - температура, в цельсиях.
ХУ плот - это их взаимозависимость.

Выходит, зависимость частоты от температуры в пределах 30-40 градусов отлично (R2=0.98) описывается прямой F=-18.31*t+40000404
Таким образом, зная температуру платы, можно с достаточной точностью (СКВО~3.17) определить частоту.
А коэффициенты аппроксимирующей прямой можно заставить рассчитывать RT, в моменты, когда есть PPS.

Вот такие дела, может тоже кому-нибудь окажется полезным.
Аватара пользователя
mark
beginner
beginner
Сообщения: 39
Зарегистрирован: 18 ноя 2010, 21:35
Версия LabVIEW: 2015

Re: Тайминг FPGA

Сообщение mark »

mxdamage,

Молодец! :clap: Как я сам не догадался такой опыт поставить!?

Как найдется время, попробую и я такую зависимость построить. Спасибо!
zar.max
beginner
beginner
Сообщения: 11
Зарегистрирован: 26 янв 2015, 11:56
Версия LabVIEW: 2011
Контактная информация:

Re: Тайминг FPGA

Сообщение zar.max »

Здравствуйте, mxdamage!
На данный момент разбираюсь с синхронизацией времени контроллера по GPS при появлении сигнала PPS. И у меня возник вопрос по выше представленному :vi:. Как было подсчитано время тиков на выполнение цикла?
Время тиков на выполнение фиксировано и тут получилось равно 6.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Real Time / FPGA / Embedded»