|
Cyclone 5 + микросхема SDRAM + Verilog, Как написать код для использования в проекте этой памяти ? |
|
|
|
Mar 16 2016, 09:29
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621

|
Цитата(des00 @ Feb 10 2016, 17:53)  в мануале там все написано. я на него пару месяцев потратил  И до кучи там есть моделька памяти от микрона + тестбенч Загрузил. Рассматриваю - оно SVшное. У нас средой ISE14, он SV на синтез не знает (просиулить сможем). Что посоветуете? Рискнуть попробовать допилить синтезируемую часть кода на чистый Verilog? Или поискать другие ядра? Другие контроллеры видел на Opencores, а также у Xilinx - предлагают пару вариантов от партнёров, а также Multi-Port Memory Controller (MPMC) из EDK. Можно ли MPMC из EDK пристыковать в проект ISE? В CoreGen есть MIG - но он нам не подойдёт, так как не поддерживает SDR (только DDR). Что посоветуете почитать по заданию временнЫх ограничений при работе с внешней памятью? По "SDR SDRAM Application note" на сайте Xilinx ничего подходящего не нашёл.
--------------------
...а Сила, Брат - она - в несиловых решениях.
|
|
|
|
|
Mar 16 2016, 10:02
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621

|
Цитата(des00 @ Mar 16 2016, 12:50)  Случаи переписывания на чистый верилог этого контроллера мне известны. Приятно, что такое уже делали; жаль, что придётся "изобретать велосипед". Цитата(des00 @ Mar 16 2016, 12:50)  (в основном только типы поменять logic на reg/wire, типы убрать на объявления и массивы из интерфейсов убрать) И always_comb/_ff'ы заменить на обычные. А по остальным вопросам подскажете что-нибудь (особенно про документы)? И - я понимаю, что приятно, когда используют Вашу разработку - но, может есть контроллеры без SV? Какие-то предельные характеристики нам не нужны, скорее всего, нагрузка на память будет невысока.
--------------------
...а Сила, Брат - она - в несиловых решениях.
|
|
|
|
|
Mar 16 2016, 11:00
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Intekus @ Mar 16 2016, 18:02)  И - я понимаю, что приятно, когда используют Вашу разработку - но, может есть контроллеры без SV? Какие-то предельные характеристики нам не нужны, скорее всего, нагрузка на память будет невысока. есть альтеровский в сорцах, есть хилый в сорцах. Они простые как барабан, но работают. Самописный примитивный SDRAM, пишется за день. Там 3 команды всего чтение/запись с автозакрытием банка и рефреш. констрейны там обычные, задать вход-выход. альтеровский в сорцах, в приложении даташит на него
--------------------
|
|
|
|
|
Mar 18 2016, 12:38
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621

|
Благодарю, альтеровский и Ваш контроллеры скачал. На Ваш прочитал документацию, сам код не смотрел. Вопросы по HSSDRC (aka "Что не ясно детально изучившему один даташит новичку в теме SDRAM из мануала на Ваше ядро"  : - Есть ли возможность работать с пакетами на всю страницу (continuous bursts)?
- Включён или выключен по умолчанию автопредзаряд после операции? Можно ли изменить это значение для конкретной операции (включить - чтоб увеличить пропускную способность, выключить - чтоб обрабатывать операции меньшей, чем обычно, длины данных)? (Pxtv)
- Поддерживаются ли режимы самостоятельного предзаряда, снижения потребления, глубокого отключения питания и приостановки тактового?
- Как именно выполняется автообновление? В коде видел что-то на тему слабого и сильного его вариантов.
- А ещё в проектах подобного вида - выкладываемых для всех - очень хотелось бы видеть хотя бы крупноблочную схему внутреннего устройства со всеми названиями портов. "Вместо тысячи слов". С одного сеанса разглядывания уже очень много что становится про модуль понятным.
И вопросы по SDRAM в целом и по приложенному даташиту: - Каков обычный сценарий использования DRAM вместе с ПЛИС для обработки сигнала типа видеоданных - когда для каждого элемента необходимо сделать несколько чтений и записей (чаще всего, по заранее известным адресам - но могут они быть и вычислимыми)? Просто "вылизывание" схемы адресации и последовательности обращений / буферизация входных данных в пакеты / организация некого кэша на основе blockRAM в ПЛИС / что-то ещё?
- Возможна ли (предполагаю, что нет) такая схема работы, при которой чередуются чтение из строки одного банка и запись в строку другого банка при том, что обе строки открываются только в начале всего процесса и закрываются в конце? А чередование чтения и записи из разных ячеек одной и той же строки одного и того же банка?
- Если выполняется регулярный доступ ко всем строкам со включённым предзарядом - обязателен ли всё равно Auto Refresh с указанным периодом?
- Почему при прерывании чтения страницы или просто долгого пакета записью, после подачи в течение 2 тактов сигнала DQM на шине не возникает дочитываемых данных, "сталкивающихся" с данными для записи (такт T4, рис. 19, стр. 50)?
- Что пойдёт неправильно, если не подавать запрещающего сигнала на DQM в ситуации с рис. 30 (переход от записи к предзаряду, стр. 59)?
ЗЫ: Приложенный даташит я в общих чертах для себя перевёл-законспектировал (без картинок). Имеет смысл выкладывать?
--------------------
...а Сила, Брат - она - в несиловых решениях.
|
|
|
|
|
Mar 19 2016, 08:21
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Intekus @ Mar 18 2016, 19:38)  Есть ли возможность работать с пакетами на всю страницу (continuous bursts)? Нет, размер бурста ограничен [1:16]. Но, т.к. страница памяти не закрывается, то можно лить пакет во всю страницу. Учтите, что автоматического определения перехода на другую страницу нет. Это нужно делать принудительно. Цитата Включён или выключен по умолчанию автопредзаряд после операции? Можно ли изменить это значение для конкретной операции (включить - чтоб увеличить пропускную способность, выключить - чтоб обрабатывать операции меньшей, чем обычно, длины данных)? (Pxtv) Авто выключены все, т.к. это не дает держать открытыми банки. Вы потеряете пропускную способность. Банки закрываются принудительно либо по команде с интерфейса, либо автоматически по таймерам авторефреша (если они не были отключены). Цитата Поддерживаются ли режимы самостоятельного предзаряда, снижения потребления, глубокого отключения питания и приостановки тактового? Нет. Такой задачи я себе не ставил. Меня интересовала максимальная пропускная способность в режиме рандомного доступа. Цитата Как именно выполняется автообновление? В коде видел что-то на тему слабого и сильного его вариантов. Если вы про встроенный, то 2 таймера : слабый - встраивается в конвейер когда в нем есть место, сильный - останавливает конвейер, потом перезапускает. Цитата А ещё в проектах подобного вида - выкладываемых для всех - очень хотелось бы видеть хотя бы крупноблочную схему внутреннего устройства со всеми названиями портов. "Вместо тысячи слов". С одного сеанса разглядывания уже очень много что становится про модуль понятным. Это опенсорс, да и топ левел там линейный. Вся схема восстанавливается за пару часов Цитата Каков обычный сценарий использования 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ы
--------------------
|
|
|
|
|
Mar 21 2016, 15:47
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621

|
Благодарю Вас за столь подробные ответы! Цитата(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?
--------------------
...а Сила, Брат - она - в несиловых решениях.
|
|
|
|
|
Mar 21 2016, 16:04
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Intekus @ Mar 21 2016, 23:47)  По какой именно команде с интерфейса? Там только чтение, запись и обновление. По сигналу sys_refr Цитата Но, ещё - в документации совсем ничего нет про теги команд. Они упомянуты в качестве входов - и всё. Внутри есть какой-то out-of-order при формировании конвейера? Как именно он работает? Тег - метаинформация соответствующая команде и идущая с ними по конвейеру параллельно. Для записи не нужная, для чтения это будет выровненная, по тактам задержки чтения, метаинформация. Можно использовать для разделения чтения с логических устройств. Если не нужна, то отбросить Цитата Нашёл даташит на него, но сходу разобраться тяжело. Что такое DMA - представление имею, но реализовывать не приходилось; по ощущению - не факт, что в актуальной разработке оно понадобится. А что вообще порекомендуете посмотреть по теме внешней динамической памяти и использования её в проектах без привязки к процессорным ядрам, шине и т. д.? И - то Altera; у Xilinx, судя по результатам поиска, термин "sgdma" используется только в контексте сетевых интерфейсов. Scatter-Gather DMA это DMA, работающий по списку : адрес - количество данных. Т.е. формируется список, запускается чтение/запись, по ходу освобождения дискрипторов список может пополняться. Но это для процессорных систем. Для систем без проца - что-то вроде дма движка с очередью команд. Цитата На нижней его половине - ещё понятно. На верхней - не совсем. Т. е., получается, что бурст рвётся быстрее и надёжнее не по приходу новой команды (PRECHARGE), а по сигналу запрета записи? Бурст не может порваться. Сконфигурировав память, вы задали фиксированный размер бурста. Он всегда есть, просто если вы пишете данных меньше, то должны маскировать не нужные записи. При чтении, вы либо игнорируете прочитанные данные, либо маскируете их чтение (что бы сэкономить немного тактов). Цитата А какие переделки в нём были бы необходимы под DDR? У DDR другие правила сочетания команд, другие задержки, другой стык с data-path
--------------------
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|