|
Вопрос по регенерации в SDRAM |
|
|
|
Jan 13 2014, 12:29
|
Группа: Новичок
Сообщений: 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, да и управляющий автомат усложнится в разы.
Спасибо заранее.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 25)
|
Jan 14 2014, 08:13
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(des00 @ Jan 14 2014, 06:32)  Вопро тоже интересен, всегда считал что чтение из памяти разрушающее (разряжаются емкости затворов транзиторов) и их перезаряжают как раз при акивации банка. Если посмотреть на электрическую схему ячейки классической DRAM, их перезаряжают именно при чтении - считывание совмещается с последующей записью того, что считалось. PRECHARGE по электрической схеме классической DRAM - заряжает емкости всех линии выборки строк в состояние "лог.1" - получается состояние "ни одна не выбрана", активация - разряжает в "0" емкость нужной линии выборки строк из предварительно заряженных по precharge, но ни чтение, ни запись (и вообще линии выборки столбцов) не активируются. так что я еще поверю, что регенерация не нужна, если в пределах этих 64 мс (tREFI) происходит чтение ВСЕХ ЯЧЕЕК, или запись ВСЕХ ЯЧЕЕК, но вот в то, что precharge или активация регенерирует, я не верю.
|
|
|
|
|
Jan 15 2014, 07:51
|
Группа: Новичок
Сообщений: 4
Регистрация: 13-01-14
Пользователь №: 80 008

|
Спасибо за обнадеживающие ответы. Буду пробовать в железе. По итогам отпишусь.
Смущают, конечно, слова "must refresh every 64 ms" в даташите.
|
|
|
|
|
Jan 16 2014, 05:03
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 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.
--------------------
|
|
|
|
|
Jan 16 2014, 07:31
|
Группа: Новичок
Сообщений: 4
Регистрация: 13-01-14
Пользователь №: 80 008

|
Память 100MHz, поток - 100MHz. Нужно писать каждый такт. Рефреш съест 4 такта, поток прервется. За то и бьемся. Чтоб пропуска не было нужно вводить FIFO и поднимать частоту памяти.
|
|
|
|
|
Jan 16 2014, 10:19
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jan 16 2014, 11:29
|
Группа: Новичок
Сообщений: 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 - во втором начинается активация. И т.д. Причем, строка+банк - в младших разрядах. Вначале перебираются банки и строки, потом столбцы. Следовательно, гарантировать перебор строк можно.
|
|
|
|
|
Jan 16 2014, 12:59
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(SM @ Jan 16 2014, 15:52)  Это само собой, безоговорочно, если открыл строку - закрой за собой. Ее предзарядить надо, чтобы потом открыть заново. Даже время есть - по истечение которого строка обязательно должна быть предзаряжена (tRAS имеет и min, и max) Я думаю, ограничение максимального времени до предзарядки связано с тем, что буфер, временно хранящий открытую строку, является динамическим, и через некоторое время разряжается, как и основная матрица. Кстати, я тоже экспериментировал с последовательным доступом без рефреша на DDR2, и всё нормально работало.
|
|
|
|
|
Jan 16 2014, 13:19
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Timmy @ Jan 16 2014, 16:59)  Кстати, я тоже экспериментировал с последовательным доступом без рефреша на DDR2, и всё нормально работало. В общем, тут все просто - если от записи в ячейку до считывания из нее всегда проходит времени меньше, чем Trefi * 8 (на сколько я помню, можно запостить подряд до 8 команд рефреша, значит реальное время хранения Trefi*8), то и регенерировать смысла нет никакого вообще. PS странно бы иметь динамический буфер, какой смысл там экономить то площадь.... По классической схеме там именно динамическая линия выборки, и динамический усилитель считывания.
|
|
|
|
|
Feb 14 2014, 13:37
|
Участник

Группа: Участник
Сообщений: 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 мкс творишь с данными что хочешь? В первый раз с динамической памятью разбираюсь, так что наставьте на верный путь)
|
|
|
|
|
Feb 17 2014, 12:24
|
Участник

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

|
Я правильно понимаю, что эта опция нужна, когда априори известно, что в течении следующих N*tREFI не будут выполняться никакие другие команды? Иначе могут возникнуть коллизии. А если, например, мне необходимо конвеерно считывать или записывать данные то нужно через каждые tREFI выполнять регенерацию.
|
|
|
|
|
Feb 17 2014, 12:35
|
Гуру
     
Группа: Свой
Сообщений: 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, поэтому их и можно подряд делать... Но это догадки, ничем не подтвержденные.
|
|
|
|
|
Mar 3 2014, 09:35
|
Участник

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

|
У моей микросхемы всего 2 банка. Адреса банков двухбитные. Что-то ни в даташите, ни в JESD не нашел информации о том, какой адрес для первого банка, а какой для второго. Проверять методом тыка?
|
|
|
|
|
Mar 3 2014, 10:04
|
Участник

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

|
Infineon HYB25D256160BT-7F
|
|
|
|
|
Mar 3 2014, 10:33
|
Участник

Группа: Участник
Сообщений: 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 это не два, а четыре! Точно  а я почему-то был в полной уверенности, что два, и еще удивлялся почему в JESD такое число банков отсутствует. Прошу прощенья за затуп. Спасибо
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|