Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MIG
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
hdlstarter
Нужно создать проект на основе Virtex-5 и памяти DDR2 MT47H128M8. Я с помощью MIG (Memory Interface Generator) создал кору для работы с данной памятью. Но я что-то не могу разобратся как она работает, так как ещё новичек программировании ПЛИС. Не могли бы вы кто имел опыт работы с этой корой объяснить на словах, как она работает со стороны пользователя?
YuP
Ну если на пальцах,то там есть фифо на адрес и фифо на данные.
С вашей стороны это выглядит просто как запись и чтение из фифо.Ни о какой инициализации и подзарядке вы не думаете,это уже реализовано в MIG(всё уже украдено до нас laughing.gif )

А если не на пальцах то прочитайте UG на MIG(не знаю какой версией софта вы пользуетесь).Раздел не двусмысленно называется User Interface Accesses.
Write Interface
Read Interface
Скриншоты с интерфейсом фифо не добавляю,думаю их найдете в этом документе,например UG086.
hdlstarter
Спасибо, меня в основном интересовало вот это: "Ни о какой инициализации и подзарядке вы не думаете,это уже реализовано в MIG"
При компиляции уже выдаёт вот такие вот ошибки:

# Warning: ELAB1_0026: ddr2_sdram.vhd : (626, 0): There is no default binding for component "icon4".(No entity named "icon4" was found).
# Warning: ELAB1_0026: ddr2_sdram.vhd : (639, 0): There is no default binding for component "vio_async_in192".(No entity named "vio_async_in192" was found).
# Warning: ELAB1_0026: ddr2_sdram.vhd : (650, 0): There is no default binding for component "vio_async_in96".(No entity named "vio_async_in96" was found).
# Warning: ELAB1_0026: ddr2_sdram.vhd : (660, 0): There is no default binding for component "vio_async_in100".(No entity named "vio_async_in100" was found).
# Warning: ELAB1_0026: ddr2_sdram.vhd : (670, 0): There is no default binding for component "vio_sync_out32".(No entity named "vio_sync_out32" was found).

Где эти модули находятся?

А какую частоту нужно для памяти сгенерировать?
И если можно конечно, если у кого ссылки на документацию по поводу DDR2 на русском
YuP
Цитата(hdlstarter @ Jan 21 2009, 10:39) *
А какую частоту нужно для памяти сгенерировать?
И если можно конечно, если у кого ссылки на документацию по поводу DDR2 на русском

SYS_CLK_P, SYS_CLK_N-Differential input clock to the DCM. The DDR2 controller and
memory operate at this frequency
CLK200_P, CLK200_N- Differential clock used in the idelay_ctrl logic.

А вообще просто настоятельно рекомендую ознакомиться с UG86!!!
Там всё разжовано очень хорошо,правда на супостатском английском laughing.gif
Но по другому никак.

http://www.dsioffe.narod.ru/mysdram/MyMicronSDRAM.htm
Русская инфа для начала
hdlstarter
За ссылку очень спасибо. С UG86 сейчас подробно буду ознакамливатся. Я английский понимаю, но намного медленней читается чем родной, но ничего, надо привыкать.

А с помощью Virtex-5 и памяти DDR2 MT47H128M8, можно будет весь гектар этой памяти забить в течении одной секунды (адресса выставлятся будут в разброс)?
DmitryR
Цитата(hdlstarter @ Jan 21 2009, 12:53) *
А с помощью Virtex-5 и памяти DDR2 MT47H128M8, можно будет весь гектар этой памяти забить в течении одной секунды (адресса выставлятся будут в разброс)?

Это сомнительно, так как пиковая производительность памяти равна 5.3 гигабода (333*8*2), однако при записи вразброс каждый раз будет CAS latency в пять тактов и две команды (RAS и CAS; precharge допустим автоматический). То есть скорость упадет раз в десять. Простой, но некрасивый выход - поставить две микросхемы (и два контроллера). Непростой, но красивый - поставить кэш. Простой и красивый - использовать RLDRAM.
hdlstarter
DmitryR, А где-нить почитать про RLDRAM почитать можно (желательно на-русском)? И чем он отличается от DDR2, кроме того что это память с низкими задержками??? На сколько она дороже? Сам интерфейс RLDRAM чем-то отличаетсяот DDR2? Ну и с помощью xilinx core generstor можно сгенерировать кору для работы с этой памятью?
DmitryR
Цитата(hdlstarter @ Jan 21 2009, 13:58) *
DmitryR, А где-нить почитать про RLDRAM почитать можно
Да, даташит на сайте производителя smile.gif

Цитата(hdlstarter @ Jan 21 2009, 13:58) *
(желательно на-русском)?
Вряд ли.

Цитата(hdlstarter @ Jan 21 2009, 13:58) *
И чем он отличается от DDR2, кроме того что это память с низкими задержками???
У нее интерфейс как у статической памяти. То есть она хорошо приспособлена для произвольного доступа.

Цитата(hdlstarter @ Jan 21 2009, 13:58) *
На сколько она дороже?
Ориентируйтесь на 10 раз примерно.

Цитата(hdlstarter @ Jan 21 2009, 13:58) *
Сам интерфейс RLDRAM чем-то отличаетсяот DDR2?
См. выше, не имеет ничего общего.

Цитата(hdlstarter @ Jan 21 2009, 13:58) *
Ну и с помощью xilinx core generstor можно сгенерировать кору для работы с этой памятью?
Да, тем же MIG.
hdlstarter
Цитата(DmitryR @ Jan 21 2009, 15:11) *
Да, даташит на сайте производителя smile.gif
Я просто на сайте micron посмотрел, там на один гигабайт памяти нет. Или это я плохо посмотрел?
Цитата(DmitryR @ Jan 21 2009, 15:11) *
Да, тем же MIG.
Вроде и MIG последней версии, но ничего про RLDRAM я не нашел


А если расмотреть другие ваши варианты, предложенные вами.


Цитата(DmitryR @ Jan 21 2009, 15:11) *
Простой, но некрасивый выход - поставить две микросхемы (и два контроллера).
Это как я понимаю, вместо одного DDR2 на гигабайт, использовать два DDR2 по 512 мегабайт???
Цитата(DmitryR @ Jan 21 2009, 15:11) *
Непростой, но красивый - поставить кэш.
А вот про это можно поподробнее. Принцип подключения и работы? Где про это можно почитать? Посмотреть пример проекта?
DmitryR
Цитата(hdlstarter @ Jan 21 2009, 15:42) *
Я просто на сайте micron посмотрел, там на один гигабайт памяти нет. Или это я плохо посмотрел?
Нет, это правда. Однако обратите внимание, что приведенная вами микросхема DDR2 имеет емкость 1 гигабит, а не гигабайт. RLDRAM же вроде максимум пол-гигабита, так что надо ставить две.

Цитата(hdlstarter @ Jan 21 2009, 15:42) *
Вроде и MIG последней версии, но ничего про RLDRAM я не нашел
Упс, RLDRAM не поддерживается MIG в Virtex-5. Смотрите xapp852, там в конце есть ссылка на reference design.

Цитата(hdlstarter @ Jan 21 2009, 15:42) *
А если расмотреть другие ваши варианты, предложенные вами.
Это как я понимаю, вместо одного DDR2 на гигабайт, использовать два DDR2 по 512 мегабайт???
Да, можно и так, только логика конечно усложнится, вам придется исходящий поток данных раскидывать по двум контроллерам. Если же на один контроллер две микросхемы повесить, то в случае, когда несколько подряд записей попадают по адресам в одну микросхему все равно будет тормозить.

Цитата(hdlstarter @ Jan 21 2009, 15:42) *
А вот про это можно поподробнее. Принцип подключения и работы? Где про это можно почитать? Посмотреть пример проекта?
Используя внутреннюю память FPGA строится схема, которая накапливает данные, которые надо писать во внешнюю динамическую память, группируя их по адресам. То есть если адреса записи следуют например как 1-5-4-3-0-2-7-6, то эти данные записываются сначала в кэш, а затем в нормальном порядке пакетом записыватся в DDR2. Делается на основе CAM (content-adressable memory, в coregen есть). Однако, если адреса записи произвольно раскиданы по всей памяти, а не сгруппированы хотя бы по строкам, кэш не поможет.
hdlstarter
Цитата(DmitryR @ Jan 21 2009, 17:27) *
Нет, это правда. Однако обратите внимание, что приведенная вами микросхема DDR2 имеет емкость 1 гигабит, а не гигабайт.
Просто в описании микросхемы написано: "Density: 1Gb, Depth: 128Mb, width: x8 ", не ужели гигабит? я просто думал что гигабит, это 1Gbit. Если это действительно гигабит не посоветуете где можно найти микруху на гигабайт?
Цитата(DmitryR @ Jan 21 2009, 17:27) *
Используя внутреннюю память FPGA строится схема, которая накапливает данные, которые надо писать во внешнюю динамическую память, группируя их по адресам. То есть если адреса записи следуют например как 1-5-4-3-0-2-7-6, то эти данные записываются сначала в кэш, а затем в нормальном порядке пакетом записыватся в DDR2. Делается на основе CAM (content-adressable memory, в coregen есть). Однако, если адреса записи произвольно раскиданы по всей памяти, а не сгруппированы хотя бы по строкам, кэш не поможет.
О, спасибо за идею, у меня как раз адресса будут идти примерно так: 0, 500, 1000, 1500, 1, 501, 1001, 1501 и т.д.
Цитата(DmitryR)
Это сомнительно, так как пиковая производительность памяти равна 5.3 гигабода (333*8*2)
Если не тяжело обьясните как вы получили данное число? И что это число означает? Скорость памяти, если данные будут писатся подряд? А то что-то я защитался. Вообще какова у данной микросхемы будет скорость записи если адреса будут идти последовательно. Извините за глупые вопросы, просто в этом деле абсолютный новичек, охота разобратся.
DmitryR
Цитата(hdlstarter @ Jan 21 2009, 16:57) *
Просто в описании микросхемы написано: "Density: 1Gb, Depth: 128Mb, width: x8 ", не ужели гигабит? я просто думал что гигабит, это 1Gbit. Если это действительно гигабит не посоветуете где можно найти микруху на гигабайт?
Гигабайт будет 1 GB. Тем не менее там разъяснено дополнительно: Depth: 128Mb, width: x8. Если надо гигабайт - ставьте уже лучше UDIMM, микросхемы бывают максимум по 4 Gb.

Цитата(hdlstarter @ Jan 21 2009, 16:57) *
О, спасибо за идею, у меня как раз адресса будут идти примерно так: 0, 500, 1000, 1500, 1, 501, 1001, 1501 и т.д.
Ну это уже будет не совсем кэш, а просто буферные регистры: 4 восьмиразрядных слова по адресам 0-3 будут писаться как одно слово в тридцатидвухразрядный UDIMM.

Цитата(hdlstarter @ Jan 21 2009, 16:57) *
Если не тяжело обьясните как вы получили данное число? И что это число означает? Скорость памяти, если данные будут писатся подряд? А то что-то я защитался. Извините за глупые вопросы, просто в этом деле абсолютный новичек, охота разобратся.
Я же написал, как я его получил: умножил скорость памяти в 333 мегагерца на 8 разрядов и еще на 2, так как данные передаются дважды за такт. И эта скорость не будет достигнута, даже если писать подряд, так как если даже расчитывать, что контроллер команды с данными полностью перекроет то есть еще рефреш.
hdlstarter
Цитата(DmitryR @ Jan 21 2009, 17:47) *
Гигабайт будет 1 GB. Тем не менее там разъяснено дополнительно: Depth: 128Mb, width: x8. Если надо гигабайт - ставьте уже лучше UDIMM, микросхемы бывают максимум по 4 Gb.
Для UDIMM к примеру MT16HTF12864A, скорость обмена будет: 333*64*2=42624, это если по-порядку и без рефреша. И даже если не по порядку, то скорость как вы говорили упадет примерно в 10 раз, то это будет 4,2 гигабайта в секунду. Правильно я пощитал или нет?


И ещё вопрос, что означает параметр: Data Rate: 533 MT/s ???
hdlstarter
В общем по поводу "Data Rate", это я конечно по неопытности глупый вопрос задал. Я разобрался.

Но поможете вы мне разобраться например с микросхемой MT16HTF12864A. Я тут по даташиту все параметры пересчитал, мне кажется эта микросхема будет успевать записывать один гигабайт за секунду, даже записывая данные по произвольным случайным адрессам (не по порядку). Если я прав то подтвердите, если же нет, то обьясните почему не прав smile.gif Заранее всем спасибо за помощь.
DmitryR
Цитата(hdlstarter @ Jan 21 2009, 22:53) *
Но поможете вы мне разобраться например с микросхемой MT16HTF12864A. Я тут по даташиту все параметры пересчитал, мне кажется эта микросхема будет успевать записывать один гигабайт за секунду, даже записывая данные по произвольным случайным адрессам (не по порядку). Если я прав то подтвердите, если же нет, то обьясните почему не прав smile.gif Заранее всем спасибо за помощь.

Нет, вы не правы, так как опять перепутали биты с байтами. 333(Мгц)*64(_бита_)*2=42 гигаБИТ в секунду. Вам же надо 1 гигаБАЙТ в секунду, то есть 8 гигаБИТ в секунду. Разница всего впятеро, вряд ли успеете с произвольным доступом. А писать вы будете с точки зрения DIMM полностью вразброс, так как группировка адресов пойдет на формирование параллельного слова: у вас же данные по 8 бит я так понял, то есть для одной операции записи в 64 бита вам надо собрать в параллель адреса с 0 по 7.
В итоге дискуссия показывает, что вы себе для старта выбрали нереально сложную задачу, если конечно вы не сможете оптимизировать адресацию так, чтобы можно было писать последовательно.
hdlstarter
Ладно вы правы, для меня это ещё сложновато, нужно побольше поразбиратся.
Но у меня два вопроса напоследок, для дальнейшего понимания: буду ли я все-таки успевать записывать в память UDIMM гигаБАЙТ за секунду, если запись будет последовательной? И второй вопрос, если выбрать 2 памяти по 500 мегабайт или 4 по 256, буду ли я успевать писать в разброс? Ведь при этом разница уже составляет в 10 и в 20 соответственно? Ведь задержки на установление нового адреса составляет примерно 7-10 тактов...
DmitryR
Если будете писать подряд - то успеете. Если поставите несколько микросхем на один контроллер - то это не поможет, так как записи по адресам 0, 500, 1000, 1500 все равно попадут в одну микросхему и будут тормозить. Надо делать на каждую микросхему свой контроллер, чтобы соседние записи в одну микросхему строго не попадали. Ну или изучить, как контроллер адресует несколько микросхем и оптимизировать адресацию так, чтобы через один контроллер писалось бабочкой. Хотя там могут встать проблемы все равно, шина-то общая, надо считать внимательно, вплоть до того что в ModelSim это все собрать и посмотреть, как выйдет, а потом уже заказывать железо.
hdlstarter
Огромное спасибо за помощь
hdlstarter
Распечатал просто огромное количество документации по этому поводу. Буду читать, надеюсь разберусь.
У меня наверное все-таки последний вопрос: Если я выберу две памяти UDIMM по 512 мегабайт. Повешу их на два независимых контроллерах (объем ПЛИС это позволяет сделать) и буду писать в неё в произвольном порядке, то я успею в них за секунду затолкать по 512 мегабайт (1024 в суме) или нет?
Просто либо я совсем не разобрался, либо все-таки вот последний предложенный мною вариант имеет право на жизнь?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.