|
Проблема приема данных Spartan-6 от АЦП |
|
|
|
Nov 26 2013, 13:39
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 16-11-09
Пользователь №: 53 649

|
Требуется принять поток данных в SPARTAN-6 с двухканальной АЦП LTC2195. Частота 100 МГц, режим DDR 4 lane, т.е данные в АЦП приходят с частотой 200 МГц по переднему и заднему фронту.
Это второй релиз платы (разводка сильно не менялась). В первом релизе, потратив много времени, удалось подобрать смещение фазы DCO (такт с АЦП) с помощью DCM (PHASE_SHIFT). В последнем релизе сделать это не удается. Видно искажение входного сигнала. Пытались подобрать фазу DCO, закреплять в PlanAhead, но безрезультатно. Бывает, что при определенном значении Phase Shift данные принимаются верно, но достаточно что-нибудь поменять в проекте, как все "уезжает". В чем может таиться ошибка? Как лучше организовать прием? Файл с исходным кодом:
ADC2195_receiver.vhd ( 9.53 килобайт )
Кол-во скачиваний: 638
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Nov 26 2013, 14:07
|
Знающий
   
Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741

|
Цитата(maxics @ Nov 26 2013, 16:39)  Требуется принять поток данных в SPARTAN-6 с двухканальной АЦП LTC2195. Частота 100 МГц, режим DDR 4 lane, т.е данные в АЦП приходят с частотой 200 МГц по переднему и заднему фронту.
Это второй релиз платы (разводка сильно не менялась). В первом релизе, потратив много времени, удалось подобрать смещение фазы DCO (такт с АЦП) с помощью DCM (PHASE_SHIFT). В последнем релизе сделать это не удается. Видно искажение входного сигнала. Пытались подобрать фазу DCO, закреплять в PlanAhead, но безрезультатно. Бывает, что при определенном значении Phase Shift данные принимаются верно, но достаточно что-нибудь поменять в проекте, как все "уезжает". В чем может таиться ошибка? Как лучше организовать прием? Файл с исходным кодом:
ADC2195_receiver.vhd ( 9.53 килобайт )
Кол-во скачиваний: 638Да уж. Во-первых, смотрите xapp645. Принимать надо входными serdes, инвертировать после триггера или serdes. Если разводка и правильная, то можно и dcm фазу двигать, а по идее надо через iodelay на каждом выводе. У этого ацп есть тестовый режим, по нему легко фазу подстроить динамически. У меня s6 принимает в режиме 2-х линий, частота выборки 800 мгц, запас по фазе где-то 8 делений iodelay, и даже при идеально выровненных парах оптимальная фаза отличается до 2-х делений.
|
|
|
|
|
Nov 26 2013, 14:21
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 16-11-09
Пользователь №: 53 649

|
Цитата(TRILLER @ Nov 26 2013, 16:59)  А вы входные триггеры в "лапы" поместили? Что есть "лапы"?
|
|
|
|
|
Nov 26 2013, 16:27
|
Участник

Группа: Участник
Сообщений: 60
Регистрация: 26-11-10
Пользователь №: 61 201

|
Цитата(Maverick @ Nov 26 2013, 17:33)  лапы = пины = ножки = выводы ПЛИС IO логика имеется ввиду для каждого вывода ПЛИС надо засадить входной регистр в ноги плиса. к регистру примени атрибут IOB = "true"
|
|
|
|
|
Nov 26 2013, 16:34
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(maxics @ Nov 26 2013, 20:39)  Требуется принять поток данных в SPARTAN-6 с двухканальной АЦП LTC2195. Частота 100 МГц, режим DDR 4 lane, т.е данные в АЦП приходят с частотой 200 МГц по переднему и заднему фронту.
Это второй релиз платы (разводка сильно не менялась). В первом релизе, потратив много времени, удалось подобрать смещение фазы DCO (такт с АЦП) с помощью DCM (PHASE_SHIFT). В последнем релизе сделать это не удается. Видно искажение входного сигнала. Пытались подобрать фазу DCO, закреплять в PlanAhead, но безрезультатно. Бывает, что при определенном значении Phase Shift данные принимаются верно, но достаточно что-нибудь поменять в проекте, как все "уезжает". В чем может таиться ошибка? Как лучше организовать прием? Файл с исходным кодом:
ADC2195_receiver.vhd ( 9.53 килобайт )
Кол-во скачиваний: 6381. Пропишите в UCF файле OFFSET constraint, описывающий вашу ситуацию. Примеры есть в Constraints guide. 2. Вместо того АДа, что у вас в коде используйте примитивы IDDR для работы с LVDS сигналом по двум фронтам. В итоге сигнал будет проходить вот так : IBUFGDS -> IDDR -> ваша дальнейшая логика демультиплексирования. 3. На таких частотах в принципе можно и без DCM обойтись если грамотно использовать рекмендации Xilinx по source synchronous clocking, тут выбор за вами. 4. В вашем модуле данные идут с 2-х АЦП, а DCO - всего один, почему?
|
|
|
|
|
Nov 26 2013, 16:35
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(maxics @ Nov 26 2013, 18:21)  Что есть "лапы"? IO timing из даташита гарантируется только для случая, когда входные/выходные регистры располагаются в IO-cell. Это достигается атрибутом IOB=true на соответствующих регистрах проекта. При этом между регистром и пином никакой дополнительной логики быть не должно.
|
|
|
|
|
Dec 6 2013, 06:33
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 16-11-09
Пользователь №: 53 649

|
Сделал все как было написано выше. Такт пускаю через BUFIO2 и затем на PLL, где делаю такт для IDDR.
Стабильности не прибавилось. Не выполняются тайминги для констрейнтов описанных в UCF: Код NET "out2a_p" LOC = L3; NET "out2a_n" LOC = L1;
NET "FR_p" LOC = K2; NET "FR_n" LOC = K1;
NET "DCO_p" LOC = J3; NET "DCO_n" LOC = J1;
NET "reset" LOC = D13;
INST "x_ADC2195_receiver/ibuf_2a" IOB =TRUE; INST "x_ADC2195_receiver/IBUFGDS_inst2" IOB =TRUE; #INST "x_ADC2195_receiver/ibuf_FR" IOB =TRUE;
INST "x_ADC2195_receiver/IDDR2_inst_a" IOB =TRUE; #INST "x_ADC2195_receiver/IDDR2_inst_b" IOB =TRUE; #INST "x_ADC2195_receiver/IDDR2_inst_c" IOB =TRUE; #INST "x_ADC2195_receiver/IDDR2_inst_d" IOB =TRUE;
# NET "DCO_p" TNM_NET = "DCO_p"; TIMESPEC TS_DCO_p = PERIOD "DCO_p" 5 ns HIGH 50 %;
#NET "x_ADC2195_receiver/DCO" TNM_NET = DCO;
NET "x_ADC2195_receiver/CLK0" TNM_NET = CLK0_GRP; NET "x_ADC2195_receiver/CLK180" TNM_NET = CLK180_GRP;
NET "out2a*" TNM = "out2a"; TIMEGRP "out2a" OFFSET = IN 1.25 ns VALID 2.5 ns BEFORE "DCO_p" TIMEGRP "CLK0_GRP"; TIMEGRP "out2a" OFFSET = IN 1.25 ns VALID 2.5 ns BEFORE "DCO_p" TIMEGRP "CLK180_GRP";
NET "Data_SV_out_I[0]" LOC = b20; NET "Data_SV_out_I[1]" LOC = b21; NET "Data_SV_out_I[2]" LOC = b22; NET "Data_SV_out_I[3]" LOC = d20; NET "Data_SV_out_I[4]" LOC = d21; NET "Data_SV_out_I[5]" LOC = d22; NET "Data_SV_out_I[6]" LOC = c20; NET "Data_SV_out_I[7]" LOC = c22; NET "Data_SV_out_I[8]" LOC = f20; NET "Data_SV_out_I[9]" LOC = h19; NET "Data_SV_out_I[10]" LOC = h18; NET "Data_SV_out_I[11]" LOC = e20; NET "Data_SV_out_I[12]" LOC = e22; NET "Data_SV_out_I[13]" LOC = f21; NET "Data_SV_out_I[14]" LOC = f22; NET "Data_SV_out_I[15]" LOC = h20;
NET "test[0]" LOC = k16; NET "test[1]" LOC = j16; NET "test[2]" LOC = h16; NET "test[3]" LOC = h17; //////////////////////////////////////////////////// Timing constraint: TIMEGRP "out2a" OFFSET = IN 1.25 ns VALID 2.5 ns BEFORE COMP "DCO_p" TIMEGRP CLK0_GRP; For more information, see Offset In Analysis in the Timing Closure User Guide (UG612). 2 paths analyzed, 1 endpoint analyzed, 1 failing endpoint 1 timing error detected. (1 setup error, 0 hold errors) Minimum allowable offset is 2.404ns. -------------------------------------------------------------------------------- Paths for end point x_ADC2195_receiver/IDDR2_inst_a (ILOGIC_X0Y83.D), 2 paths -------------------------------------------------------------------------------- Slack (setup path): -1.154 ns (requirement - (data path - clock path - clock arrival + uncertainty)) Source: out2a_n (PAD) Destination: x_ADC2195_receiver/IDDR2_inst_a (FF) Destination Clock: x_ADC2195_receiver/clk0 rising at 1.111ns Requirement: 1.250ns Data Path Delay: 2.975ns (Levels of Logic = 3)(Component delays alone exceeds constraint) Clock Path Delay: -0.236ns (Levels of Logic = 4) Clock Uncertainty: 0.304ns Clock Uncertainty: 0.304ns ((TSJ^2 + DJ^2)^1/2) / 2 + PE Total System Jitter (TSJ): 0.050ns Discrete Jitter (DJ): 0.132ns Phase Error (PE): 0.233ns В чем может быть причина ошибок?
Причина редактирования: используйте теги для оформления кода (с) модератор
|
|
|
|
|
Dec 8 2013, 08:43
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(maxics @ Dec 6 2013, 10:33)  Сделал все как было написано выше. Такт пускаю через BUFIO2 и затем на PLL, где делаю такт для IDDR. Стабильности не прибавилось. Не выполняются тайминги для констрейнтов описанных в UCF: В чем может быть причина ошибок? Почитайте в документации Xilinx-а про source synchronous IO vs system synchronous IO. IMHO, у Вас проблема в неправильном выборе типа. Цитата(XVR @ Dec 6 2013, 13:48)  Судя по этим строкам в отчете - у вас между IDDR2 и его данными (да и клоком тоже) по 3-4 уровня логики, а их вообще быть не должно. А на схему Вы смотрели? Эти уровни логики - просто количество компонентов по дороге. Например, для клокового пути: ibufgds, bufio2, pll, bufg.
|
|
|
|
|
Dec 8 2013, 14:00
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(o_khavin @ Dec 8 2013, 12:43)  А на схему Вы смотрели? Смотрел, и на отчет тоже смотрел Цитата Эти уровни логики - просто количество компонентов по дороге. Например, для клокового пути: ibufgds, bufio2, pll, bufg. Буфера не входят в уровни логики. Уровни логики - это количество LUT'ов на пути сигнала. Буфера в LUT'ы не заходят. Посмотрите в Technology View как у вас на самом деле подключились сигналы
|
|
|
|
|
Dec 9 2013, 09:44
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(o_khavin @ Dec 8 2013, 19:20)  Во первых, это не мой дизайн. Пардон, это был совет для ТС Цитата Во вторых, я ни разу не видел, чтобы схематик с явно нарисованными примитивами и соединениями между ними, самопроизвольно пополнялся LUT-ми. Я тоже, но отчет синтезатора говорит явно и не двусмысленно, что логика там есть. Я подозреваю, что схематик не соотвествует действительности (или ругань относится к другому элементу схемы) Цитата В третьих, покажите мне пример дизайна с 4-мя уровнями LUT-ов на клоковом пути (если следовать Вашей логике при чтении отчёта), и без трёхэтажных матюков в логе роутера.  ТС не показал нам лога роутера - возможно они там и были  Пока ТС не покажет нам, как на самом деле развелась схема, о чем то спорить бессмысленно
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|