Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по регенерации в SDRAM
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Geymur
Здравствуйте,
Так ли необходимо проводить циклы автоматической регенерации строк SDRAM каждые 64мс если система гарантирует корректное обращение к каждой строке (по записи или чтению) за меньшее время ? Помнится, для FP DRAM такой вопрос не стоял. Достаточно было простого перебора строк (RoR). В документации на микросхему предписывается обязательное проведение циклов регенерации.

Поясню ситуацию. Делаю кольцевой буфер на SDRAM от Micron. Эти приборы поддерживают независимую работу всех 4 банков (не закрывая банк можно активировать другие).
Частота следования данных - 100 МГц, частота SDRAM - 100 МГц. При условии чередования банков и длине burst 4, можно обеспечить запись информации в каждом такте. Причем, каждый burst будет направлен в следующую строку.

Все замечательно, но циклы REFRESH портят всю картину. Придется увеличивать частоту SDRAM (задействовать еще 1 PLL), городить FIFO, да и управляющий автомат усложнится в разы.

Спасибо заранее.
RobFPGA
Приветствую!

Если Вы гарантировано будете рефрешить строки своими обращениями в требуемое время то
специально выполнять цикл REFRESH в этом случае не нужно.
Однако Вы должны выполнить полный цикл обращения ко всем строкам - то есть открыть ничего_не_делать|записать|прочитать и закрыть поскольку рефреш происходить при закрытии строки.

Успехов! Rob.
des00
REFRESH = ACT(ba, rowa) + PRECHARGE(ba). если период обращения к строке меньше 64мс и строки перебираются все, то забить как и советовал RobFPGA sm.gif
SM
Цитата(RobFPGA @ Jan 13 2014, 19:25) *
поскольку рефреш происходить при закрытии строки.


А это верно для всех типов SDRAM? DDR2 например? Откуда информация (вроде в JESD такого нет)?
des00
Цитата(SM @ Jan 13 2014, 10:46) *
А это верно для всех типов SDRAM? DDR2 например? Откуда информация (вроде в JESD такого нет)?

Вопро тоже интересен, всегда считал что чтение из памяти разрушающее (разряжаются емкости затворов транзиторов) и их перезаряжают как раз при акивации банка.
SM
Цитата(des00 @ Jan 14 2014, 06:32) *
Вопро тоже интересен, всегда считал что чтение из памяти разрушающее (разряжаются емкости затворов транзиторов) и их перезаряжают как раз при акивации банка.


Если посмотреть на электрическую схему ячейки классической DRAM, их перезаряжают именно при чтении - считывание совмещается с последующей записью того, что считалось. PRECHARGE по электрической схеме классической DRAM - заряжает емкости всех линии выборки строк в состояние "лог.1" - получается состояние "ни одна не выбрана", активация - разряжает в "0" емкость нужной линии выборки строк из предварительно заряженных по precharge, но ни чтение, ни запись (и вообще линии выборки столбцов) не активируются.

так что я еще поверю, что регенерация не нужна, если в пределах этих 64 мс (tREFI) происходит чтение ВСЕХ ЯЧЕЕК, или запись ВСЕХ ЯЧЕЕК, но вот в то, что precharge или активация регенерирует, я не верю.
Geymur
Спасибо за обнадеживающие ответы. Буду пробовать в железе. По итогам отпишусь.

Смущают, конечно, слова "must refresh every 64 ms" в даташите.
Golikov A.
помню когда-то давно разбирался с ДДР контроллером тексавского ДСПешника, сейчас дословно не помню, но помниться что там было описаны пропуски рефрешей каких то областей (колонок рядов) в случае обращения в них, только вот не помню на чтение или на запись. То есть тот контроллер рефрешил весь ддр только в случае отсутствия обращений заданное время, а так рефрешил только выборочно области.
Надеюсь я не наврал с воспоминаниямиsm.gif
des00
Цитата(SM @ Jan 14 2014, 03:13) *
Если посмотреть на электрическую схему ячейки классической DRAM, их перезаряжают именно при чтении - считывание совмещается с последующей записью того, что считалось. PRECHARGE по электрической схеме классической DRAM - заряжает емкости всех линии выборки строк в состояние "лог.1" - получается состояние "ни одна не выбрана", активация - разряжает в "0" емкость нужной линии выборки строк из предварительно заряженных по precharge, но ни чтение, ни запись (и вообще линии выборки столбцов) не активируются.

так что я еще поверю, что регенерация не нужна, если в пределах этих 64 мс (tREFI) происходит чтение ВСЕХ ЯЧЕЕК, или запись ВСЕХ ЯЧЕЕК, но вот в то, что precharge или активация регенерирует, я не верю.

Может быть у современной памяти другая конструкция. Что касается SDR SDRAM, у меня сложилось мнение что регенерируется сразу вся строка и при активации банка вся эта строка читается в специальный буфер (Read Data Latches) и регенерация происходит именно при активации банка. Что интересно длительность периода refresh подозрительно совпадает с длительностью последовательности команд act + pre.
Bad0512
Оффтопик :
А какой вообще может быть глобальный смысл в экономии на циклах рефреша? Если мне не изменяет память, то эти циклы жрут меньше
1% от полной скорострельности памяти. Сама машина по вставке этих циклов - не сильно сложная.
За что в таком случае бьёмся-то?
Geymur
Память 100MHz, поток - 100MHz. Нужно писать каждый такт. Рефреш съест 4 такта, поток прервется. За то и бьемся. Чтоб пропуска не было нужно вводить FIFO и поднимать частоту памяти.
Bad0512
Цитата(Geymur @ Jan 16 2014, 14:31) *
Память 100MHz, поток - 100MHz. Нужно писать каждый такт. Рефреш съест 4 такта, поток прервется. За то и бьемся. Чтоб пропуска не было нужно вводить FIFO и поднимать частоту памяти.

Не получится без фифо. Там ещё других накладных уйма.И рефреш тут - не самое страшное зло.
RobFPGA
Приветствую!

Цитата(Bad0512 @ Jan 16 2014, 11:45) *
Не получится без фифо. Там ещё других накладных уйма.И рефреш тут - не самое страшное зло.


Получится - я еще в 1999 году что-то похожее делал на max128. Типа цифрового осциллографа - быстрая потоковая запись оцифрованных данных в SDRAM, а затем медленное вычитывание через LPT порт. Открываем строку в банке (с autoprecharge) - пишем burst 4-8 слов - пока пишем открываем следующую строку в другом банке - закончили писать burst (строка закрылась автоматом) начали писать burst в следующий открытый банк ... и так конвейером по всем банкам/строкам. Ну а при медленном чтении естественно делался refresh.

2 SM, des00
Увы может и был неправ, давно это было вот и подзабыл - но то что без закрытия строки не обойтись помню точно.

Успехов! Rob.

Geymur
Цитата(RobFPGA @ Jan 16 2014, 14:19) *
Приветствую!



Получится - я еще в 1999 году что-то похожее делал на max128. Типа цифрового осциллографа - быстрая потоковая запись оцифрованных данных в SDRAM, а затем медленное вычитывание через LPT порт. Открываем строку в банке (с autoprecharge) - пишем burst 4-8 слов - пока пишем открываем следующую строку в другом банке - закончили писать burst (строка закрылась автоматом) начали писать burst в следующий открытый банк ... и так конвейером по всем банкам/строкам. Ну а при медленном чтении естественно делался refresh.

2 SM, des00
Увы может и был неправ, давно это было вот и подзабыл - но то что без закрытия строки не обойтись помню точно.

Успехов! Rob.


Спасибо, Rob на добром слове!
Думаю - должно получиться. Память поддерживает работу со всеми 4 банками одновременно. Пока пишется burst в первый банк, активируется второй. Первый закрывается и ждет Twr - во втором начинается активация. И т.д. Причем, строка+банк - в младших разрядах. Вначале перебираются банки и строки, потом столбцы. Следовательно, гарантировать перебор строк можно.
SM
Цитата(RobFPGA @ Jan 16 2014, 14:19) *
без закрытия строки не обойтись помню точно.


Это само собой, безоговорочно, если открыл строку - закрой за собой. Ее предзарядить надо, чтобы потом открыть заново. Даже время есть - по истечение которого строка обязательно должна быть предзаряжена (tRAS имеет и min, и max)
Timmy
Цитата(SM @ Jan 16 2014, 15:52) *
Это само собой, безоговорочно, если открыл строку - закрой за собой. Ее предзарядить надо, чтобы потом открыть заново. Даже время есть - по истечение которого строка обязательно должна быть предзаряжена (tRAS имеет и min, и max)

Я думаю, ограничение максимального времени до предзарядки связано с тем, что буфер, временно хранящий открытую строку, является динамическим, и через некоторое время разряжается, как и основная матрица.
Кстати, я тоже экспериментировал с последовательным доступом без рефреша на DDR2, и всё нормально работало.
SM
Цитата(Timmy @ Jan 16 2014, 16:59) *
Кстати, я тоже экспериментировал с последовательным доступом без рефреша на DDR2, и всё нормально работало.


В общем, тут все просто - если от записи в ячейку до считывания из нее всегда проходит времени меньше, чем Trefi * 8 (на сколько я помню, можно запостить подряд до 8 команд рефреша, значит реальное время хранения Trefi*8), то и регенерировать смысла нет никакого вообще.


PS
странно бы иметь динамический буфер, какой смысл там экономить то площадь.... По классической схеме там именно динамическая линия выборки, и динамический усилитель считывания.
ig_f
Не хотел создавать новую тему, так что кину вопрос здесь...
Насчет 8ми команд рефреша подряд поясните пожалуйста. Память другая (INFINEON HYB25D25616BС]), но в доке есть подобное:

The refresh addressing is generated by the internal refresh controller. This makes the address bits “Don’t
Care” during an Auto Refresh command. The 256Mb DDR SDRAM requires Auto Refresh cycles at an aver-
age periodic interval of 7.8 us (maximum).
To allow for improved efficiency in scheduling and switching between tasks, some flexibility in the absolute
refresh interval is provided. A maximum of eight Auto Refresh commands can be posted in the system,
meaning that the maximum absolute interval between any Auto Refresh command and the next Auto Refresh
command is 9 * 7.8 us (70.2 us). This maximum absolute interval is short enough to allow for DLL updates
internal to the DDR SDRAM to be restricted to Auto Refresh cycles, without allowing too much drift in t AC
between updates.

Первый и второй абзац как-то не стыкуются...
Я слабо понял, как это трактовать и как использовать. То есть даешь команду авторефреш и далее в течении 70.2 мкс творишь с данными что хочешь?
В первый раз с динамической памятью разбираюсь, так что наставьте на верный путь)
SM
Цитата(ig_f @ Feb 14 2014, 17:37) *
Насчет 8ми команд рефреша подряд поясните пожалуйста.


Об этом в JESD написано...

When the refresh cycle has completed, all banks of the DDR2 SDRAM will be in the precharged (idle) state. A delay between the Refresh command (REF) and the next Activate command or subsequent refresh command must be greater than or equal to the Refresh cycle time (tRFC).
To allow for improved efficiency in scheduling and switching between tasks, some flexibility in the absolute refresh interval is provided. A maximum of eight Refresh commands can be posted to any given DDR2 SDRAM, meaning that the maximum absolute interval between any Refresh command and the next Refresh command is 9 * tREFI.


Можете давать одну команду регенерации один раз в tREFI, а можете подряд напихать ей в конвейер до 8-ми регенераций с интервалом tRFC, а следующую пачку регенераций давать через N*tREFI.
ig_f
Я правильно понимаю, что эта опция нужна, когда априори известно, что в течении следующих N*tREFI не будут выполняться никакие другие команды? Иначе могут возникнуть коллизии. А если, например, мне необходимо конвеерно считывать или записывать данные то нужно через каждые tREFI выполнять регенерацию.
SM
Цитата(ig_f @ Feb 17 2014, 16:24) *
Я правильно понимаю, что эта опция нужна, когда априори известно, что в течении следующих N*tREFI не будут выполняться никакие другие команды?


Наоборот, если напихать в SDRAM 8 штук рефрешей подряд, то у Вас потом будет N*tREFI времени, чтобы делать что угодно, и не делать рефрешей. А если дать один рефреш, то и времени у Вас будет 1 tREFI.

Я смутно догадываюсь, что один RFSH регенирирует одну строку одного банка, определяемый каким-то счетчиком внутренним, а банков - 8, поэтому их и можно подряд делать... Но это догадки, ничем не подтвержденные.
ig_f
У моей микросхемы всего 2 банка. Адреса банков двухбитные. Что-то ни в даташите, ни в JESD не нашел информации о том, какой адрес для первого банка, а какой для второго. Проверять методом тыка?
SM
А что за микросхема?
ig_f
Infineon HYB25D256160BT-7F
SM
вообще то первые слова в даташите:

The 256Mb DDR SDRAM is a high-speed CMOS, dynamic random-access memory containing 268,435,456 bits. It is internally configured as a quad-bank DRAM

quad это не два, а четыре!
ig_f
Цитата(SM @ Mar 3 2014, 14:18) *
вообще то первые слова в даташите:

The 256Mb DDR SDRAM is a high-speed CMOS, dynamic random-access memory containing 268,435,456 bits. It is internally configured as a quad-bank DRAM

quad это не два, а четыре!

Точно biggrin.gif а я почему-то был в полной уверенности, что два, и еще удивлялся почему в JESD такое число банков отсутствует. Прошу прощенья за затуп. laughing.gif
Спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.