Cогласно Xapp585 предусмотрена следующая структура :
-Вход frameclk поступает на MMCME для генерации битклока, те здесь производится умножение частоты для приема данных в ISERDES, например в моем случае frameclk равен 62.5 Mhz, битклок необходим 375 Mhz для приема 12 бит данных в режиме DDR. Параллельно Вход frameclk поступает на IDELAY, ISERDES.
-Каждый Вход данных подключены через IDELAY, ISERDES.
-На ППМ длина проводников frameclk (клоковый вход фпга) и данных выравнены.
Работа автомата калибровки следующая: производится поиск центра БИТданных,
для этого установливается начальная задержка IDELAY равная нулю, Производится прием данных frameclk, и фиксируются эти данные. Увеличиваем задержку. Считываем данные frameclk'а и сравниваем с предыдущим значением. Если эти данные не совпали (это означает что попали на фронт,спад данных) то запоминается величина задержки и данные frameclk'а. Далее увеличивая задержку ищем второй переход(изменение данных) и также запоминаем. Затем вычисляется разница кода задержки первого и второго переходов, делится на 2 добавляется к задержке первого перехода (или вычитается из задержки второго перехода) и устанавливается полученное значение задержки в IDELAY. Поскольку frameclk и линии данных выравнены то задержки для всех IDELAY также равны.
Далее калибровка- битслип выравнивание принимаемых 12 бит данных по границе. Производится путем сравнения принимаемых данных с кодом frameclk = 000000111111 и управляя сигналом BITSLIP ISERDES. Делается мах 12 циклов чтобы получить желаемый код frameclk'a. Калибровки закончены. Ждем следующего запуска.
Если frameclk и линии данных имеют разную длину, То АЦП нужно установить в режим калибровки (тестовый режим когда он генерирует код допустим похожий на код frameclk (000000111111). И С КАЖДОЙ линией данных провести операцию по подстройке задержки для поиска центра (середины). И потом битслип операция.
xapp585