Перейти к содержанию
    

Вопрос по регенерации в SDRAM

Здравствуйте,

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

 

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

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

 

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

 

Спасибо заранее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Если Вы гарантировано будете рефрешить строки своими обращениями в требуемое время то

специально выполнять цикл REFRESH в этом случае не нужно.

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

 

Успехов! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

поскольку рефреш происходить при закрытии строки.

 

А это верно для всех типов SDRAM? DDR2 например? Откуда информация (вроде в JESD такого нет)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А это верно для всех типов SDRAM? DDR2 например? Откуда информация (вроде в JESD такого нет)?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Смущают, конечно, слова "must refresh every 64 ms" в даташите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

помню когда-то давно разбирался с ДДР контроллером тексавского ДСПешника, сейчас дословно не помню, но помниться что там было описаны пропуски рефрешей каких то областей (колонок рядов) в случае обращения в них, только вот не помню на чтение или на запись. То есть тот контроллер рефрешил весь ддр только в случае отсутствия обращений заданное время, а так рефрешил только выборочно области.

Надеюсь я не наврал с воспоминаниями:)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оффтопик :

А какой вообще может быть глобальный смысл в экономии на циклах рефреша? Если мне не изменяет память, то эти циклы жрут меньше

1% от полной скорострельности памяти. Сама машина по вставке этих циклов - не сильно сложная.

За что в таком случае бьёмся-то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Память 100MHz, поток - 100MHz. Нужно писать каждый такт. Рефреш съест 4 такта, поток прервется. За то и бьемся. Чтоб пропуска не было нужно вводить FIFO и поднимать частоту памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Память 100MHz, поток - 100MHz. Нужно писать каждый такт. Рефреш съест 4 такта, поток прервется. За то и бьемся. Чтоб пропуска не было нужно вводить FIFO и поднимать частоту памяти.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

2 SM, des00

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

 

Успехов! Rob.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

 

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

 

2 SM, des00

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

 

Успехов! Rob.

 

Спасибо, Rob на добром слове!

Думаю - должно получиться. Память поддерживает работу со всеми 4 банками одновременно. Пока пишется burst в первый банк, активируется второй. Первый закрывается и ждет Twr - во втором начинается активация. И т.д. Причем, строка+банк - в младших разрядах. Вначале перебираются банки и строки, потом столбцы. Следовательно, гарантировать перебор строк можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

без закрытия строки не обойтись помню точно.

 

Это само собой, безоговорочно, если открыл строку - закрой за собой. Ее предзарядить надо, чтобы потом открыть заново. Даже время есть - по истечение которого строка обязательно должна быть предзаряжена (tRAS имеет и min, и max)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...