реклама на сайте
подробности

 
 
> Вопрос по регенерации в SDRAM
Geymur
сообщение Jan 13 2014, 12:29
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 13-01-14
Пользователь №: 80 008



Здравствуйте,
Так ли необходимо проводить циклы автоматической регенерации строк SDRAM каждые 64мс если система гарантирует корректное обращение к каждой строке (по записи или чтению) за меньшее время ? Помнится, для FP DRAM такой вопрос не стоял. Достаточно было простого перебора строк (RoR). В документации на микросхему предписывается обязательное проведение циклов регенерации.

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

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

Спасибо заранее.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 25)
RobFPGA
сообщение Jan 13 2014, 15:25
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

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

Успехов! Rob.
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 13 2014, 16:11
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



REFRESH = ACT(ba, rowa) + PRECHARGE(ba). если период обращения к строке меньше 64мс и строки перебираются все, то забить как и советовал RobFPGA sm.gif


--------------------
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 13 2014, 16:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(RobFPGA @ Jan 13 2014, 19:25) *
поскольку рефреш происходить при закрытии строки.


А это верно для всех типов SDRAM? DDR2 например? Откуда информация (вроде в JESD такого нет)?
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 14 2014, 02:32
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



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

Вопро тоже интересен, всегда считал что чтение из памяти разрушающее (разряжаются емкости затворов транзиторов) и их перезаряжают как раз при акивации банка.


--------------------
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 14 2014, 08:13
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



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


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

так что я еще поверю, что регенерация не нужна, если в пределах этих 64 мс (tREFI) происходит чтение ВСЕХ ЯЧЕЕК, или запись ВСЕХ ЯЧЕЕК, но вот в то, что precharge или активация регенерирует, я не верю.
Go to the top of the page
 
+Quote Post
Geymur
сообщение Jan 15 2014, 07:51
Сообщение #7





Группа: Новичок
Сообщений: 4
Регистрация: 13-01-14
Пользователь №: 80 008



Спасибо за обнадеживающие ответы. Буду пробовать в железе. По итогам отпишусь.

Смущают, конечно, слова "must refresh every 64 ms" в даташите.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 15 2014, 17:28
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



помню когда-то давно разбирался с ДДР контроллером тексавского ДСПешника, сейчас дословно не помню, но помниться что там было описаны пропуски рефрешей каких то областей (колонок рядов) в случае обращения в них, только вот не помню на чтение или на запись. То есть тот контроллер рефрешил весь ддр только в случае отсутствия обращений заданное время, а так рефрешил только выборочно области.
Надеюсь я не наврал с воспоминаниямиsm.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 16 2014, 05:03
Сообщение #9


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



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

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

Может быть у современной памяти другая конструкция. Что касается SDR SDRAM, у меня сложилось мнение что регенерируется сразу вся строка и при активации банка вся эта строка читается в специальный буфер (Read Data Latches) и регенерация происходит именно при активации банка. Что интересно длительность периода refresh подозрительно совпадает с длительностью последовательности команд act + pre.


--------------------
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jan 16 2014, 07:24
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Оффтопик :
А какой вообще может быть глобальный смысл в экономии на циклах рефреша? Если мне не изменяет память, то эти циклы жрут меньше
1% от полной скорострельности памяти. Сама машина по вставке этих циклов - не сильно сложная.
За что в таком случае бьёмся-то?
Go to the top of the page
 
+Quote Post
Geymur
сообщение Jan 16 2014, 07:31
Сообщение #11





Группа: Новичок
Сообщений: 4
Регистрация: 13-01-14
Пользователь №: 80 008



Память 100MHz, поток - 100MHz. Нужно писать каждый такт. Рефреш съест 4 такта, поток прервется. За то и бьемся. Чтоб пропуска не было нужно вводить FIFO и поднимать частоту памяти.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jan 16 2014, 09:45
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Geymur @ Jan 16 2014, 14:31) *
Память 100MHz, поток - 100MHz. Нужно писать каждый такт. Рефреш съест 4 такта, поток прервется. За то и бьемся. Чтоб пропуска не было нужно вводить FIFO и поднимать частоту памяти.

Не получится без фифо. Там ещё других накладных уйма.И рефреш тут - не самое страшное зло.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jan 16 2014, 10:19
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

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


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

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

Успехов! Rob.

Go to the top of the page
 
+Quote Post
Geymur
сообщение Jan 16 2014, 11:29
Сообщение #14





Группа: Новичок
Сообщений: 4
Регистрация: 13-01-14
Пользователь №: 80 008



Цитата(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 - во втором начинается активация. И т.д. Причем, строка+банк - в младших разрядах. Вначале перебираются банки и строки, потом столбцы. Следовательно, гарантировать перебор строк можно.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 16 2014, 11:52
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(RobFPGA @ Jan 16 2014, 14:19) *
без закрытия строки не обойтись помню точно.


Это само собой, безоговорочно, если открыл строку - закрой за собой. Ее предзарядить надо, чтобы потом открыть заново. Даже время есть - по истечение которого строка обязательно должна быть предзаряжена (tRAS имеет и min, и max)
Go to the top of the page
 
+Quote Post
Timmy
сообщение Jan 16 2014, 12:59
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



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

Я думаю, ограничение максимального времени до предзарядки связано с тем, что буфер, временно хранящий открытую строку, является динамическим, и через некоторое время разряжается, как и основная матрица.
Кстати, я тоже экспериментировал с последовательным доступом без рефреша на DDR2, и всё нормально работало.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 16 2014, 13:19
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



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


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


PS
странно бы иметь динамический буфер, какой смысл там экономить то площадь.... По классической схеме там именно динамическая линия выборки, и динамический усилитель считывания.
Go to the top of the page
 
+Quote Post
ig_f
сообщение Feb 14 2014, 13:37
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 18-11-11
Пользователь №: 68 381



Не хотел создавать новую тему, так что кину вопрос здесь...
Насчет 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 мкс творишь с данными что хочешь?
В первый раз с динамической памятью разбираюсь, так что наставьте на верный путь)
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 15 2014, 08:45
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(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.
Go to the top of the page
 
+Quote Post
ig_f
сообщение Feb 17 2014, 12:24
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 18-11-11
Пользователь №: 68 381



Я правильно понимаю, что эта опция нужна, когда априори известно, что в течении следующих N*tREFI не будут выполняться никакие другие команды? Иначе могут возникнуть коллизии. А если, например, мне необходимо конвеерно считывать или записывать данные то нужно через каждые tREFI выполнять регенерацию.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 17 2014, 12:35
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



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


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

Я смутно догадываюсь, что один RFSH регенирирует одну строку одного банка, определяемый каким-то счетчиком внутренним, а банков - 8, поэтому их и можно подряд делать... Но это догадки, ничем не подтвержденные.
Go to the top of the page
 
+Quote Post
ig_f
сообщение Mar 3 2014, 09:35
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 18-11-11
Пользователь №: 68 381



У моей микросхемы всего 2 банка. Адреса банков двухбитные. Что-то ни в даташите, ни в JESD не нашел информации о том, какой адрес для первого банка, а какой для второго. Проверять методом тыка?
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 3 2014, 09:38
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



А что за микросхема?
Go to the top of the page
 
+Quote Post
ig_f
сообщение Mar 3 2014, 10:04
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 18-11-11
Пользователь №: 68 381



Infineon HYB25D256160BT-7F
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 3 2014, 10:18
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



вообще то первые слова в даташите:

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 это не два, а четыре!
Go to the top of the page
 
+Quote Post
ig_f
сообщение Mar 3 2014, 10:33
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 18-11-11
Пользователь №: 68 381



Цитата(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
Спасибо
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01623 секунд с 7
ELECTRONIX ©2004-2016