Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Мегафункция ALTMEMPHY
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
dde29
Появилась необходимость реализавоть мегафункцию общения внутренней логики FPGA (EP3C55) с двумя микросхемами памяти DDR2 SDRAM (MT47H128M16).
Использую Quartus II 9.0.
Так как этим никогда не занимался - появилось множество вопросов по этому поводу:

Создал мегафункцию ALTMEMPHY. В списке готовых корок конкретно такой микрухи DDR2 нету. Как я понимаю у меня два выхода:
- Скачать откуда-то готовую корку для этой мегафункции (откудова?)
- Выбрать в списке похожую микруха и изменить в ручную параметры (какие именно? гуру, подскажите пжлста sm.gif )

Далее:
Узнал что DDR надо подключать к конкретным пинам FPGA. Эти пины называются DQ и DQS.
DQ - параллельные данные. DQS - строб записываемых данных.
С DQS еще можно понять.
Но с DQ вопрос: на EP3C55 таких выходов вроде 12 - и раскиданые они по разным банкам. а у меня две 16-ти разрядные DDR. Как мне быть. Может можно данные подключить на обычные пины, одного банка?

И последнее:
У меня две DDR должны быть подкдлючены параллельно (в них хранится две составляющие квадратурного сигнала). Вытаскивать данные нужно одновременно, по одним же адресам.
Я как понимаю мне достаточно испольпользовать одну мегафункцию, но придеться видимо изменить параметры - ка минимум - разрядность данных в два раза увеличить (16*2 = 32).

Посдскажите специалисты - правильны мои рассуждения? Не помешало бы указатать также мне на литературу - полезную в данном вопросе... sm.gif

Заранее спасибо.
Hoodwin
Вот тут уже обсуждали альтернативную реализацию. Посмотрите, может быть, пригодится.

Что касается DQ и DQS, то это наследие от DDR памяти (не DDR2), у которой в режиме чтения DQS также работал синхросигналом. Отсюда и появились группы DQ, так как один пин DQS тактировал ровно восемь или девять вполне конкретных DQ пинов. У DDR2 ситуация иная. Там сигнал DQS сфазирован с DQ при чтении, поэтому защелкивать данные и строб можно по общему единому системному клоку. И уже потом разбираться, где-там какие данные. Мой опыт показал, что для DDR2 можно обойтись без DQ-групп, использовать любые fast i/o пины.

Гораздо хуже не DQ, DQS, а вообще количество входов, выходов и I/O в одном банке. Прежде чем рисовать конечную схему, следует очень внимательно отнестись к размещению всех выводов. Квартус отслеживает, сколько выходов приходится на один двунаправленный вывод и требует держать их подальше друг от друга, что в итоге приводит к тому, что полностью все выводы банка использовать для DDR2 памяти нельзя. Одно радует, проверить это можно до того, как будет создано боевое ПО, собрав сначала тупую заготовку, которая будет имитировать все выводы памяти в соответствующем стандарте.

Кстати говоря, в моем проекте очень похожие чипы и поставлены, сделаны по доке от Микрон, а впаяны от Самсунга. И работают пока исправно на 180 МГц, на 8 спидгрейде. ALTMEMPHY в итоге был послан за свою чрезмерную сложность и низкую производительность.

Если ставить два кристалла параллельно, то нужно адрес и управление развести параллельно с одних выводов ПЛИС на обе памяти, а данные пустить раздельно на каждый кристалл.
nmurzin
Цитата
Мой опыт показал, что для DDR2 можно обойтись без DQ-групп, использовать любые fast i/o пины.


Я не являюсь большим знатоком DDR2 памяти.
Мой опыт показал следующее:
Если компилировать готовую мегафункцию как она есть и при этом не расположит DQ вывода в соответствующие DQS группы,
то квартус будет плеваться критическими ворнингами по этому поводу.
Я не стал рисковать и на первый раз сделал как он велит.
Hoodwin
Ну, это возможно, потому что функция наверняка основана на ddr_io, а они наверное имеются не во всех IOE. А я для DDR взял и просто сделал шину на удвоенной частоте, в итоге для нее подходят любые IOE, для которых имеется fast i/o регистр. Но это почти все IOE и есть, за исключением всяких там dedicated clocks.

А вот такой несколько отвлеченный вопрос: у Вас не возникало ощущения, что Альтера пошла по какому-то не очень правильному пути с точки зрения системотехники? Сейчас поясню, что я имею ввиду.

Когда-то, когда я только начинал работать с ПЛИС, фирма Альтера еще только зарождалась. Тогда мы работали с интеловскими FPGA, семейством FlexLogic. Это были первые именно FPGA, а не CPLD, и, кроме того, это были первые FPGA, которые имели встроенную оперативную память, достаточно быстродействующую по тем временам. Именно с этого семейства Альтера и начала свой путь в FPGA, когда купила на корню все это у Интел и перелицевала встроенную EEPROM на FLASH, переименовав в итоге FlexLogic во FLASHLogic. И именно с появлением FPGA со встроенной памятью зародился вообще новый подход в вычислительной технике, потому что появилась возможность строить специализированные вычислители с производительностью, недоступной средствами обычных процессоров. Одним из преимуществ нового подхода стало то, что появилась дополнительная степень свободы, связанная с размещением выводов. С системотехнической точки зрения это позволило разделить труд схемотехников, конструкторов и программистов на разные, практически не зависимые друг от друга задачи. Ну самое страшное, что могло произойти, это надо было конструктору просто сообщить схемотехнику, что он хочет изменить порядок выводов у ПЛИС и обновить принципиальную схему. Учитывая, что частенько схемой и разводкой занимается один человек, это вообще не проблема. И во всяком случае программист мог садиться за проект, имея перед собой уже собранную плату. Но вот потом началось... Сначала появились банки питания, потом к ним добавились банки VREF, потом еще на все это нанесли пары LVDS, потом еще группы DQ-DQS, потом еще возникли токовые ограничения и шумы в цепях питания. И в итоге мы имеем уже не просто проблему переназначения выводов. В итоге получается, что для того, чтобы правильно нарисовать схему, нужно создать проект для FPGA, скомпилировать его, и, получив благословение от Quartus, только начинать приступать к уточнению схемы. То есть, теперь программист FPGA оказывается не завершающей, а чуть ли начинающей стадией проектирования. И в конечном итоге это начинает сильно тормозить процесс проектирования системы в целом по сравнению со старым, прямым способом взаимодействия профессий.

Вот мое мнение заключается в том, что это неправильный путь. Куда спокойнее проектировать в стиле "вот спаяем железку по даташитам, проверим, будем о полной программе думать". А с этими ALTMEMPHY выходит, что пока программу почти полностью не напишешь и не убедишься, что она компилируется, толком даже схему не нарисовать с правильными пинами.

dde29
Цитата(Hoodwin @ Aug 18 2011, 19:21) *
Мой опыт показал, что для DDR2 можно обойтись без DQ-групп, использовать любые fast i/o пины.


Вы не правы. Начал постепенно разбираться - даже когда данные пины DQ[7:0] (или DQ[15:0]) находяться в разных VREF группах - квартус уже ругаться начинает. Не говоря уже про обычные I/O выводы.
Скомпилировать без ошибок удалось толь когда VREF группе, а DQ[15:0] в своей. Адреса и управляющие сигналы можно подключать на любые I/O. Только DQ и DQS необходимо цеплять в специализированные пины (Pin-Out таблица на конкретный чип - вам в помощь).

Щас разбираюсь как управлять этой коркой. Городить еще одну мегафункцию - Memory Controller - как-то не хотелось бы sad.gif



Кстати, Hoodwin, вы говорите, что избавились от ALTMEMPHY. Хотелось бы поглядеть на код, которые реализует интерфейс общения с DDR2. Не могли бы вы мне скинуть примерный код мне на почту sm.gif Щас просто разбираться во временных диаграммах нет времени sad.gif

Цитата(Hoodwin @ Aug 18 2011, 19:21) *
Сначала появились банки питания, потом к ним добавились банки VREF, потом еще на все это нанесли пары LVDS, потом еще группы DQ-DQS, потом еще возникли токовые ограничения и шумы в цепях питания. И в итоге мы имеем уже не просто проблему переназначения выводов. В итоге получается, что для того, чтобы правильно нарисовать схему, нужно создать проект для FPGA, скомпилировать его, и, получив благословение от Quartus, только начинать приступать к уточнению схемы. То есть, теперь программист FPGA оказывается не завершающей, а чуть ли начинающей стадией проектирования. И в конечном итоге это начинает сильно тормозить процесс проектирования системы в целом по сравнению со старым, прямым способом взаимодействия профессий.



ИСТИНУ ГЛАГОЛИТЕ !!! biggrin.gif
Hoodwin
Может я и не прав, но у меня работает живьем DDR2 на EP3C16U484C8 на 180 МГц, один кристалл 16-разрядной памяти тянет развертку для монитора формата HD (1920x1080), где pixel clock 182.5 MHz.
Если бы я стал разбираться с ALTMEMPHY, то делал бы это до сих пор и получил бы жалкие 133 МГц для 8 спидгрейда. Но даже беглое ознакомление с этим творением, к счастью, довольно быстро придало мне желания и сил попробовать сделать свой контроллер.

Что касается DQ и VREF, то это несколько разные понятия: DQ group и VREF group. DQ group - это совокупность выводов, связанных с общим тактовым сигналом DQS. Если внимательно читать даташит на DDR2, то видно, что для нее DQS более не является тактовым сигналом для DQ (при чтении), то есть смысл DQ группы вырождается, она более не требует DQS. Это надо только для старой DDR памяти.
Цитата
Each DQ group is associated with its corresponding DQS pins, as defined in the
Cyclone III and Cyclone III LS pin tables; for example:
■ For DDR2 or DDR SDRAM, Ч8 DQ group DQ3B[7:0] pins are associated with
the DQS3B pin (same 3B group index)
■ For QDR II SRAM, Ч9 Q read-data group DQ3L[8..0] pins are associated
with DQS2L/CQ3L and DQS3L/CQ3L# pins (same 3L group index)
The Quartus® II software issues an error message if a DQ group is not placed properly
with its associated DQS.


VREF group - это совокупность пинов, входные усилители в которых подключены к общему пину VREF для работы со стандартом SSTL-18. Как Вы понимаете, VREF - это просто уровень напряжения 0.9В, который одинаковый для всех сигналов. Нет совершенно никакой разницы, к какой группе VREF относится сигнал. Главное, чтобы 1) выбранный пин поддерживал SSTL-18 вход, то есть имел VREF и 2) пин, который реально служит опорным уровнем для данного пина, был задействован именно под VREF, а не для user I/O.

В сухом остатке, эти множества вовсе не обязаны строго совпадать. Они и не совпадают в общем то, потому что пин VREF просто физически не тянет сразу 8-9 DQ + DQS.

Если Вы хотите поглядеть код, то можете воспользоваться ссылкой, которую я привел в начале. В той ветке на 4 странице есть архив с исходниками. Попробуйте, может у вас всё прокатит. Готов ответить на вопросы по тому коду, если примера и тестбенча для моделсима не хватит.
dde29
В созданной мегафункции ALTMEMPHY естественно помимо портов взаимодействия с DDR2 имеется много портов управления самой мегафункцией - это понятно. Но мне непонятно как именно ,например, записать несколько байт данных в память. А потом их же считать....
бьюсь об стену пока help.gif
des00
Цитата(dde29 @ Aug 19 2011, 01:56) *
Но мне непонятно как именно ,например, записать несколько байт данных в память. А потом их же считать....

контроллер памяти поставить ?
Hoodwin
Цитата(dde29 @ Aug 19 2011, 11:56) *
В созданной мегафункции ALTMEMPHY естественно помимо портов взаимодействия с DDR2 имеется много портов управления самой мегафункцией - это понятно. Но мне непонятно как именно ,например, записать несколько байт данных в память. А потом их же считать....
бьюсь об стену пока help.gif


Ну, дело в том, что сам по себе altmemphy - это еще не конец всех мучений.

Цитата
The Altera® DDR and DDR2 SDRAM Controllers with ALTMEMPHY IP provide
simplified interfaces to industry-standard DDR SDRAM and DDR2 SDRAM. The
ALTMEMPHY megafunction is an interface between a memory controller and the
memory devices, and performs read and write operations to the memory. The DDR
and DDR2 SDRAM Controllers with ALTMEMPHY IP work in conjunction with the
Altera ALTMEMPHY megafunction.

The DDR and DDR2 SDRAM Controllers with ALTMEMPHY IP and ALTMEMPHY
megafunction offer full-rate or half-rate DDR and DDR2 SDRAM interfaces. The DDR
and DDR2 SDRAM Controllers with ALTMEMPHY IP offer two controller
architectures: high-performance controller (HPC) and high-performance controller II
(HPC II). HPC II provides higher efficiency and more advanced features.

The DDR and DDR2 SDRAM high-performance controllers denote both HPC and
HPC II unless indicated otherwise.


То есть, короче говоря, это именно штука для организации правильных времянок на шине памяти, а собственно логика работы SDRAM сюда вообще не входит.
Так что изучать Вам в два раза больше... rolleyes.gif
nmurzin
To Hoodwin.

Мы заинтересованы в приобретении вашего контроллера.
Почта для связи:
theodore1980@gmail.com
nmurzin@mail.ru
Hoodwin
Выслал сообщение почтой.
hwmp
QUOTE (Hoodwin @ Aug 25 2011, 10:47) *
Выслал сообщение почтой.

Добрый день, Hoodwin!
Не могли бы вы сообщить на eaihw@rambler.ru , есть ли развитие контроллера для DDR3?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.