Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Cyclone 5 + микросхема SDRAM + Verilog
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
kovigor
Т.е., есть DevKit с этим Циклоном и памятью. Задача для начала простейшая - заполнить память какими-нибудь числами и затем считать их обратно. Как подступиться к такой задаче ? Может, кто-то поделится примером ?
Maverick
Цитата(kovigor @ Feb 9 2016, 16:36) *
Т.е., есть DevKit с этим Циклоном и памятью. Задача для начала простейшая - заполнить память какими-нибудь числами и затем считать их обратно. Как подступиться к такой задаче ? Может, кто-то поделится примером ?

надо уточнить к чему эта память подсоединена к FPGA или хардовому процессору...
Если к хардовому процессору, для доступа FPGA к этой памяти нужно делать типа DMA режима
Если к FPGA(через хардовый контроллер памяти), то можно использовать multiport memory controller IP
kovigor
Цитата(Maverick @ Feb 9 2016, 17:42) *
надо уточнить к чему эта память подсоединена к FPGA или хардовому процессору...

Именно к FPGA. А примером использования этого контроллера никто не поделится ?
Maverick
Цитата(kovigor @ Feb 9 2016, 16:47) *
Именно к FPGA. А примером использования этого контроллера никто не поделится ?

примеры

kovigor
Спасибо. Вопрос. Я пробовал использовать этот контроллер в предыдущей версии Квартуса. Там предлагают выбрать одну из уже предусмотренных разработчиками микросхем памяти или же использовать что-то свое. Как быть с последним случаем ? Изучать даташит, выписывать параметры микросхемы и подставлять в поля мастера ?
Maverick
Цитата(kovigor @ Feb 9 2016, 16:56) *
Спасибо. Вопрос. Я пробовал использовать этот контроллер в предыдущей версии Квартуса. Там предлагают выбрать одну из уже предусмотренных разработчиками микросхем памяти или же использовать что-то свое. Как быть с последним случаем ? Изучать даташит, выписывать параметры микросхемы и подставлять в поля мастера ?

да
Цитата(kovigor @ Feb 9 2016, 16:56) *
Изучать даташит, выписывать параметры микросхемы и подставлять в поля мастера


Если DevKit от альтеры, то эта микросхема памяти должна быть в списке, возможно нужно более новое ПО
kovigor
Цитата(Maverick @ Feb 9 2016, 18:09) *
да

Понял, спасибо ...
А вы пробовали реализовать подобный проект (я об использовании внашней ИС памяти для хранения своих данных) ? Насколько сложно это будет сделать ?
Maverick
Цитата(kovigor @ Feb 9 2016, 17:11) *
Понял, спасибо ...
А вы пробовали реализовать подобный проект (я об использовании внашней ИС памяти для хранения своих данных) ? Насколько сложно это будет сделать ?

Да пробовал, правда для Xilinx
Сложного там ничего нет, Wizard генерирует тестбенч, по которому видно как работать
kovigor
Цитата(Maverick @ Feb 9 2016, 19:53) *
Да пробовал, правда для Xilinx
Сложного там ничего нет, Wizard генерирует тестбенч, по которому видно как работать

Понял, спасибо, завтра постараюсь попробовать ...
kovigor
Цитата(Maverick @ Feb 9 2016, 18:42) *
Если к FPGA(через хардовый контроллер памяти), то можно использовать multiport memory controller IP

Вопрос. На отладочной плате смонтирована обычная SDR SDRAM, а предложенный вами multiport memory controller IP такую память, похоже, не поддерживает. Что можно сделать в этой ситуации ?
des00
Цитата(kovigor @ Feb 10 2016, 19:11) *
Вопрос. На отладочной плате смонтирована обычная SDR SDRAM, а предложенный вами multiport memory controller IP такую память, похоже, не поддерживает. Что можно сделать в этой ситуации ?

контроллер написать или найти корку готовую
kovigor
Цитата(des00 @ Feb 10 2016, 15:22) *
контроллер написать или найти корку готовую

Как она хоть может называться ? И где искать ?
Lmx2315
Цитата(kovigor @ Feb 10 2016, 15:29) *
Как она хоть может называться ? И где искать ?

http://opencores.org/project,yadmc
http://opencores.org/project,sdram_16bit
http://www.fpga4fun.com/SDRAM.html
des00
до кучи на опенкоресах, моя поделка http://opencores.org/project,hssdrc если что могу проконсультировать wink.gif
kovigor
Цитата(des00 @ Feb 10 2016, 15:40) *
до кучи на опенкоресах, моя поделка http://opencores.org/project,hssdrc если что могу проконсультировать wink.gif

Наверное, мне нужно руководство по применению. Вот есть это ядро. Как вставить его в свой проект на Верилоге, как записать данные в микросхему памяти, как потом считать их из нее ? И еще, как настроить это ядро под мою микросхему памяти ?
Lmx2315
..дерзкий какой.
kovigor
Цитата(Lmx2315 @ Feb 10 2016, 16:34) *
..дерзкий какой.

В смысле, вы о чем ?
des00
Цитата(kovigor @ Feb 10 2016, 20:01) *
Наверное, мне нужно руководство по применению. Вот есть это ядро. Как вставить его в свой проект на Верилоге, как записать данные в микросхему памяти, как потом считать их из нее ? И еще, как настроить это ядро под мою микросхему памяти ?

в мануале там все написано. я на него пару месяцев потратил wink.gif

И до кучи там есть моделька памяти от микрона + тестбенч
Intekus
Цитата(des00 @ Feb 10 2016, 17:53) *
в мануале там все написано. я на него пару месяцев потратил wink.gif

И до кучи там есть моделька памяти от микрона + тестбенч


Загрузил. Рассматриваю - оно SVшное. У нас средой ISE14, он SV на синтез не знает (просиулить сможем).
Что посоветуете? Рискнуть попробовать допилить синтезируемую часть кода на чистый Verilog? Или поискать другие ядра?

Другие контроллеры видел на Opencores, а также у Xilinx - предлагают пару вариантов от партнёров, а также Multi-Port Memory Controller (MPMC) из EDK. Можно ли MPMC из EDK пристыковать в проект ISE?
В CoreGen есть MIG - но он нам не подойдёт, так как не поддерживает SDR (только DDR).

Что посоветуете почитать по заданию временнЫх ограничений при работе с внешней памятью? По "SDR SDRAM Application note" на сайте Xilinx ничего подходящего не нашёл.
des00
Цитата(Intekus @ Mar 16 2016, 16:29) *
Загрузил. Рассматриваю - оно SVшное. У нас средой ISE14, он SV на синтез не знает (просиулить сможем).
Что посоветуете? Рискнуть попробовать допилить синтезируемую часть кода на чистый Verilog? Или поискать другие ядра?

Случаи переписывания на чистый верилог этого контроллера мне известны. ЕМНИП, там SV синтезируемых фишек минимум. На переписку уйдет дня 3 (в основном только типы поменять logic на reg/wire, типы убрать на объявления и массивы из интерфейсов убрать)
Intekus
Цитата(des00 @ Mar 16 2016, 12:50) *
Случаи переписывания на чистый верилог этого контроллера мне известны.

Приятно, что такое уже делали; жаль, что придётся "изобретать велосипед".
Цитата(des00 @ Mar 16 2016, 12:50) *
(в основном только типы поменять logic на reg/wire, типы убрать на объявления и массивы из интерфейсов убрать)

И always_comb/_ff'ы заменить на обычные.

А по остальным вопросам подскажете что-нибудь (особенно про документы)?
И - я понимаю, что приятно, когда используют Вашу разработку - но, может есть контроллеры без SV? Какие-то предельные характеристики нам не нужны, скорее всего, нагрузка на память будет невысока.
des00
Цитата(Intekus @ Mar 16 2016, 18:02) *
И - я понимаю, что приятно, когда используют Вашу разработку - но, может есть контроллеры без SV? Какие-то предельные характеристики нам не нужны, скорее всего, нагрузка на память будет невысока.

есть альтеровский в сорцах, есть хилый в сорцах. Они простые как барабан, но работают. Самописный примитивный SDRAM, пишется за день. Там 3 команды всего чтение/запись с автозакрытием банка и рефреш. констрейны там обычные, задать вход-выход.

альтеровский в сорцах, в приложении даташит на него
Intekus
Благодарю, альтеровский и Ваш контроллеры скачал. На Ваш прочитал документацию, сам код не смотрел.
Вопросы по HSSDRC (aka "Что не ясно детально изучившему один даташит новичку в теме SDRAM из мануала на Ваше ядро" cool.gif :
  1. Есть ли возможность работать с пакетами на всю страницу (continuous bursts)?
  2. Включён или выключен по умолчанию автопредзаряд после операции? Можно ли изменить это значение для конкретной операции (включить - чтоб увеличить пропускную способность, выключить - чтоб обрабатывать операции меньшей, чем обычно, длины данных)? (Pxtv)
  3. Поддерживаются ли режимы самостоятельного предзаряда, снижения потребления, глубокого отключения питания и приостановки тактового?
  4. Как именно выполняется автообновление? В коде видел что-то на тему слабого и сильного его вариантов.
  5. А ещё в проектах подобного вида - выкладываемых для всех - очень хотелось бы видеть хотя бы крупноблочную схему внутреннего устройства со всеми названиями портов. "Вместо тысячи слов". С одного сеанса разглядывания уже очень много что становится про модуль понятным.

И вопросы по SDRAM в целом и по приложенному даташиту:
  1. Каков обычный сценарий использования DRAM вместе с ПЛИС для обработки сигнала типа видеоданных - когда для каждого элемента необходимо сделать несколько чтений и записей (чаще всего, по заранее известным адресам - но могут они быть и вычислимыми)? Просто "вылизывание" схемы адресации и последовательности обращений / буферизация входных данных в пакеты / организация некого кэша на основе blockRAM в ПЛИС / что-то ещё?
  2. Возможна ли (предполагаю, что нет) такая схема работы, при которой чередуются чтение из строки одного банка и запись в строку другого банка при том, что обе строки открываются только в начале всего процесса и закрываются в конце? А чередование чтения и записи из разных ячеек одной и той же строки одного и того же банка?
  3. Если выполняется регулярный доступ ко всем строкам со включённым предзарядом - обязателен ли всё равно Auto Refresh с указанным периодом?
  4. Почему при прерывании чтения страницы или просто долгого пакета записью, после подачи в течение 2 тактов сигнала DQM на шине не возникает дочитываемых данных, "сталкивающихся" с данными для записи (такт T4, рис. 19, стр. 50)?
  5. Что пойдёт неправильно, если не подавать запрещающего сигнала на DQM в ситуации с рис. 30 (переход от записи к предзаряду, стр. 59)?

ЗЫ: Приложенный даташит я в общих чертах для себя перевёл-законспектировал (без картинок). Имеет смысл выкладывать?
des00
Цитата(Intekus @ Mar 18 2016, 19:38) *
Есть ли возможность работать с пакетами на всю страницу (continuous bursts)?

Нет, размер бурста ограничен [1:16]. Но, т.к. страница памяти не закрывается, то можно лить пакет во всю страницу. Учтите, что автоматического определения перехода на другую страницу нет. Это нужно делать принудительно.

Цитата
Включён или выключен по умолчанию автопредзаряд после операции? Можно ли изменить это значение для конкретной операции (включить - чтоб увеличить пропускную способность, выключить - чтоб обрабатывать операции меньшей, чем обычно, длины данных)? (Pxtv)

Авто выключены все, т.к. это не дает держать открытыми банки. Вы потеряете пропускную способность. Банки закрываются принудительно либо по команде с интерфейса, либо автоматически по таймерам авторефреша (если они не были отключены).

Цитата
Поддерживаются ли режимы самостоятельного предзаряда, снижения потребления, глубокого отключения питания и приостановки тактового?

Нет. Такой задачи я себе не ставил. Меня интересовала максимальная пропускная способность в режиме рандомного доступа.

Цитата
Как именно выполняется автообновление? В коде видел что-то на тему слабого и сильного его вариантов.

Если вы про встроенный, то 2 таймера : слабый - встраивается в конвейер когда в нем есть место, сильный - останавливает конвейер, потом перезапускает.

Цитата
А ещё в проектах подобного вида - выкладываемых для всех - очень хотелось бы видеть хотя бы крупноблочную схему внутреннего устройства со всеми названиями портов. "Вместо тысячи слов". С одного сеанса
разглядывания уже очень много что становится про модуль понятным.

Это опенсорс, да и топ левел там линейный. Вся схема восстанавливается за пару часов sm.gif

Цитата
Каков обычный сценарий использования DRAM вместе с ПЛИС для обработки сигнала типа видеоданных - когда для каждого элемента необходимо сделать несколько чтений и записей (чаще всего, по заранее известным адресам - но могут они быть и вычислимыми)? Просто "вылизывание" схемы адресации и последовательности обращений / буферизация входных данных в пакеты / организация некого кэша на основе blockRAM в ПЛИС / что-то ещё?

программируемый SGDMA

Цитата
Возможна ли (предполагаю, что нет) такая схема работы, при которой чередуются чтение из строки одного банка и запись в строку другого банка при том, что обе строки открываются только в начале всего процесса и закрываются в конце? А чередование чтения и записи из разных ячеек одной и той же строки одного и того же банка?

Да, возможно. Но помните, что строку нельзя держать открытой больше чем Tras (120мкс). Ее обязательно нужно будет закрыть.

Цитата
Если выполняется регулярный доступ ко всем строкам со включённым предзарядом - обязателен ли всё равно Auto Refresh с указанным периодом?

Авторефреш это: закрыть все банки. открыть банк с адресом из счетчика/инкрементировать счетчик, закрыть банк. Если вы пробегаете все свои ИСПОЛЬЗУЕМЫЕ ряды, за время рефреша (64мc), то можно жить без него.

Цитата
Почему при прерывании чтения страницы или просто долгого пакета записью, после подачи в течение 2 тактов сигнала DQM на шине не возникает дочитываемых данных, "сталкивающихся" с данными для записи (такт T4, рис. 19, стр. 50)?

Как бы для этого маска и ставиться. Что бы не было на шине данных коллизий (кстати обратите внимание на BTA - Bus Turn Around, там тоже есть потеря пропускной способности)

Цитата
Что пойдёт неправильно, если не подавать запрещающего сигнала на DQM в ситуации с рис. 30 (переход от записи к предзаряду, стр. 59)?

На этом рисунке вы принудительно рвете бурст. Например у вас бурст стоит 4ре, а вам нужно записать одно слово. Без маски, вы затрете "чужие" ячейки

ЗЫ. Причина, по которой я не делал continuous bursts, он есть только у SDRAM. У DDR памяти этого режима нет. В свое время планировал этот контроллер запилить под DDRы
Intekus
Благодарю Вас за столь подробные ответы!
Цитата(des00 @ Mar 19 2016, 11:21) *
Учтите, что автоматического определения перехода на другую страницу нет. Это нужно делать принудительно.
Жаль.

Цитата(des00 @ Mar 19 2016, 11:21) *
Банки закрываются принудительно либо по команде с интерфейса, либо автоматически по таймерам авторефреша (если они не были отключены).

По какой именно команде с интерфейса? Там только чтение, запись и обновление.

Цитата(des00 @ Mar 19 2016, 11:21) *
Это опенсорс

"As is, понимаю". Тем более, что, по Вашим словам, на докуменирование и так потрачено много сил и времени.
Но, ещё - в документации совсем ничего нет про теги команд. Они упомянуты в качестве входов - и всё.
Внутри есть какой-то out-of-order при формировании конвейера? Как именно он работает?

Цитата(des00 @ Mar 19 2016, 11:21) *
Если вы пробегаете все свои ИСПОЛЬЗУЕМЫЕ ряды, за время рефреша (64мc), то можно жить без него.

Про "ИСПОЛЬЗУЕМЫЕ" - очень ценное замечание.

Цитата(des00 @ Mar 19 2016, 11:21) *
программируемый SGDMA

Нашёл даташит на него, но сходу разобраться тяжело. Что такое DMA - представление имею, но реализовывать не приходилось; по ощущению - не факт, что в актуальной разработке оно понадобится. А что вообще порекомендуете посмотреть по теме внешней динамической памяти и использования её в проектах без привязки к процессорным ядрам, шине и т. д.?
И - то Altera; у Xilinx, судя по результатам поиска, термин "sgdma" используется только в контексте сетевых интерфейсов.

Цитата(des00 @ Mar 19 2016, 11:21) *
Как бы для этого маска и ставиться. Что бы не было на шине данных коллизий (кстати обратите внимание на BTA - Bus Turn Around, там тоже есть потеря пропускной способности)

Разобрался. Там сначала не уловил несколько другое - что при чтении оно срабатывает с задержкой в 2 такта.

Цитата(des00 @ Mar 19 2016, 11:21) *
На этом рисунке вы принудительно рвете бурст. Например у вас бурст стоит 4ре, а вам нужно записать одно слово. Без маски, вы затрете "чужие" ячейки

На нижней его половине - ещё понятно. На верхней - не совсем. Т. е., получается, что бурст рвётся быстрее и надёжнее не по приходу новой команды (PRECHARGE), а по сигналу запрета записи?

Цитата(des00 @ Mar 19 2016, 11:21) *
ЗЫ. Причина, по которой я не делал continuous bursts, он есть только у SDRAM. У DDR памяти этого режима нет. В свое время планировал этот контроллер запилить под DDRы

Хорошо, что так; хоть что-то под SDR функционально богатое получилось.
А какие переделки в нём были бы необходимы под DDR?
des00
Цитата(Intekus @ Mar 21 2016, 23:47) *
По какой именно команде с интерфейса? Там только чтение, запись и обновление.

По сигналу sys_refr

Цитата
Но, ещё - в документации совсем ничего нет про теги команд. Они упомянуты в качестве входов - и всё.
Внутри есть какой-то out-of-order при формировании конвейера? Как именно он работает?

Тег - метаинформация соответствующая команде и идущая с ними по конвейеру параллельно. Для записи не нужная, для чтения это будет выровненная, по тактам задержки чтения, метаинформация. Можно использовать для разделения чтения с логических устройств. Если не нужна, то отбросить

Цитата
Нашёл даташит на него, но сходу разобраться тяжело. Что такое DMA - представление имею, но реализовывать не приходилось; по ощущению - не факт, что в актуальной разработке оно понадобится. А что вообще порекомендуете посмотреть по теме внешней динамической памяти и использования её в проектах без привязки к процессорным ядрам, шине и т. д.?
И - то Altera; у Xilinx, судя по результатам поиска, термин "sgdma" используется только в контексте сетевых интерфейсов.

Scatter-Gather DMA это DMA, работающий по списку : адрес - количество данных. Т.е. формируется список, запускается чтение/запись, по ходу освобождения дискрипторов список может пополняться. Но это для процессорных систем. Для систем без проца - что-то вроде дма движка с очередью команд.

Цитата
На нижней его половине - ещё понятно. На верхней - не совсем. Т. е., получается, что бурст рвётся быстрее и надёжнее не по приходу новой команды (PRECHARGE), а по сигналу запрета записи?

Бурст не может порваться. Сконфигурировав память, вы задали фиксированный размер бурста. Он всегда есть, просто если вы пишете данных меньше, то должны маскировать не нужные записи. При чтении, вы либо игнорируете прочитанные данные, либо маскируете их чтение (что бы сэкономить немного тактов).

Цитата
А какие переделки в нём были бы необходимы под DDR?

У DDR другие правила сочетания команд, другие задержки, другой стык с data-path
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.