Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Spartan-6 скоростная двухпортовая память на DDR3
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Fourier
Здравствуйте!
Стоит задача спроектировать устройство сбора данных: на борту двухканальный 8-разрядный АЦП с максимальной частотой семплирования 1ГГц, данные должны сохраняться в ОЗУ и с определенной задержкой выдаваться на ЦАПы. АЦП, ЦАПы подобрал, с ПЛИС тоже определился вопрос встал в сохранении данных sm.gif. Необходима двухпортовая память объемом не менее 8 Мбайт, чистая скорость записи и чтения данных (без учета времени на передачу управляющих команды и т.д.) не менее 2 Гбайт/с.
Есть идея организовать такую память на Spartan-6 XC6SLX75T и памяти DDR3 (например MT41J64M16JT-125). С DDR3 раньше не работал. По документации на MCB у Xilinx фигурирует скорость 800 Mb/s (это я так понимаю максимальная скорость дергания пинами данных), при 16-битной шине пиковая скорость – 12.8 Gb/s. Скорости хорошие, но я так понимаю эффективная скорость значительно ниже. Я планировал взять 4 микросхемы MT41J64M16JT-125 и использовать все 4 MCB XC6SLX75T, при этом одновременно 2 микросхемы работают на запись данных, 2 – на чтение, потом переключаются.
Ряд вопросов к разработчикам с практическими навыками проектирования устройств с DDR3:
- прокомментируйте мои мысли));
- возможно ли на Spartan-6 в реальном времени получить скорость записи/чтения чистых данных 2 Гбайт/с;
- что можете посоветовать для решения моей проблемы.

Заранее спасибо.
AJIEKCEu
1. Не пробовал подключать DDR3 к Spartan-6, Но вроде должно получиться.
2. Эффективная скорость при правильной организации (например построчная запись и чтение) должно позволить приблизиться к теоретическим 12,8Гбит/с (скажем, в моем представлении - 95%+).
3. ИМХО - проще чередовать чтение/запись для всех памятей одновременно, хотя это уже частности.
4. Мне кажется будет очень тяжко это все развести (особенно с учетом того, что есть ещё двухканальный АЦП и, видимо ЦАП). Надо понимать, что требования к разводке DDR3 очень жесткие(см. стр. 41 и далее: http://www.xilinx.com/support/documentatio...ides/ug388.pdf). Попробуйте прежде чем окончательно прорабатывать прикинуть расположение ножек (в том смысле - останутся ли свободные?). И, кстати, на какой частоте вы общаетесь с ЦАП\АЦП? Разрядность шины?
5. Возможно есть смысл глянуть в сторону Kintex-7(XC7K70T) и QDRII+ (http://www.cypress.com/?docID=41829). Будет дороже (в основном за счет памяти), но зато разводить только одну микросхему (правда и ног больше - ~100). Опять же, пока не работал с ней, но есть ощущение, что это разведется легче. Сразу предупрежу, что там полно своих минусов (например требования к питанию у Kintex 3%). И смотреть туда есть смысл если увидятся проблемы с вашим вариантом(а мне кажется, что они могут появиться).
Fourier
Цитата(AJIEKCEu @ May 7 2013, 13:39) *
И, кстати, на какой частоте вы общаетесь с ЦАП\АЦП? Разрядность шины?

Спасибо за ответ.
Пока еще не определился с частотой оцифровки (либо 500МГц на канал, либо 1ГГц на канал) исходя из этого частота общения с АЦП либо 250 МГц либо 500 Мгц. Разрядность шин АЦП либо ADC08D500 (http://www.ti.com/product/adc08d500) либо ADC08D1000 (http://www.ti.com/product/adc08d1000). Два канала по 16 LVDS линий данных.
ЦАП вероятнее всего AD9776A: 2 канала по 12 CMOS сигналов, ориентировочная частота 300 МГц.

Насчет кинтекса думал, но получится значительно дороже sad.gif Поэтому хочется сделать на спартане.



Цитата(Fourier @ May 7 2013, 14:08) *
Насчет кинтекса думал, но получится значительно дороже sad.gif Поэтому хочется сделать на спартане.

Хотя XC7K70T не значительно дороже XC6SLX75T. CY7C1565KV18 выглядит очень заманчиво, но дорогая больно sad.gif
AJIEKCEu
Цитата(Fourier @ May 7 2013, 14:29) *
Пока еще не определился с частотой оцифровки (либо 500МГц на канал, либо 1ГГц на канал) исходя из этого частота общения с АЦП либо 250 МГц либо 500 Мгц. Разрядность шин АЦП либо ADC08D500 (http://www.ti.com/product/adc08d500) либо ADC08D1000 (http://www.ti.com/product/adc08d1000). Два канала по 16 LVDS линий данных.
ЦАП вероятнее всего AD9776A: 2 канала по 12 CMOS сигналов, ориентировочная частота 300 МГц.

После Coregen-а на 4-ре 16-разрядных ddr3 практически осталось два банка по 53 ноги (плюс незначительное количество свободных ног в каждом из банков (3,5,13,19), занятых контроллерами, но думаю, там и так будет не протолкнуться.
У вас же два канала по 16 LVDS = 64 пина, 2 канала по 12 CMOS сигналов = 24, плюс, надо думать, там по паре синхросигналов и там и там - это ещё плюс 6. Это уже 94. А если ещё учесть, что частоты не маленькие - надо будет использовать BUFIO, а соответственно по регионам нельзя произвольно раскидывать...

Короче забивка UserIO у вас будет очень высокая. Не факт, что правильно разведется.
А вам нужен именно 75T? GTP использовать будете? Мне казалось, что без трансиверов - побольше UserIO. Хотя память от этого легче трассироваться не станет...
Попробуйте обойтись тремя памятями. Это ощутимо должно облегчить задачу. Хотя и не гарантирую, что все получится.

--
А как-то странно у вас АЦП и ЦАП на разных частотах.... Вы ЦОС собираетесь внутри ПЛИСа делать?
Fourier
Цитата(AJIEKCEu @ May 7 2013, 14:50) *
А вам нужен именно 75T? GTP использовать будете?


Я хотел еще Gigabit Ethernet прикрутить ))

Цитата(AJIEKCEu @ May 7 2013, 14:50) *
А как-то странно у вас АЦП и ЦАП на разных частотах.... Вы ЦОС собираетесь внутри ПЛИСа делать?


Там будет несколько режимов. Возможно будет несложная ЦОС. Частота дискретизации будет изменяться, поэтому скорее всего при ретрансляции сигнала на ЦАП частота дискретизации АЦП будет так же 300 МГц.

Вообще у меня нет опыта в разработке высокоскоростных схем на основе ПЛИС, поэтому любая информация от профессионалов мне будет очень полезна))

У меня возник еще один вопрос)) Есть такой заманчивый АЦП HMCAD1511, дешевый, четырехканальный, с 8-разрядной LVDS шиной. В двухканальном режиме с частотой оцифровки 500 MSps нужно гонять по линиям данных сигнал с частотой 1 ГГц. По описанию "Up to 1050Mbps data transfer rate per differential I/O", т.е. вроде бы Spartan-6 должен обеспечивать такую скорость. Подскажите, пожалуйста, реально ли это сделать? sm.gif Тогда можно было бы уменьшить число выводов АЦП и упростить трассировку


Цитата(AJIEKCEu @ May 7 2013, 14:50) *
Попробуйте обойтись тремя памятями. Это ощутимо должно облегчить задачу.

Если, как Вы говорите, можно приблизится к теоретическим 12,8Гбит/с (т.е. ~ 1,6 Гбайт/с), то может быть будет достаточно и двух микросхем памяти.
AJIEKCEu
Цитата(Fourier @ May 7 2013, 15:59) *
Если, как Вы говорите, можно приблизится к теоретическим 12,8Гбит/с (т.е. ~ 1,6 Гбайт/с), то может быть будет достаточно и двух микросхем памяти.

Насколько я понял, вам нужно 2ГБ/с на чтение и 2ГБ/с на запись. Нет?
Если суммарно 2ГБ/с - тогда можно обойтись двумя. И тогда оно уже не так страшно.
Bad0512
Цитата(Fourier @ May 7 2013, 18:59) *
Я хотел еще Gigabit Ethernet прикрутить ))



Там будет несколько режимов. Возможно будет несложная ЦОС. Частота дискретизации будет изменяться, поэтому скорее всего при ретрансляции сигнала на ЦАП частота дискретизации АЦП будет так же 300 МГц.

Вообще у меня нет опыта в разработке высокоскоростных схем на основе ПЛИС, поэтому любая информация от профессионалов мне будет очень полезна))

У меня возник еще один вопрос)) Есть такой заманчивый АЦП HMCAD1511, дешевый, четырехканальный, с 8-разрядной LVDS шиной. В двухканальном режиме с частотой оцифровки 500 MSps нужно гонять по линиям данных сигнал с частотой 1 ГГц. По описанию "Up to 1050Mbps data transfer rate per differential I/O", т.е. вроде бы Spartan-6 должен обеспечивать такую скорость. Подскажите, пожалуйста, реально ли это сделать? sm.gif Тогда можно было бы уменьшить число выводов АЦП и упростить трассировку



Если, как Вы говорите, можно приблизится к теоретическим 12,8Гбит/с (т.е. ~ 1,6 Гбайт/с), то может быть будет достаточно и двух микросхем памяти.

Реально, но нужно будет строго отнестись к выравниванию длин LVDS пар на плате, и скорее всего для устойчивости системы в температуре придётся применить динамическую калибровку SERDESов.
P.S. А вообще задачка неслабая будет, особенно если учесть 4 контроллера памяти и ADC на одной ПЛИС - довольно трудно будет обеспечить хорошие характеристики по аналоговому тракту.
akorud
Цитата(Bad0512 @ May 7 2013, 14:22) *
Я хотел еще Gigabit Ethernet прикрутить ))

Если не надо SFP, то можно использовать обычный PHY и трансиверов (Т) не надо.
А вообще задача непростая. У S6 контроллер памяти выведен на фиксированные пины, причем у нас инженер матерился когда разводил один 16-битный чип.
Так же учтите что MCB независимые, и если использовать 2 на запись - работать они будут каждый по своему.
Я бы проверил также предсказуемость работы МСВ - а то вдруг вам надо данные с оцифровки писать, а он надумал калибрацию погонять (только предположение).
Ну и если хотите быть уверенны, что устройство будет работать всегда и везде - лучше бы все сигналы потом померить, что тоже непросто и недешево sad.gif
VladimirB
Цитата(akorud @ May 7 2013, 21:20) *
Если не надо SFP, то можно использовать обычный PHY и трансиверов (Т) не надо.
А вообще задача непростая. У S6 контроллер памяти выведен на фиксированные пины, причем у нас инженер матерился когда разводил один 16-битный чип.
Так же учтите что MCB независимые, и если использовать 2 на запись - работать они будут каждый по своему.
Я бы проверил также предсказуемость работы МСВ - а то вдруг вам надо данные с оцифровки писать, а он надумал калибрацию погонять (только предположение).
Ну и если хотите быть уверенны, что устройство будет работать всегда и везде - лучше бы все сигналы потом померить, что тоже непросто и недешево sad.gif

+100500
ТС однозначно Кинтексы с Виртексами нужны для DDR3, чтобы посадить все ДДР на один контроллер с шиной 32 или 64 бита - иначе потеря синхронности каналов памяти.
Проект серъёзный и дешивизна ПЛИС на этапе разработки PCB дорого обойдётся на этапе разработки конфигурационной последовательности для ПЛИС. Экономия 500$ на ПЛИС ИМХО имеет смысл только при серии >100шт., ну ищё нужно учитывать TimeToMarket - при слишком большом значении серия вообще не состоится.
AJIEKCEu
Цитата(Fourier @ May 7 2013, 15:59) *
Возможно будет несложная ЦОС.
Вообще у меня нет опыта в разработке высокоскоростных схем на основе ПЛИС, поэтому любая информация от профессионалов мне будет очень полезна))

У меня возник еще один вопрос)) Есть такой заманчивый АЦП HMCAD1511, дешевый, четырехканальный, с 8-разрядной LVDS шиной. В двухканальном режиме с частотой оцифровки 500 MSps нужно гонять по линиям данных сигнал с частотой 1 ГГц. По описанию "Up to 1050Mbps data transfer rate per differential I/O", т.е. вроде бы Spartan-6 должен обеспечивать такую скорость. Подскажите, пожалуйста, реально ли это сделать? sm.gif Тогда можно было бы уменьшить число выводов АЦП и упростить трассировку

Насчет первого - в зависимости от "несложности" ЦОС будьте морально готовы к нескольких отсчетов за такт. 250МГц для Spartana - это уже граница (если верить http://www.xilinx.com/support/documentatio...ides/ug389.pdf). А фактически - её наверное тяжко будет достичь - так что 4/8 отсчетов за такт для 500/1000 Мегасемплов - это более реальные вещи. А 8 отсчетов за такт обрабатывать - не всегда сладко. Короче аккуратнее с закладываемой сложностью. И опять же, наверное Kintex уже имеет шансы потянуть 250МГц.

Насчет второго - мне кажется будет очень непросто. Сам такого не делал. Разбирался в аппликухе по приему на Virtex-6 1200 Мбит/с по паре. В общем-то чтобы получилось - должно быть ещё очень хорошее качество входных данных. У Спартана-6 есть xapp1064 - видимо надо курить его. Пробежавшись, не до конца понял за счет чего обеспечивают такой прием. Вроде там IODELAY сильно ущербнее, но они берут разницу между разными TAP-ами. Хотя по их расчетам на странице 23 - у них все неплохо. Не попробовав - не стал бы закладываться на максимум. Прежде чем пробовать - в любом случае надо посчитать с учетом всяких разных разбросов. Опять же, сэкономив слегка на АЦП и "якобы" на трассировке - добавите себе лишней головной боли по реализации приема в ПЛИС и трассировке тех самых восьми пар (частота-то в 4 раза возросла!).
Короче решение хоть и красивое, на то, что оно заработает с первого раза я бы не рассчитывал (особенно в серии).
Цитата(akorud @ May 7 2013, 21:20) *
Если не надо SFP, то можно использовать обычный PHY и трансиверов (Т) не надо.

Даже если надо SFP - есть 88e1111 который умеет SGMII из RGMII делать (хотя - это лишняя микросхема).
Цитата(akorud @ May 7 2013, 21:20) *
А вообще задача непростая. У S6 контроллер памяти выведен на фиксированные пины, причем у нас инженер матерился когда разводил один 16-битный чип.

Вот и у меня такое ощущение.
Цитата(akorud @ May 7 2013, 21:20) *
Так же учтите что MCB независимые, и если использовать 2 на запись - работать они будут каждый по своему.
Я бы проверил также предсказуемость работы МСВ - а то вдруг вам надо данные с оцифровки писать, а он надумал калибрацию погонять (только предположение).

Цитата(VladimirB @ May 8 2013, 01:08) *
чтобы посадить все ДДР на один контроллер с шиной 32 или 64 бита - иначе потеря синхронности каналов памяти.

А вот это в легкую решается за счет относительно небольших буферов. Синхронность работы именно контроллеров в данном проекте не нужна. Нужна синхронность выдачи в ЦАП. Сделать по буферу на контроллер и вычитывать все буфера по самому медленному - ИМХО не проблема совсем (запас по средней скорости должен получиться достаточный). А вот делать один контроллер на 64 бита - тогда уж ставить SODIMM. Иначе - лишние проблемы с разведением управления/адреса - fly-by, несколько микросхем на шине и т.д. (а частота-то не маленькая).

В общем и целом - возможно задача имеет право решаться на Spartan-6, если обойдется двумя микросхемами памяти. При большем количестве - возможно имеет смысл смотреть в сторону Kintex-а все таки.

Цитата(VladimirB @ May 8 2013, 01:08) *
Экономия 500$ на ПЛИС ИМХО имеет смысл только при серии >100шт.

Соглашусь. Только в данном случае на ПЛИС-то в общем столько и не экономится. А вот QDRII+ - тут да, она как раз 500 баксов добавит. Впрочем, повторюсь, у Кинтекса - свои заморочки.
Fourier
Цитата(AJIEKCEu @ May 8 2013, 08:40) *
Даже если надо SFP - есть 88e1111 который умеет SGMII из RGMII делать (хотя - это лишняя микросхема).


Спасибо большое за ответ.

SFP не надо, наверное. Скорее всего буду использовать PHY Marvell 88e1111. Поэтому можно применить XC6SLX75 вместо XC6SLX75T, там действительно пользовательских выводов значительно больше (408 vs 348).

Цитата(AJIEKCEu @ May 8 2013, 08:40) *
Насчет первого - в зависимости от "несложности" ЦОС будьте морально готовы к нескольких отсчетов за такт. 250МГц для Spartana - это уже граница (если верить http://www.xilinx.com/support/documentatio...ides/ug389.pdf). А фактически - её наверное тяжко будет достичь - так что 4/8 отсчетов за такт для 500/1000 Мегасемплов - это более реальные вещи. А 8 отсчетов за такт обрабатывать - не всегда сладко. Короче аккуратнее с закладываемой сложностью. И опять же, наверное Kintex уже имеет шансы потянуть 250МГц.


Скорее всего в режиме работы, когда нужна обоаботка допустимо понизить частоту дискретизаци до 80-100 MSPS. Вообще в данном изделии два кртических к быстродействию режима работы:
1) Оцифровать сигнал с частотой до 1 GSPS (500 MSPS, Пока не определились), сохранить в ОЗУ и потом не очень спешно перекачать по Ethernet на комп для обработки.
2) Оцифровывать в реалтайме сигнал с частотой до 300 MSPS и сохранять его в памяти, потом через определенное время считывать и выдавать на ЦАП. В этом режиме нужна минимальная обработка: типа детектирования сигнала нужного уровня (это я так понимаю можно сделать прорежая входные отсчеты)

Мое резюме: sm.gif
В первом приближении достаточно 2 микросхем DDR3:
- для режима ретрансляции в ЦАП будет достаточно частоты оцифровки 300 MSPS на канал, а для режима сбора буфера (с частотой до 1 GSPS на канал) и передачи по Ethernet можно задействовать обе микросхемы - сначала на запись, а потом на чтение, что должно обеспечить сохранение данных со скоростью до 2 ГБайт/с.

Всем спасибо за ответы и советы! Буду курить мануалы и даташиты sm.gif
vladec
Все таки посмотрите еще раз в сторону Kintex, при совсем небольшом удорожании ПЛИСа Вы получите массу облегчений, а в плане DDR3 сможете работать на больших скоростях и может быть обойдетесь всего одной 32-битной микросхемой памяти, например, - MT41J256M4 и это будет Вам огромным облегчением при трассировке платы.
AJIEKCEu
Цитата(vladec @ May 8 2013, 10:58) *
одной 32-битной микросхемой памяти, например, - MT41J256M4 и это будет Вам огромным облегчением при трассировке платы.

MT41J256M4 - 4-х разрядная.
А вот 32-х разрядная MT41K256M32SLD-125 видимо пока не покупается. Других не нашел.
dmitry-tomsk
800 мбит в секунду на s6 - это при повышенном напряжении питания ядра - больше тепловыделение. QDR много потребляет - смысла нет её ставить. Куда сливать Вы собрались поток в 2 ГБ/с? По PCIE? Если просто захват - потом медленное чтение, хватит 2-x чипов DDR3. Под 64 lvds нужен корпус 676 ножек, меньший не разведёте. Интерфейс 500 МГц сделать вполне реально (у меня сейчас 800 Мбит на ацп без проблем), но смотрите errata на сердес, xapp в чистом виде нельзя использовать. Если два АЦП синхронно, то без динамической подстройки фазы тактовой + задержки в IO не обойтись (грубая подстройка фазы тактовой нужна поскольку диапазон задержек в IO ограничен errata). Если не синхронно - аккуратно распределяйте ацп по полубанкам, там связь с BUFIO2 должна быть правильная.

Цитата(AJIEKCEu @ May 8 2013, 07:40) *
Насчет первого - в зависимости от "несложности" ЦОС будьте морально готовы к нескольких отсчетов за такт. 250МГц для Spartana - это уже граница (если верить http://www.xilinx.com/support/documentatio...ides/ug389.pdf). А фактически - её наверное тяжко будет достичь - так что 4/8 отсчетов за такт для 500/1000 Мегасемплов - это более реальные вещи. А 8 отсчетов за такт обрабатывать - не всегда сладко. Короче аккуратнее с закладываемой сложностью. И опять же, наверное Kintex уже имеет шансы потянуть 250МГц.

У Спартана-6 есть xapp1064 - видимо надо курить его.


ЦОС на S6 работает на 320 МГц, но разводится только через planahead, трассировщик ise тупит без ручного размещения. xapp1064 - вещь вредная, не стоит его смотреть, особенно не вздумайте использовать фазовый детектор - работает не правильно, годится для средней частоты дискретизации только (около 300 МГц).
rsv
Еще надо учитывать что у ip ядра ddr будет задержка между операциями записи и чтения около 20 тактов шины axi
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.