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

Прием данных с АЦП AD9681

Есть Artix7 и AD9681.

Приём сделан по схеме DATA_PIN- IBUFDS-IDELAYE2-ISERDESE2.
К выходу ISERDESE2 я подключил калибратор.
Выбранный режим приёма - DDR two-lane, bytewise.

Далее привожу алгоритм.
1) По SPI выбираю режим передачи данных DDR two-lane, bytewise -0x21 значение 30.


2) По SPI выбираю режим передачи тестовой последовательности, состоящей из 2 слов. - 0x0D значение 04.



3) Используя перебор 32 значений IDELAYE2 и 8 bitslip-ов я добиваюсь того, чтобы на выходе ISERDESE2 появились искомые A8 54 на одном лэйне и AA 55 на другом. Автомат проверяет, чтобы стабильный результат на выходе был не менее 8192 раз. Если нет, то либо задержка, либо (если задержка достигает 32 - битслип). В итоге стабильно добиваюсь такого результата:



4) По SPI выбираю режим отключения тестовой последовательности, состоящей из 2 слов. - 0x0D значение 00.

И вижу такой результат при подаче с генератора синуса частоты 1 МГц:




Т.е. явно видно, что какой-то бит явно "врёт", хотя если опять вернуться на тестовую последовательность, то всё по-прежнему ок.

В чём может быть проблема?

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Art55555 @ Oct 3 2017, 17:19) <{POST_SNAPBACK}>
И вижу такой результат при подаче с генератора синуса частоты 1 МГц:
В чём может быть проблема?

Помочь не смогу, но чисто предположение, исходя из собственных АЦП-страданий:
осциллограф показывает чистый синус с генератора? И с подключенным АЦП и с отключенным?

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


Ссылка на сообщение
Поделиться на другие сайты
Так PN9 подайте и все сразу видно будет если цифровая часть врет. Вот только как там задержку в пайплайне подобрать правильную для синхронизации?
А если цифра не врет- то надо бы увеличить емкости фильтра перед входом АЦП, При емкости сравнимой с емкостями УВХ АЦП наблюдались подобные приключения. Можно еще пилу подать, на ней лучше видно в каком бите глюк.

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата
3) Используя перебор 32 значений IDELAYE2 и 8 bitslip-ов я добиваюсь того, чтобы на выходе ISERDESE2 появились искомые A8 54 на одном лэйне и AA 55 на другом. Автомат проверяет, чтобы стабильный результат на выходе был не менее 8192 раз. Если нет, то либо задержка, либо (если задержка достигает 32 - битслип).

При таком алгоритме вы попадете не в центр окна данных (sample window),а в его край, где данные боле-менее стабильны. Вроде и не страшно, но всё-же обратите на это внимание.
А схема тактирования какая ?

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


Ссылка на сообщение
Поделиться на другие сайты
не стоит городить велосипед - возьмите готовый ад-ый код.

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(monty @ Oct 4 2017, 08:15) <{POST_SNAPBACK}>
не стоит городить велосипед - возьмите готовый ад-ый код.


В описании микросхемы на AD нет ничего для ПЛИС.

Цитата(Flip-fl0p @ Oct 4 2017, 00:14) <{POST_SNAPBACK}>
При таком алгоритме вы попадете не в центр окна данных (sample window),а в его край, где данные боле-менее стабильны. Вроде и не страшно, но всё-же обратите на это внимание.
А схема тактирования какая ?


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

Теперь про такт.

От АЦП заходит быстрый DCO. Защёлкиваю его IBUFGDS. Получили сигнал ACLK. Далее из него делаю инверсный через конструкцию
aclk_inv<=not aclk;

Параллельно с помощью BUFR делением на 4 получаю aclk_div.

Все эти дела подаются на ISERDESE2.

Да, подстройку по IDELAYE2 делаю по такту другому - 100 МГц (хотя делал и по делённому aclk_div - разницы не увидел)


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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Art55555 @ Oct 4 2017, 07:32) <{POST_SNAPBACK}>
В описании микросхемы на AD нет ничего для ПЛИС.

Посмотрите здесь, может есть что-нибудь: https://github.com/analogdevicesinc/hdl.git

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


Ссылка на сообщение
Поделиться на другие сайты
Посмотрите также Xilinx xapp524, xapp585, xapp1071/866, есть и соответствующие zip файлы с исходниками.

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


Ссылка на сообщение
Поделиться на другие сайты
Я, конечно же, брал за основу эти документы.

Бросается в глаза то, что я не использую FRAME для детектирование правильности данных.
Просто у меня калибровочная машина подключена к каждой Data-lane и я ожидаю с неё попеременно 2 разных числа, которые мне известны.
Далее, после каждого сердеса идёт фифо, выход которого уже идёт на выход.
Правильно ли это?


Ещё возник вопрос по поводу PN23.
Подумал, что не совсем корректно калиброваться по 2 выходным значениям. Решил попробовать с PN23.

По поводу изобретения велосипеда - на гитхабе этой АЦП нет, а те, что есть - непонятный принцип работы.
Что есть дата и как подавать стартовую последовательность для AD9681 0x7FFC?
Также не понятно, для чего эти входные данные нужны в режиме генератора, к тому же 23 бита в "рабочем векторе", а входные(выходные) данные только 16.
Какие генераторы я нашёл, а также самописный почему-то не дают последоватьельность 0x7F80, 0x8004, 0x7000, указанную в даташите.

Кто-нибудь встречался с данными проблемами?

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


Ссылка на сообщение
Поделиться на другие сайты
Кратко процесс калибровки: первый этап- поставить клок в центр (середину)
принимаемых данных (бита) меняя задержку Второй этап- управляя битслипом принять
правильно определенное значение (тестовый код).
Калибровка проводится на определенный тестовый код (например "1xsync", "1/0 bit toggle", "mixed bit frequency")
Те ацп при калибровке должен генерить простой код 12/16бит. Можно посчитать сколько единиц задержки ваше окно
Так если данные 1 Gbit (16 Bit)- период(окно) 1 нс и требуется всего 12-13 ед задержки (по 78 ps) для стабильного приема,
потом 2-3 единицы нестабильный прием (попали на переход-другое значение бита) и опять все снова. Это вы должны наблюдать в ручном режиме.
Окончательно устанавливается середина стабильного участка.
Калибровка выполняется на один тестовый код. Потом можно проверять результат калибровки разными способами.

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


Ссылка на сообщение
Поделиться на другие сайты
А информация из http://www.analog.com/media/en/technical-d...otes/AN-877.pdf для AD9681 применима? Там описаны биты сброса псевдослучайной последовательнсти.

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(khach @ Oct 6 2017, 20:36) <{POST_SNAPBACK}>
А информация из http://www.analog.com/media/en/technical-d...otes/AN-877.pdf для AD9681 применима? Там описаны биты сброса псевдослучайной последовательнсти.


Сброс последовательности мне не требуется, старт я вижу сразу, генератор PN23 будет генерить и сравнивать значения.

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


Ссылка на сообщение
Поделиться на другие сайты
Я НЕ использую FRAME - калибруюсь по последовательности - это нормально? Для чего-то ведь этот сигнал существует)

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата
Кратко процесс калибровки: первый этап- поставить клок в центр (середину)
принимаемых данных (бита) меняя задержку

А можно про этот процесс чуть подробнее ?
Допустим есть некий АЦП который управляется по SPI.
Мы либо запускаем АЦП в "нормальном" режиме - когда он гонит данные.
Либо запускаем АПЦ в режиме калибровки - когда он гонит тестовую последовательность.
Читал доки от xilinx но так и не понял как определяются границы бита, чтобы выставить клок в центр данных.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация