реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Прием данных с АЦП AD9681
Art55555
сообщение Oct 3 2017, 14:19
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Есть 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 МГц:




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

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

Go to the top of the page
 
+Quote Post
AVR
сообщение Oct 3 2017, 14:23
Сообщение #2


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



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

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


--------------------
Go to the top of the page
 
+Quote Post
Amurak
сообщение Oct 3 2017, 15:28
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 18-11-12
Пользователь №: 74 459



А если скремблер подать?
Go to the top of the page
 
+Quote Post
khach
сообщение Oct 3 2017, 19:38
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Так PN9 подайте и все сразу видно будет если цифровая часть врет. Вот только как там задержку в пайплайне подобрать правильную для синхронизации?
А если цифра не врет- то надо бы увеличить емкости фильтра перед входом АЦП, При емкости сравнимой с емкостями УВХ АЦП наблюдались подобные приключения. Можно еще пилу подать, на ней лучше видно в каком бите глюк.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Oct 3 2017, 20:14
Сообщение #5


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



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

При таком алгоритме вы попадете не в центр окна данных (sample window),а в его край, где данные боле-менее стабильны. Вроде и не страшно, но всё-же обратите на это внимание.
А схема тактирования какая ?
Go to the top of the page
 
+Quote Post
monty
сообщение Oct 4 2017, 04:15
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 19-12-05
Пользователь №: 12 399



не стоит городить велосипед - возьмите готовый ад-ый код.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 4 2017, 07:32
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(monty @ Oct 4 2017, 08:15) *
не стоит городить велосипед - возьмите готовый ад-ый код.


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

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


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

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

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

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

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

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


Go to the top of the page
 
+Quote Post
sawyer0
сообщение Oct 4 2017, 07:51
Сообщение #8





Группа: Участник
Сообщений: 10
Регистрация: 1-03-17
Из: РФ
Пользователь №: 95 661



Цитата(Art55555 @ Oct 4 2017, 07:32) *
В описании микросхемы на AD нет ничего для ПЛИС.

Посмотрите здесь, может есть что-нибудь: https://github.com/analogdevicesinc/hdl.git
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 4 2017, 16:33
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Посмотрите также Xilinx xapp524, xapp585, xapp1071/866, есть и соответствующие zip файлы с исходниками.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 6 2017, 12:44
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Я, конечно же, брал за основу эти документы.

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


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

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

Кто-нибудь встречался с данными проблемами?
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 6 2017, 16:14
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



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


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



А информация из http://www.analog.com/media/en/technical-d...otes/AN-877.pdf для AD9681 применима? Там описаны биты сброса псевдослучайной последовательнсти.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 9 2017, 12:37
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



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


Сброс последовательности мне не требуется, старт я вижу сразу, генератор PN23 будет генерить и сравнивать значения.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 9 2017, 16:48
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Я НЕ использую FRAME - калибруюсь по последовательности - это нормально? Для чего-то ведь этот сигнал существует)
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Oct 9 2017, 20:04
Сообщение #15


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



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

А можно про этот процесс чуть подробнее ?
Допустим есть некий АЦП который управляется по SPI.
Мы либо запускаем АЦП в "нормальном" режиме - когда он гонит данные.
Либо запускаем АПЦ в режиме калибровки - когда он гонит тестовую последовательность.
Читал доки от xilinx но так и не понял как определяются границы бита, чтобы выставить клок в центр данных.
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 10 2017, 05:12
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



FRAME (frame clk) должен использоваться в любом случае.
Есть два варианта структурных схем соединения. Это xapp524 и xapp585.
Какой у вас непонятно. Важна и блок схема клок дистрибьюции.
Как формируются сигналы bitclk и frmclk для сердеса и тд?
Потом режим 12 бит АЦП как делается на сердесах? (xapp585, p.2)
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Oct 10 2017, 06:14
Сообщение #17


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Алга @ Oct 10 2017, 08:12) *
FRAME (frame clk) должен использоваться в любом случае.
Есть два варианта структурных схем соединения. Это xapp524 и xapp585.
Какой у вас непонятно. Важна и блок схема клок дистрибьюции.
Как формируются сигналы bitclk и frmclk для сердеса и тд?
Потом режим 12 бит АЦП как делается на сердесах? (xapp585, p.2)

Спасибо за эти Xapp, их я как раз не читал.
Я бегло просмотрел их, и как я понял если частоты bit clock и frame clock никак не связанны временным соотношением с данными (соотношение может быть любым и разным при каждом включении питания) то эти варианты неприменимы.
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 10 2017, 06:43
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



У меня за основу принят xapp585. В системе 4 отдельных корпуса АЦП другого типа. Все работает.
Начинал с харр524, Казалось будет проще. Но в итоге отказался и перешел на xapp585.

Не заметил один из вопросов. Как определяются границы бита?
Принимаются данные через сердес и запоминаются Далее меняется задержка.
Но при очередной следующей задержке, если сменимись данные (код данных), то это означает что попали на фронт смены бита.
Так определяются границы задержек стабильного приема данных и вычисляется середина этого участка,
которая и окончательно устанавливается. Все это описано в xapp'ах и даже лучше.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Oct 10 2017, 06:58
Сообщение #19


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Алга @ Oct 10 2017, 09:43) *
У меня за основу принят xapp585. В системе 4 отдельных корпуса АЦП другого типа. Все работает.
Начинал с харр524, Казалось будет проще. Но в итоге отказался и перешел на xapp585.

Не заметил один из вопросов. Как определяются границы бита?
Принимаются данные через сердес и запоминаются Далее меняется задержка.
Но при очередной следующей задержке, если сменимись данные (код данных), то это означает что попали на фронт смены бита.
Так определяются границы задержек стабильного приема данных и вычисляется середина этого участка,
которая и окончательно устанавливается. Все это описано в xapp'ах и даже лучше.

Понятно, я точно-так же и калибруюсь bb-offtopic.gif .
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 18 2017, 12:13
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Алга @ Oct 10 2017, 09:43) *
У меня за основу принят xapp585. В системе 4 отдельных корпуса АЦП другого типа. Все работает.
Начинал с харр524, Казалось будет проще. Но в итоге отказался и перешел на xapp585.

Не заметил один из вопросов. Как определяются границы бита?
Принимаются данные через сердес и запоминаются Далее меняется задержка.
Но при очередной следующей задержке, если сменимись данные (код данных), то это означает что попали на фронт смены бита.
Так определяются границы задержек стабильного приема данных и вычисляется середина этого участка,
которая и окончательно устанавливается. Все это описано в xapp'ах и даже лучше.


Отправил Вам в личку сообщение. Посмотрите, плз. Спасибо!
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Oct 18 2017, 12:18
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(Flip-fl0p @ Oct 9 2017, 23:04) *
А можно про этот процесс чуть подробнее ?
Допустим есть некий АЦП который управляется по SPI.
Мы либо запускаем АЦП в "нормальном" режиме - когда он гонит данные.
Либо запускаем АПЦ в режиме калибровки - когда он гонит тестовую последовательность.
Читал доки от xilinx но так и не понял как определяются границы бита, чтобы выставить клок в центр данных.



Пропускаем данные через блоки IDELAYE2, перебираем все возможные задержки. Засекаем две задержки - минимальную и максимальную, при которых тестовая последовательность или счетчик проходят тест. Берем ту, что по середине - попадаем на центр окна.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Oct 18 2017, 12:35
Сообщение #22


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Tausinov @ Oct 18 2017, 15:18) *
Пропускаем данные через блоки IDELAYE2, перебираем все возможные задержки. Засекаем две задержки - минимальную и максимальную, при которых тестовая последовательность или счетчик проходят тест. Берем ту, что по середине - попадаем на центр окна.

Спасибо. Главное для себя узнал, поскольку практически во всех вариантах определения границ бита мы анализируем данные и на основании принятых данныех делаем вывод о границах бита.
Я просто думал, может есть какая "хитрая" схема по типу фазового детектора, где мы не данные смотрим, а обнаруживаем сам факт изменения бита. На медленной скорости приема за счет какого-нибудь oversampling - это не проблема совсем. А вот на скоростях приёма, близких к предельным для ПЛИС, этот вариант не подходит.

Сообщение отредактировал Flip-fl0p - Oct 18 2017, 12:39
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 18 2017, 17:15
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Сделал 2 различных варианта работы.
Пробовал как в XAPP 524, так и и по XAPP585.
В обоих документах калибровка начинается с "выравнивания" такта.
Про данные позже.
Вход защёлкнут IBUFGDS. Далее так идёт на IDELAY2, выходит задержанный сигнал, идёт на вход DDLY ISERDES. Выход, который О, раздваивается на IOBUF (нужен в качестве быстрого такта для ISERDESов) и на BUFR (делит на 4) и используеся в качестве делённой частоты, также идёт на ISERDESы. Выход ISERDES анализируется.
Также отмечаю, что пробовал ещё несколько вариантов деления частоты, использования MMCM и др.
Подстройку провожу с помощью C и CE на IDELAYE2. Совершенно не нравится, что результат не меняется или меняется на 1 отчёт, а потом восстанавливаеся.
Поясню. В режиме защёлкивания такта DDR я всегда получаю значение 55. Если даю задержку (через VIO), то один такт получаю что-то типа 5E, а потом опять 55.
Если ставлю SDR, то итоговое значение FF, которое также не меняется - хоть на СЕ всегда подавай 1.

Один из вариантов кода привожу ниже.

x_dco0 : IBUFGDS
generic map (
DIFF_TERM => TRUE, -- Differential Termination
IBUF_LOW_PWR => TRUE, -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards
IOSTANDARD => "LVDS_25")
port map (
O => aclk, -- Clock buffer output
I => dco1p, -- Diff_p clock buffer input (connect directly to top-level port)
IB => dco1n -- Diff_n clock buffer input (connect directly to top-level port)
);

xIDELAY: IDELAYE2
generic map (
SIGNAL_PATTERN => "CLOCK",
REFCLK_FREQUENCY => 200.0,
HIGH_PERFORMANCE_MODE => "TRUE",
--FINEDELAY => "BYPASS",
DELAY_SRC => "IDATAIN",
CINVCTRL_SEL => "FALSE",
IDELAY_TYPE => "VARIABLE",
IDELAY_VALUE => 0,
PIPE_SEL => "FALSE"
)
port map (
DATAIN => '0',
IDATAIN => aclk,
DATAOUT => d_aclk,

C => aclk_div,
CE => set_idelay_dco,
INC => '1',
LD => '0',
CNTVALUEIN => "00000",
CNTVALUEOUT => open,-

REGRST => reset,
CINVCTRL => '0',
LDPIPEEN => '0'
);



BUFR_ins1 : BUFR
generic map (
BUFR_DIVIDE => "4", -- Values: "BYPASS, 1, 2, 3, 4, 5, 6, 7, 8"
SIM_DEVICE => "7SERIES" -- Must be set to "7SERIES"
)
port map (
O => aclk_div, -- 1-bit output: Clock output port
CE => '1', -- 1-bit input: Active high, clock enable (Divided modes only)
CLR => '0', -- 1-bit input: Active high, asynchronous clear (Divided modes only)
I => IntBitClk -- 1-bit input: Clock buffer input driven by an IBUFG, MMCM or local interconnect
);

xCLK_FB_inv: bufio port map ( i => IntBitClk, o => aclk_int ); --FB
aclk_int_n<=not aclk_int;

xISERDES111: ISERDESE2
generic map (
SERDES_MODE => "MASTER",
INTERFACE_TYPE => "NETWORKING",
IOBDELAY => "IBUF",
DATA_RATE => "DDR",
DATA_WIDTH => 8,
DYN_CLKDIV_INV_EN => "FALSE",
DYN_CLK_INV_EN => "FALSE",
NUM_CE => 1,
OFB_USED => "FALSE",
INIT_Q1 => '0',
INIT_Q2 => '0',
INIT_Q3 => '0',
INIT_Q4 => '0',
SRVAL_Q1 => '0',
SRVAL_Q2 => '0',
SRVAL_Q3 => '0',
SRVAL_Q4 => '0'
)
port map (
-- Registered outputs
Q1 => dco_calib_out(0),
Q2 => dco_calib_out(1),
Q3 => dco_calib_out(2),
Q4 => dco_calib_out(3),
Q5 => dco_calib_out(4),
Q6 => dco_calib_out(5),
Q7 => dco_calib_out(6),
Q8 => dco_calib_out(7),
-- Unregistered output
O => IntBitClk, --ser_dat(ii),
-- Carry out for bit expansion
SHIFTOUT1 => open,
SHIFTOUT2 => open,
-- Serial data in from PAD or IODELAY
D => '0',-- aclk,--'0',
DDLY => d_aclk,--d_aclk,
-- Carry in for bit expansion
SHIFTIN1 => '0',
SHIFTIN2 => '0',
-- Clock signals
CLK => aclk_int,-- high-speed clock
CLKB => aclk_int_n, -- inverted clock
CLKDIV => aclk_div,-- divided clock
-- Clock enable
CE1 => '1',
CE2 => '0',
-- Reset
RST => reset, --rst(i),
--- NOT USED
BITSLIP => '0', -- bitslip operation-------------------
OCLK => '0', -- high-speed clock
OCLKB => '0', -- inverted clock

DYNCLKSEL => '0',
DYNCLKDIVSEL => '0',
CLKDIVP => '0',
OFB => '0' -- feedback path

);

dco_calib_out_t<=dco_calib_out;

Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 18 2017, 17:39
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Примитив IDELAYCTRL в системе заведен?
Можно проверить работает ли IDELAYE2,
увеличили значение задержки посмотрели на выходах CNTVALUEOUT код задержки. Все коды должны быть стабильны.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 18 2017, 22:56
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Алга @ Oct 18 2017, 20:39) *
Примитив IDELAYCTRL в системе заведен?
Можно проверить работает ли IDELAYE2,
увеличили значение задержки посмотрели на выходах CNTVALUEOUT код задержки. Все коды должны быть стабильны.


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

По поводу CNTVALUEOUT-вчера заводит длятеста IN (результат такой же, как и с инкрементом задержки на 1/32), OUT же оставил открытым, сегодня проверю.
Спасибо!
Go to the top of the page
 
+Quote Post
Timmy
сообщение Oct 19 2017, 05:34
Сообщение #26


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(Art55555 @ Oct 19 2017, 01:56) *
В данной реализации НЕ заведён, но в ряде предыдущих был однозначно. Не могу сказать, что что-то изменилось после этого. Тем не менее, сегодня его вставлю, отпишусь.

По поводу CNTVALUEOUT-вчера заводит длятеста IN (результат такой же, как и с инкрементом задержки на 1/32), OUT же оставил открытым, сегодня проверю.
Спасибо!

Дизайн этот странный какой-то. Вы заводите на вход данных SERDES задержанный клок, и на вход клока SERDES тот же самый задержанный клок, естественно, изменение задержки не будет менять значения на выходах SERDES. И ещё непонятно, зачем пропускать клок через IBUFGDS(он же вроде BUFG вставляет) а потом ещё и через SERDES, а не прямо по цепочке IBUFDS -> IDELAY -> (BUFIO, BUFR параллельно)
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 19 2017, 05:40
Сообщение #27


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Напомню, что к xapp524,585 есть исходники как пример (как и к другим xapp'ам). Можно скачать и посмотреть.
Также история вопроса (идеи) начинается с xapp855,856,860, 774, 1064 по мере появления новых семейств.
В том смысле что примеры более простые.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 19 2017, 07:56
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Timmy @ Oct 19 2017, 09:34) *
Дизайн этот странный какой-то. Вы заводите на вход данных SERDES задержанный клок, и на вход клока SERDES тот же самый задержанный клок, естественно, изменение задержки не будет менять значения на выходах SERDES. И ещё непонятно, зачем пропускать клок через IBUFGDS(он же вроде BUFG вставляет) а потом ещё и через SERDES, а не прямо по цепочке IBUFDS -> IDELAY -> (BUFIO, BUFR параллельно)



Это скрин от XAPP524, выход SERDES идёт на клоковые буферы, а при выходе из компонента сразу заводится на вход.
Прикрепленное изображение


По поводу IBUFGDS. Такт приходит с клоковых ног, и из P и N я делаю общий глобальный клок. Или я что-то не так понимаю? ))

В итоге, как подключать-то?
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 19 2017, 08:47
Сообщение #29


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Надо пока доверять xapp'у (исходникам) и проверять.
В скрин не попали аттрибуты SERDESE2, важно состояние аттрибута IOBDELAY= (NONE,IBUF,IFD, BOTH),
ug471, p.157. Тогда на выходах SERDESE2 разная ситуация.
На фиг6 xapp'a неточность.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 19 2017, 16:26
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Учёл все рекомендации.
Результат такой же.
Сигнал dco_calib_out ВСЕГДА равен AA. Пробовал менять задержку через CNTVALUEIN - ничего не меняется. Если же пытаюсь подстраиваться через CE/INC, то на 1 такт АА превращается в BA. Не фиксируется. Код ниже.

x_dco0 : IBUFDS
generic map (
DIFF_TERM => TRUE, -- Differential Termination
IBUF_LOW_PWR => TRUE, -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards
IOSTANDARD => "LVDS_25")
port map (
O => aclk, -- Clock buffer output
I => dco1p, -- Diff_p clock buffer input (connect directly to top-level port)
IB => dco1n -- Diff_n clock buffer input (connect directly to top-level port)
);


xIDELAY: IDELAYE2
generic map (
SIGNAL_PATTERN => "CLOCK",
REFCLK_FREQUENCY => 200.0,
HIGH_PERFORMANCE_MODE => "TRUE",
--FINEDELAY => "BYPASS",
DELAY_SRC => "IDATAIN",
CINVCTRL_SEL => "FALSE",
IDELAY_TYPE => "VARIABLE",
IDELAY_VALUE => 0,
PIPE_SEL => "FALSE"
)
port map (
DATAIN => '0',--,
IDATAIN => aclk,
DATAOUT => d_aclk,

C => CLK,
CE => set_idelay_dco,
INC => '1',
LD => ld_dco_delay,
CNTVALUEIN => dco_delay,
CNTVALUEOUT => open,

REGRST => reset,
CINVCTRL => '0',
LDPIPEEN => '0'
);

bufio_adc: buf port map ( i => d_aclk, o => aclk_main ); --FB

BUFR_ins1 : BUFR
generic map (
BUFR_DIVIDE => "4", -- Values: "BYPASS, 1, 2, 3, 4, 5, 6, 7, 8"
SIM_DEVICE => "7SERIES" -- Must be set to "7SERIES"
)
port map (
O => aclk_div, -- 1-bit output: Clock output port
CE => '1', -- 1-bit input: Active high, clock enable (Divided modes only)
CLR => '0', -- 1-bit input: Active high, asynchronous clear (Divided modes only)
I => d_aclk -- 1-bit input: Clock buffer input driven by an IBUFG, MMCM or local interconnect
);

-- x_IDELAYCTRL : IDELAYCTRL
-- port map (REFCLK => clk, RST => reset, RDY => AdcIdlyCtrlRdy);


xISERDES111: ISERDESE2
generic map (
SERDES_MODE => "MASTER",
INTERFACE_TYPE => "NETWORKING",
IOBDELAY => "Both",
DATA_RATE => "DDR",
DATA_WIDTH => 8,
DYN_CLKDIV_INV_EN => "FALSE",
DYN_CLK_INV_EN => "FALSE",
NUM_CE => 1,
OFB_USED => "FALSE",
INIT_Q1 => '0',
INIT_Q2 => '0',
INIT_Q3 => '0',
INIT_Q4 => '0',
SRVAL_Q1 => '0',
SRVAL_Q2 => '0',
SRVAL_Q3 => '0',
SRVAL_Q4 => '0'
)
port map (
-- Registered outputs
Q1 => dco_calib_out(0),
Q2 => dco_calib_out(1),
Q3 => dco_calib_out(2),
Q4 => dco_calib_out(3),
Q5 => dco_calib_out(4),
Q6 => dco_calib_out(5),
Q7 => dco_calib_out(6),
Q8 => dco_calib_out(7),
-- Unregistered output
O => open,--IntBitClk, --ser_dat(ii),
-- Carry out for bit expansion
SHIFTOUT1 => open,
SHIFTOUT2 => open,
-- Serial data in from PAD or IODELAY
D => aclk,--'0',
DDLY => '0', --d_aclk,--d_aclk,
-- Carry in for bit expansion
SHIFTIN1 => '0',
SHIFTIN2 => '0',
-- Clock signals
CLK => aclk_main,-- high-speed clock
CLKB => not aclk_main, -- inverted clock
CLKDIV => aclk_div,-- divided clock
-- Clock enable
CE1 => '1',
CE2 => '0',
-- Reset
RST => reset, --rst(i),
--- NOT USED
BITSLIP => '0', -- bitslip operation-------------------
OCLK => '0', -- high-speed clock
OCLKB => '0', -- inverted clock

DYNCLKSEL => '0',
DYNCLKDIVSEL => '0',
CLKDIVP => '0',
OFB => '0' -- feedback path

);

dco_calib_out_t<=dco_calib_out;
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 20 2017, 05:38
Сообщение #31


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



В ручном режиме нужно добиться, что у вас работает установка задержки IDELAYE2
путем ее проверки на выходе.
На входе С, Клок на этом примитиве CLK(???-что за сигнал )- должен aclk_div.
Все другие управлениющие сигналы (для idelaye2 iserdese2) производЯтся синхронно с этим сигналом.
Он становится основным клоковым сигналом.
Потом проверить наличие этого сигнала. Какова его частота.
Также нужно следить за установкой аттрибута IDELAY_TYPE (fixed, variable, var_load and etc) IDELAYE2.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 20 2017, 07:14
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Алга @ Oct 20 2017, 09:38) *
В ручном режиме нужно добиться, что у вас работает установка задержки IDELAYE2
путем ее проверки на выходе.
На входе С, Клок на этом примитиве CLK(???-что за сигнал )- должен aclk_div.
Все другие управлениющие сигналы (для idelaye2 iserdese2) производЯтся синхронно с этим сигналом.
Он становится основным клоковым сигналом.
Потом проверить наличие этого сигнала. Какова его частота.
Также нужно следить за установкой аттрибута IDELAY_TYPE (fixed, variable, var_load and etc) IDELAYE2.


С - это основной клоковый сигнал (100 МГц), в данной реализации просто стоит здесь. Заменил на aclk_div. В прошлых реализациях пробовал его. Работает также. Сейчас проверим. А по настройке IDELAY_TYPE variable подойдёт?
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 20 2017, 07:29
Сообщение #33


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Подходит для INC/DEC режима. Если прямая загрузка кода задержки со входов, то режим VAR_LOAD.
Далее С- это clk у вас 100 МГЦ, надо 200 Мгц поскольку нужен для управления IDELAYCTRL.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 23 2017, 09:19
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Алга @ Oct 20 2017, 11:29) *
Подходит для INC/DEC режима. Если прямая загрузка кода задержки со входов, то режим VAR_LOAD.
Далее С- это clk у вас 100 МГЦ, надо 200 Мгц поскольку нужен для управления IDELAYCTRL.


Поправил, ещё такой вопрос. Я првильнопонимаю, что BUFR должны делить на 8 в моём случае?





Сообщение отредактировал Art55555 - Oct 23 2017, 09:31
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 23 2017, 10:30
Сообщение #35


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Не совсем.
BUFR делит на 4. Поскольку ISERDESE2 в данном случае принимает только 8 бит и в DDR режиме.
Если АЦП в DDR режиме также.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 23 2017, 12:22
Сообщение #36


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Алга @ Oct 23 2017, 14:30) *
Не совсем.
BUFR делит на 4. Поскольку ISERDESE2 в данном случае принимает только 8 бит и в DDR режиме.
Если АЦП в DDR режиме также.


В итоге получается вот что.
Результат - всё тот же АА на выходе.. какое бы значение я бы не задавал.
Сигнал dco_calib_out_t должен отправляться на вход калибровочной машины. И там всегда АА.


x_dco0 : IBUFDS
generic map (
DIFF_TERM => TRUE, -- Differential Termination
IBUF_LOW_PWR => TRUE, -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards
IOSTANDARD => "LVDS_25")
port map (
O => aclk, -- Clock buffer output
I => dco1p, -- Diff_p clock buffer input (connect directly to top-level port)
IB => dco1n -- Diff_n clock buffer input (connect directly to top-level port)
);


xIDELAY: IDELAYE2
generic map (
SIGNAL_PATTERN => "CLOCK",
REFCLK_FREQUENCY => 200.0,
HIGH_PERFORMANCE_MODE => "TRUE",
--FINEDELAY => "BYPASS",
DELAY_SRC => "IDATAIN",
CINVCTRL_SEL => "FALSE",
IDELAY_TYPE => "VAR_LOAD",--"VARIABLE",
IDELAY_VALUE => 0,
PIPE_SEL => "FALSE"
)
port map (
DATAIN => '0',--,
IDATAIN => aclk,
DATAOUT => d_aclk,

C => aclk_div,
CE => set_idelay_dco,
INC => '1',
LD => ld_dco_delay,
CNTVALUEIN => dco_delay,
CNTVALUEOUT => open,

REGRST => not AdcIdlyCtrlRdy,
CINVCTRL => '0',
LDPIPEEN => '0'
);

bufio_adc: buf port map ( i => d_aclk, o => aclk_main ); --FB

BUFR_ins1 : BUFR
generic map (
BUFR_DIVIDE => "4", -- Values: "BYPASS, 1, 2, 3, 4, 5, 6, 7, 8"
SIM_DEVICE => "7SERIES" -- Must be set to "7SERIES"
)
port map (
O => aclk_div, -- 1-bit output: Clock output port
CE => '1', -- 1-bit input: Active high, clock enable (Divided modes only)
CLR => '0', -- 1-bit input: Active high, asynchronous clear (Divided modes only)
I => d_aclk -- 1-bit input: Clock buffer input driven by an IBUFG, MMCM or local interconnect
);

x_IDELAYCTRL : IDELAYCTRL
port map (REFCLK => clk, RST => reset, RDY => AdcIdlyCtrlRdy);


xISERDES111: ISERDESE2
generic map (
SERDES_MODE => "MASTER",
INTERFACE_TYPE => "NETWORKING",
IOBDELAY => "Both",
DATA_RATE => "DDR",
DATA_WIDTH => 8,
DYN_CLKDIV_INV_EN => "FALSE",
DYN_CLK_INV_EN => "FALSE",
NUM_CE => 1,
OFB_USED => "FALSE",
INIT_Q1 => '0',
INIT_Q2 => '0',
INIT_Q3 => '0',
INIT_Q4 => '0',
SRVAL_Q1 => '0',
SRVAL_Q2 => '0',
SRVAL_Q3 => '0',
SRVAL_Q4 => '0'
)
port map (
-- Registered outputs
Q1 => dco_calib_out(0),
Q2 => dco_calib_out(1),
Q3 => dco_calib_out(2),
Q4 => dco_calib_out(3),
Q5 => dco_calib_out(4),
Q6 => dco_calib_out(5),
Q7 => dco_calib_out(6),
Q8 => dco_calib_out(7),
-- Unregistered output
O => open,--IntBitClk, --ser_dat(ii),
-- Carry out for bit expansion
SHIFTOUT1 => open,
SHIFTOUT2 => open,
-- Serial data in from PAD or IODELAY
D => aclk,--'0',
DDLY => '0', --d_aclk,--d_aclk,
-- Carry in for bit expansion
SHIFTIN1 => '0',
SHIFTIN2 => '0',
-- Clock signals
CLK => aclk_main,-- high-speed clock
CLKB => not aclk_main, -- inverted clock
CLKDIV => aclk_div,-- divided clock
-- Clock enable
CE1 => '1',
CE2 => '0',
-- Reset
RST => reset, --rst(i),
--- NOT USED
BITSLIP => '0', -- bitslip operation-------------------
OCLK => '0', -- high-speed clock
OCLKB => '0', -- inverted clock

DYNCLKSEL => '0',
DYNCLKDIVSEL => '0',
CLKDIVP => '0',
OFB => '0' -- feedback path

);

dco_calib_out_t<=dco_calib_out;
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 23 2017, 12:36
Сообщение #37


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



АЦП при этом какую частоту на выходе DCO выдает? FCO?

Пробуем IBUFDS аттрибут IBUF_LOW_PWR => FALSE,
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 23 2017, 13:45
Сообщение #38


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981




AD9681 работает в режиме 011 = DDR two-lane, bytewise. Впрочем, смена режимов ничего не даёт.

Пробуем IBUFDS аттрибут IBUF_LOW_PWR => FALSE,[/quote]

Пробую. Результат через 15 минут.

Цитата(Art55555 @ Oct 23 2017, 17:33) *
Пробую. Результат через 15 минут.


не помогло((

[quote name='Алга' date='Oct 23 2017, 16:36' post='1525596']
АЦП при этом какую частоту на выходе DCO выдает? FCO?

Прикрепленное изображение


Сообщение отредактировал Art55555 - Oct 23 2017, 13:45
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 23 2017, 13:46
Сообщение #39


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Атрибут оставьте в этом состоянии.
Проверяем частоту aclk_div. Какая она? Реальная ...на вашем железе.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 23 2017, 13:55
Сообщение #40


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Алга @ Oct 23 2017, 17:46) *
Атрибут оставьте в этом состоянии.
Проверяем частоту aclk_div. Какая она? Реальная ...на вашем железе.


Атрибут оставил.
А как его проверишь - то? Я сделал по нему счётчик - бежит, всё в порядке.
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 23 2017, 14:02
Сообщение #41


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Вывести его на вывод и
Промерить частоту, допустим осциллографом. Потом пронаблюдать этот сигнал стабилен или нет.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 23 2017, 14:45
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Алга @ Oct 23 2017, 18:02) *
Вывести его на вывод и
Промерить частоту, допустим осциллографом. Потом пронаблюдать этот сигнал стабилен или нет.


Ладно это я посмотрю.
А настройки DDR/SDR 8 бит выход правильно заданы?


Цитата(Art55555 @ Oct 23 2017, 18:19) *
Ладно это я посмотрю.
А настройки DDR/SDR 8 бит выход правильно заданы?


1. Мне не нравится вообще число АА. Ведь мы должны получать все 1 или все 0?
2. Сейчас мы делаем так. Принятый сигнал отправляем на IDELAYE2 для формирования. Из задержанного делаем aclk_main и aclk_div. А на вход D ISERDESE2 подаём "чистый" принятый сигнал aclk, после. Правильно ли это? Может, из "чистого" (несдвинутого) делать aclk_main и aclk_div, ими защёлкивать, а сдвинутый подавать на ISERDESE2 ?
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 23 2017, 15:52
Сообщение #43


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Ещё одно наблюдение.
Если вывести режим ацп с 2-кратной скоростью в 21 регистр подать значение 40 (100 = DDR one-lane, wordwise), то значение выходного ISERDES2 помучается FF. На сигналы LD и CNTVALUEIN по-прежнему реакции нет, а вот, если подать '1' на СЕ, то измение есть, только 1 такт, такое ощущение, что реально не задерживается ничего. Если подать на СЕ единицы на постоянную, то видим, что FF часто сменяются FE, но если единицу убрать, то опять всё возвращается на FF.
Ситуация на том же месте в итоге((
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Oct 23 2017, 16:21
Сообщение #44


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(Art55555 @ Oct 23 2017, 16:55) *
Атрибут оставил.
А как его проверишь - то? Я сделал по нему счётчик - бежит, всё в порядке.


Способ ненадежный - сделать делитель на этой частоте, формирующий моргание диодиком раз в секунду. Оцениваем глазами. При относительно большой погрешности все сразу станет видно.
Способ надежный, но чуть более трудоемкий - параллельно запускаем пару счетчиков. Один на частоте, которую заведомо знаем и уверены в ней, второй - на частоте, которая нас интересует. Зная значения счетчиков и одной из частот, легко находим вторую.
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 23 2017, 16:29
Сообщение #45


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Цитата
Мне не нравится вообще число АА. Ведь мы должны получать все 1 или все 0?

Должно быть стабильные АА и 55 и нестабильные переходы.

Примитив IDELAYE2 работает в нескольких режимах. Если меняется управление, то надо менять и аттрибут IDELAY_TYPE.
Пока он нормально и стабильно не заработает- результата не будет.
И поэтому устанавливаем IDELAYE2 только в режим загрузки
(Сигналы INC и СЕ занулить) и шаг за шагом, устанавливается код задержки, проверяем его на выходе,
смотрим код что есть на выходе ISERDESE2.
Еще внимательно с сигналами сброса. Их также надо проверять и видеть.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 24 2017, 14:02
Сообщение #46


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Что сделано.
1. Заменил тип на VAR_LOAD
2. Подал такт clk_200 с PLL, образованный из начальной 100 МГц путём умножения.
3. Занулил СЕ, INC.

Чего добились:
1. Наконец-то начал реагировать выход ISERDESE2.

Чего не добились:
"ЧИстых" 55 и АА, которые были раньше.

НАблюдения:
После старта платы перевожу в режим 21 регистр значение 30.
После этого видим "грязный" выход - 55. Теперь чистым он никогда не бывает. Дальше я играюсь сигналом CNTVALUEIN=> dco_delay (подаю с VIO) от 00 до 1F. От 55 мы потихоньку переходим к FF-F7 и уже к значению 1D получаем стабильный FF на выходе. Причём, если я прибаляю 1, т.е. на 1E - выход портится (FF-F7 вперемешку), прибавляю ещё 1 (1F) и опять вижу стабильный FF на выходе.
Т.е явного окна (плохо - умеренно- хорошо-умеренно-плохо) я ни вижу.
Также бывает, что при определённых значениях задержки вообще перестаёт работать Chipscope, который тактируется по aclk_div.
И ещё явный косяк с частотами, мне кажется. Сейчас проверяю зависимость между aclk_div и clk_200.
Текущий код ниже.









x_dco0 : IBUFDS
generic map (
DIFF_TERM => TRUE, -- Differential Termination
IBUF_LOW_PWR => FALSE, -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards
IOSTANDARD => "LVDS_25")
port map (
O => aclk, -- Clock buffer output
I => dco1p, -- Diff_p clock buffer input (connect directly to top-level port)
IB => dco1n -- Diff_n clock buffer input (connect directly to top-level port)
);


xIDELAY: IDELAYE2
generic map (
SIGNAL_PATTERN => "CLOCK",
REFCLK_FREQUENCY => 200.0,
HIGH_PERFORMANCE_MODE => "TRUE",
--FINEDELAY => "BYPASS",
DELAY_SRC => "IDATAIN",
CINVCTRL_SEL => "FALSE",
IDELAY_TYPE => "var_load",--"VARIABLE",
IDELAY_VALUE => 0,
PIPE_SEL => "FALSE"
)
port map (
DATAIN => '0',--,
IDATAIN => aclk,
DATAOUT => d_aclk,

C => clk_200, --200 MHz
CE => '0',
INC => '0',
LD => ld_dco_delay, --идет с VIO
CNTVALUEIN => dco_delay, --идет с VIO
CNTVALUEOUT => open,

REGRST => not AdcIdlyCtrlRdy,--'0',--
CINVCTRL => '0',
LDPIPEEN => '0'
);

bufio_adc: bufg port map ( i => d_aclk, o => aclk_main ); --FB
bufio_adc200: bufg port map ( i => clk_200i, o => clk_200 ); --FB

BUFR_ins1 : BUFR
generic map (
BUFR_DIVIDE => "4", -- Values: "BYPASS, 1, 2, 3, 4, 5, 6, 7, 8"
SIM_DEVICE => "7SERIES" -- Must be set to "7SERIES"
)
port map (
O => aclk_div, -- 1-bit output: Clock output port
CE => '1', -- 1-bit input: Active high, clock enable (Divided modes only)
CLR => '0', -- 1-bit input: Active high, asynchronous clear (Divided modes only)
I => d_aclk -- 1-bit input: Clock buffer input driven by an IBUFG, MMCM or local interconnect
);



x_IDELAYCTRL : IDELAYCTRL
port map (REFCLK => clk, RST => reset, RDY => AdcIdlyCtrlRdy);


xISERDES111: ISERDESE2
generic map (
SERDES_MODE => "MASTER",
INTERFACE_TYPE => "NETWORKING",
IOBDELAY => "Both",
DATA_RATE => "DDR",
DATA_WIDTH => 8,
DYN_CLKDIV_INV_EN => "FALSE",
DYN_CLK_INV_EN => "FALSE",
NUM_CE => 1,
OFB_USED => "FALSE",
INIT_Q1 => '0',
INIT_Q2 => '0',
INIT_Q3 => '0',
INIT_Q4 => '0',
SRVAL_Q1 => '0',
SRVAL_Q2 => '0',
SRVAL_Q3 => '0',
SRVAL_Q4 => '0'
)
port map (
-- Registered outputs
Q1 => dco_calib_out(0),
Q2 => dco_calib_out(1),
Q3 => dco_calib_out(2),
Q4 => dco_calib_out(3),
Q5 => dco_calib_out(4),
Q6 => dco_calib_out(5),
Q7 => dco_calib_out(6),
Q8 => dco_calib_out(7),
-- Unregistered output
O => open,--IntBitClk, --ser_dat(ii),
-- Carry out for bit expansion
SHIFTOUT1 => open,
SHIFTOUT2 => open,
-- Serial data in from PAD or IODELAY
D => aclk,--'0',
DDLY => '0', --d_aclk,--d_aclk,
-- Carry in for bit expansion
SHIFTIN1 => '0',
SHIFTIN2 => '0',
-- Clock signals
CLK => aclk_main,-- high-speed clock
CLKB => not aclk_main, -- inverted clock
CLKDIV => aclk_div,-- divided clock
-- Clock enable
CE1 => '1',
CE2 => '0',
-- Reset
RST => reset, --rst(i),
--- NOT USED
BITSLIP => '0', -- bitslip operation-------------------
OCLK => '0', -- high-speed clock
OCLKB => '0', -- inverted clock

DYNCLKSEL => '0',
DYNCLKDIVSEL => '0',
CLKDIVP => '0',
OFB => '0' -- feedback path

);

dco_calib_out_t<=dco_calib_out when rising_edge(aclk_div);

Сообщение отредактировал Art55555 - Oct 24 2017, 14:46
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 25 2017, 06:28
Сообщение #47


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Clk_200 подается только на IDELAYCTRL.
На IDELAYE2 на вход С надо подавать aclk_div.
Все Управляющие сигналы формируются синхронно с эим сигналом.
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 25 2017, 16:51
Сообщение #48


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Для Chipscope может быть пробовать aclk_div пропустить через bufg.

Какая частота дискретизации АЦП?
Как сделана трассировка платы Выравнены ли по длине диф. сигналы клоков и данных?

Можно пробовать еще ISERDESE2 перевести в режим SDR. Тогда на выходе будем иметь "0..0" или "1..1"
взависимости от кода задержки.
В этом xapp'e производится подстройка к переднему фронту клока,
что означает установка клока в центр (середину) принимаемых данных.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 26 2017, 07:08
Сообщение #49


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Наблюдения следующие.

Если ставим BUFR divide=4, то работает корректно только в режиме 21-40
0x40 16-bit 1× DDR one-lane, wordwise 8 × fS Figure 7 (р.38 из datasheet на АЦП). Калибруется, выхожу на стабильные значения FF или АА.

если же в стандартном режиме 21-30 (0x30 16-bit 1× DDR two-lane, bytewise 4 × fS Figure 3 (default setting)) , то никаких 55 мы не видим. То 00, то 80, то каша.
Что-то явно с тактированием или пониманием тактирования.

Да, я сделал 2 счётчика. Один через PLL подал 100 на вход, получил 200 на выоде, счётчик по нему.
Второй по aclk_div.

Так вот, счётчик по aclk_div (при BUFR divide=4 идёт в 2 раза быстрее цлк-шного)...
В режиме 21-40 -одинаковая скорость.
Go to the top of the page
 
+Quote Post
Алга
сообщение Oct 26 2017, 07:34
Сообщение #50


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739




Можно пробовать еще ISERDESE2 перевести в режим SDR.


Цитата
Какая частота дискретизации АЦП?
Как сделана трассировка платы Выравнены ли по длине диф. сигналы клоков и данных?


Если частота дискретизации относительно низкая может способ не работает. Просто не хватать величины задержки.
Нужно указать полные условия.

Go to the top of the page
 
+Quote Post
Timmy
сообщение Oct 26 2017, 13:52
Сообщение #51


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



А мне интересно, вы результаты DRC в Вивадо смотрите? Все ваши варианты кода должны были вызывать предупреждения DRC, в последнем варианте тоже есть серьёзная ошибка.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 26 2017, 14:35
Сообщение #52


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Timmy @ Oct 26 2017, 16:52) *
А мне интересно, вы результаты DRC в Вивадо смотрите? Все ваши варианты кода должны были вызывать предупреждения DRC, в последнем варианте тоже есть серьёзная ошибка.


Unsupported clocking topology used for ISERDESE2
<xISERDES111>. This can result in corrupted data. The CLK / CLKDIV pins
should be driven by the same source through the same buffer type or by a
BUFIO / BUFR combination in order to have a proper phase relationship. Please
refer to the Select I/O User Guide for supported clocking topologies of the
chosen INTERFACE_TYPE mode.


Вы про это?
Go to the top of the page
 
+Quote Post
Timmy
сообщение Oct 26 2017, 17:42
Сообщение #53


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(Art55555 @ Oct 26 2017, 17:35) *
Unsupported clocking topology used for ISERDESE2
Вы про это?

Да, именно про это.
Go to the top of the page
 
+Quote Post
Art55555
сообщение Oct 27 2017, 12:23
Сообщение #54


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Timmy @ Oct 26 2017, 20:42) *
Да, именно про это.


Не понятно как это исправить только, ведь сейчас выход задержанного клока подключён и к BUFR и к BUFG. Как быть - то тогда?



Сообщение отредактировал Art55555 - Oct 27 2017, 12:23
Go to the top of the page
 
+Quote Post
Art55555
сообщение Nov 1 2017, 13:44
Сообщение #55


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 7-10-10
Пользователь №: 59 981



Цитата(Art55555 @ Oct 27 2017, 15:23) *
Не понятно как это исправить только, ведь сейчас выход задержанного клока подключён и к BUFR и к BUFG. Как быть - то тогда?


Это исправил. Но данные по-прежнему некрасивые(
Go to the top of the page
 
+Quote Post
Алга
сообщение Nov 2 2017, 05:53
Сообщение #56


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 29-12-04
Пользователь №: 1 739



Нужно вернуться к проверке частоты 200Мнц. Подозрения, что она правильно формируется на PLL.
Понять и проверить частоты (клоки) АЦП и др входные, поскольку их надо будет точно описать в констрейн файле.
Все должно стыковаться.
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 14:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.02095 секунд с 7
ELECTRONIX ©2004-2016