|
Xilinx timing constraints: что необходимо для простейшей транзакции?, Передаю между 2-я Virtex6 шину 32 бита на 250 МГц, ошибки в данных |
|
|
|
Jan 31 2014, 10:56
|
Группа: Участник
Сообщений: 11
Регистрация: 6-03-07
Пользователь №: 25 920

|
Здравствуйте!
Глобальный вопрос такой: между 2-я Xilinx FPGA передаются данные и клок (не дифференциальный), по которому эти данные меняются; какие при этом должны быть заданы constraints?
Теперь опишу, в чем собственно проблема. Я передаю данные из Virtex 6 xc6vlx75t-2ff784 в Virtex 6 vc6clx760-1ff1760 (из дочерней карты с высокоскоростным трансивером в плату HAPS, одна плата вставляется в другую через разъем HapsTrack II). Данные меняются по клоку 250 МГц (он генерируется хард-ядром PCI-Express из референсного клока 100 МГц). Передается шина данных Data 32 бита, сигнал валидности Valid и сам клок Clk. На выходе одной ПЛИС и на входе другой использую регистры для Data и Valid по rising edge Clk (чтобы их можно было разместить рядом с пинами для минимизации задержки). Клок передается по пинам, подсоединенным к клоковым цепям каждой ПЛИС. Использую вот такой constraint в каждой ПЛИС:
NET "clk" TNM_NET = "clk"; TIMESPEC "TS_clk" = PERIOD "clk" 250 MHz HIGH 50.00%;
Проблема в том, что данные иногда приходят битые, например, х“97 2B FF FF” вместо х“97 6F FF FF”. Ошибки возникают на разных битовых позициях, похоже на рассогласование данных и клока на приемной стороне. Нужно ли использовать какие-либо дополнительные constraints на сигналы Data и Valid, что-то вроде OFFSET IN или From-to? Ситуация-то вроде бы простейшая и вполне банальная. Книжку “Constraints Guide” Xilinx читал, пока не помогло..
|
|
|
|
|
Jan 31 2014, 12:15
|
Группа: Участник
Сообщений: 11
Регистрация: 6-03-07
Пользователь №: 25 920

|
Цитата(AJIEKCEu @ Jan 31 2014, 15:43)  Пробовали считать выполнение условий Setup-Hold на входе? А можно подробнее, что Вы имеете в виду под "считать"? ISE говорит, что All constraints are met, в Timing Report на TS_Clk все холды и сетапы маленькие Цитата(AJIEKCEu @ Jan 31 2014, 15:43)  Вариант для ленивых (но не совсем концептуально верный) - примите CLK на IDELAY и попробуйте поиграться с задержкой. А как это сделать по-правильному? Я понимаю, что можно поиграть с задержкой, я это делал путем задания разной частоты TIMESPEC "TS_clk" = PERIOD "clk" ХХХ MHz HIGH 50.00%; при этом, как я понимаю, задержка автоматически подкручивается во входном клоковом буфере. Что интересно, ошибок меньше, если задать частоту 125 МГц, а не реальную 250 МГц. Можно и с IDELAY поиграть. Но должен же быть некий правильный путь решения проблемы, я как раз думал, что нужно задать какие-то дополнительные констрейнты, чтобы задержки подкручивались автоматически.
|
|
|
|
|
Jan 31 2014, 13:32
|
Местный
  
Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917

|
Цитата(Antgol @ Jan 31 2014, 16:15)  А можно подробнее, что Вы имеете в виду под "считать"? У вас есть выходные триггера, выходной синхросигнал (на первом ПЛИСе), есть среда передачи. Распространение сигналов занимает некоторое время, появляется разброс. Есть приемный триггер (во втором ПЛИСе). Что такое setup-hold вы наверное знаете. В передаче внутри ПЛИС за выполнением Setup-hold следит Xilinx и выводит отчет. Снаружи - должны посчитать вы. Цитата(Antgol @ Jan 31 2014, 16:15)  ISE говорит, что All constraints are met, в Timing Report на TS_Clk все холды и сетапы маленькие ISE может посчитать ВНУТРИ ПЛИС. Но о вашей линии передачи снаружи у него нет данных. Цитата(Antgol @ Jan 31 2014, 16:15)  А как это сделать по-правильному? Я понимаю, что можно поиграть с задержкой, я это делал путем задания разной частоты TIMESPEC "TS_clk" = PERIOD "clk" ХХХ MHz HIGH 50.00%; при этом, как я понимаю, задержка автоматически подкручивается во входном клоковом буфере. Что интересно, ошибок меньше, если задать частоту 125 МГц, а не реальную 250 МГц. Можно и с IDELAY поиграть. Но должен же быть некий правильный путь решения проблемы, я как раз думал, что нужно задать какие-то дополнительные констрейнты, чтобы задержки подкручивались автоматически. Возможно( хотя я не уверен), если задать правильный констрейн ( пусть гуру сделают уточнение) ISE за вас накрутит линию приема через логику. Но я практически уверен, что никакой IDELAY он не добавит. И реализованная им схема (в случае если он умеет сам докручивать времянки) будет не совсем корректна (неоптимальна). Поэтому: http://www.xilinx.com/support/documentatio...uides/ug362.pdf (ключевое слово bufio) http://www.xilinx.com/support/documentatio...uides/ug361.pdf (ключевое слово IODELAYE1) http://www.xilinx.com/support/documentatio...heets/ds152.pdf (ключевое слова TPHCS) В идеале, вам надо реализовать что-то вроде Рисунка 3-7 во 2-м документе. Только можно вместо ISERDES обойтись обычным триггером. Ну а как посчитать времянки - спросите у товарищей на работе.
|
|
|
|
|
Jan 31 2014, 13:33
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(Antgol @ Jan 31 2014, 14:56)  Здравствуйте!
Глобальный вопрос такой: между 2-я Xilinx FPGA передаются данные и клок (не дифференциальный), по которому эти данные меняются; какие при этом должны быть заданы constraints? Книжку “Constraints Guide” Xilinx читал, пока не помогло.. Вас не смущает, что данные бегут между чипами не в вакууме, а по реальным платам и разъёмам? Как там с разбегом сигналов и т.п.? Вам нужно вместо чтения Constraints Guide поискать apnotes на синхронную передачу данных между чипами. P.S. Ещё и клок не дифференциальный.
|
|
|
|
|
Jan 31 2014, 15:44
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424

|
Цитата(Antgol @ Jan 31 2014, 13:56)  Здравствуйте!
Глобальный вопрос такой: между 2-я Xilinx FPGA передаются данные и клок (не дифференциальный), по которому эти данные меняются; какие при этом должны быть заданы constraints?
Теперь опишу, в чем собственно проблема. Я передаю данные из Virtex 6 xc6vlx75t-2ff784 в Virtex 6 vc6clx760-1ff1760 (из дочерней карты с высокоскоростным трансивером в плату HAPS, одна плата вставляется в другую через разъем HapsTrack II). Данные меняются по клоку 250 МГц (он генерируется хард-ядром PCI-Express из референсного клока 100 МГц). Передается шина данных Data 32 бита, сигнал валидности Valid и сам клок Clk. На выходе одной ПЛИС и на входе другой использую регистры для Data и Valid по rising edge Clk (чтобы их можно было разместить рядом с пинами для минимизации задержки). Клок передается по пинам, подсоединенным к клоковым цепям каждой ПЛИС. Использую вот такой constraint в каждой ПЛИС:
NET "clk" TNM_NET = "clk"; TIMESPEC "TS_clk" = PERIOD "clk" 250 MHz HIGH 50.00%;
Проблема в том, что данные иногда приходят битые, например, х“97 2B FF FF” вместо х“97 6F FF FF”. Ошибки возникают на разных битовых позициях, похоже на рассогласование данных и клока на приемной стороне. Нужно ли использовать какие-либо дополнительные constraints на сигналы Data и Valid, что-то вроде OFFSET IN или From-to? Ситуация-то вроде бы простейшая и вполне банальная. Книжку “Constraints Guide” Xilinx читал, пока не помогло.. 1) STA констрейны нужны для того чтобы заставить тул выполнить необходимые вам условия. Для этого надо сначала составить список этих условий. Неработоспособность устройства по неизвестным причинам не есть основанием для создания констрейнов. 2) дпаже если вы никаких констрейнов не задали, тул всёравно считает все сигналы синхронными и применяет дефолтные констрейны к ним. 4) В вашем случае алгоритм действия такой: - При помощи осцилографа понять почему данные приходят битыми (или задержки в линии не те, или помехи возникают из-за рассогласования линии передачи или кростолка и.т.д.) - Если проблема именно в задержках в линии передачи (не согласованность данных и клоков и.т.п) то указать, что именно надо изменить и почему дефолтные правила STA не помогли.
|
|
|
|
|
Feb 1 2014, 13:42
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(Antgol @ Jan 31 2014, 17:56)  Здравствуйте!
Глобальный вопрос такой: между 2-я Xilinx FPGA передаются данные и клок (не дифференциальный), по которому эти данные меняются; какие при этом должны быть заданы constraints?
Теперь опишу, в чем собственно проблема. Я передаю данные из Virtex 6 xc6vlx75t-2ff784 в Virtex 6 vc6clx760-1ff1760 (из дочерней карты с высокоскоростным трансивером в плату HAPS, одна плата вставляется в другую через разъем HapsTrack II). Данные меняются по клоку 250 МГц (он генерируется хард-ядром PCI-Express из референсного клока 100 МГц). Передается шина данных Data 32 бита, сигнал валидности Valid и сам клок Clk. На выходе одной ПЛИС и на входе другой использую регистры для Data и Valid по rising edge Clk (чтобы их можно было разместить рядом с пинами для минимизации задержки). Клок передается по пинам, подсоединенным к клоковым цепям каждой ПЛИС. Использую вот такой constraint в каждой ПЛИС:
NET "clk" TNM_NET = "clk"; TIMESPEC "TS_clk" = PERIOD "clk" 250 MHz HIGH 50.00%;
Проблема в том, что данные иногда приходят битые, например, х”97 2B FF FF” вместо х”97 6F FF FF”. Ошибки возникают на разных битовых позициях, похоже на рассогласование данных и клока на приемной стороне. Нужно ли использовать какие-либо дополнительные constraints на сигналы Data и Valid, что-то вроде OFFSET IN или From-to? Ситуация-то вроде бы простейшая и вполне банальная. Книжку ”Constraints Guide” Xilinx читал, пока не помогло.. Парочка уточняющих вопросов : 1. Как выводили клок из первого виртекса? Тупо assign pin = clk или с помощью DDR примитива? 2. Какой voltage standard пользуете? 3. Надеюсь, на втором виртексе клоки завдены на специальный клоковый вход? Ну и пара мыслей на тему : 1. 250 МГц для single ended стандартов дюже много, тем более что вы всё это через разъём тащите. Напрашивается DDR LVDS, однако я не уверен что теперь вам это удастся сделать без переделки железа. 2. В любом раскладе предстоят танцы с IODELAY по входу данных, лучше бы подстройку задержек сделать динамической, хотя тут вам решать.
|
|
|
|
|
Feb 3 2014, 06:52
|
Группа: Участник
Сообщений: 11
Регистрация: 6-03-07
Пользователь №: 25 920

|
AJIEKCEu, спасибо за ссылки, изучаю мануалы. Цитата Вас не смущает, что данные бегут между чипами не в вакууме, а по реальным платам и разъёмам? Как там с разбегом сигналов и т.п.? o_khavin, немного, конечно, смущает,  но разброс, если верить мануалам, всего лишь +/- 84 ps Забыл про это написать, каюсь. В одной плате согласно мануалу задержка FPGA-разъем 497+/-84 ps, в другой - 647+/-0.3 ps Цитата P.S. Ещё и клок не дифференциальный. Могу переделать в дифференциальный. Мне казалось, что частота в общем-то еще не столь велика, можно и обычный использовать. Цитата 1) STA констрейны нужны для того чтобы заставить тул выполнить необходимые вам условия. Для этого надо сначала составить список этих условий. Неработоспособность устройства по неизвестным причинам не есть основанием для создания констрейнов. Torpeda, это понятно. Мой вопрос был такой: в той стандартной ситуации, что я описал, какие нужно задать стандартные требования. Цитата 1. Как выводили клок из первого виртекса? Тупо assign pin = clk или с помощью DDR примитива? Bad0512, да, тупо в .ucf прописал соответствие сигнала с пином (специальным клоковым пином).. Цитата 2. Какой voltage standard пользуете? Для интерфейсного разъема жестко прописан 2.5 В, используется LVCMOS25 Цитата 3. Надеюсь, на втором виртексе клоки завдены на специальный клоковый вход? Да Цитата 1. 250 МГц для single ended стандартов дюже много, тем более что вы всё это через разъём тащите. Напрашивается DDR LVDS, однако я не уверен что теперь вам это удастся сделать без переделки железа. Я могу переделать клок под диф. пару без особых проблем, она там предусмотрена. Но вот всю шину данных переделать не получится физически. Цитата 2. В любом раскладе предстоят танцы с IODELAY по входу данных, лучше бы подстройку задержек сделать динамической, хотя тут вам решать. Ок, понятно.. Всем большое спасибо за ответы. Я, по всей видимости, несколько недооценил сложность задачи - казалось, что все тривиально и должно сразу заработать. Ну и плюс я сперва заводил более медленный PCI-Express, который генерировал юзер-клок 125 МГц - на 125 передача между чипами, собственно, сразу и заработала без проблем. При удвоении частоты же, наверное, придется поразбираться с клоковыми ресурсами Virtex 6.
|
|
|
|
|
Feb 3 2014, 07:32
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424

|
Цитата(Antgol @ Feb 3 2014, 09:52)  Torpeda, это понятно. Мой вопрос был такой: в той стандартной ситуации, что я описал, какие нужно задать стандартные требования. Судя по проявлению проблемы вам скорее всего надо решить проблему с согласованием линий передачи. Относительно констрейнов... сложно ответить не зная шинного протокола, может вам и установок поумольчанию достаточно.... Может надо external delay (set_out_delay) задать....
|
|
|
|
|
Feb 3 2014, 09:33
|
Группа: Участник
Сообщений: 11
Регистрация: 6-03-07
Пользователь №: 25 920

|
Цитата Судя по проявлению проблемы вам скорее всего надо решить проблему с согласованием линий передачи. Относительно констрейнов... сложно ответить не зная шинного протокола, может вам и установок поумольчанию достаточно.... Может надо external delay (set_out_delay) задать.... Torpeda, а что Вы подразумеваете под шинным протоколом? Про external delay (set_out_delay) почитаю Цитата А Вы клок не удваивайте, удвойте только частоту данных - DDR SM, Вы не совсем правильно поняли, я удвоением частоты не занимаюсь, клок генерируется в блоке PCI-Express, просто для разной конфигурации PCI-Express он генерируется разный.
|
|
|
|
|
Feb 3 2014, 12:02
|
Группа: Участник
Сообщений: 11
Регистрация: 6-03-07
Пользователь №: 25 920

|
Цитата Ну займитесь, значит, упополамливанием с переходом SDR->DDR SM, а какие приемущества это даст?  Цитата посмотрите ещё xapp856 krux, ок, спасибо, посмотрю
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|