Flip-fl0p 4 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Возник вопрос по SDR памяти в части регенерации. Вот что нарыл по поводу регенерации( http://www.dsioffe.narod.ru/mysdram/MyMicronSDRAM.htm#top ) Автоматическая регенерация используется во время нормальной работы SDRAM и аналогична регенерации CAS-BEFORE-RAS в обычной DRAM. Эта команда не постоянна, её надо подавать каждый раз, когда требуется регенерация. Перед её выполнением все активные банки должны быть деактивированы. Команда AUTO REFRESH должна быть подана не менее, чем за время tRP после команды PRECHARGE, как показано в разделе описания работы. Адресация производится встроенным контроллером регенерации. Поэтому при автоматической регенерации состояние адресных входов безразлично. 64 Мб SDRAM требует 4096 циклов автоматической регенерации каждые 64 мс (tREF) независимо от ширины слова. Выполнение команды автоматической регенерации каждые 15625 мкс необходимо и достаточно для полной регенерации всех рядов. В качестве альтернативы 4096 команд автоматической регенерации могут выполняться одним пакетом с минимальным временем цикла tRC каждые 64 мс. Совсем непонятно что такое автоматическая регенерация, и когда её включать. Какие банки она регенерирует ? Какие строки ? Так-же неясна фраза 64 Мб SDRAM требует 4096 циклов автоматической регенерации каждые 64 мс (tREF) независимо от ширины слова. Т.е каждые 64 мс мы запускаем регенерацию. Сначала одну строку, потом вторую .... и.т.д. Доходим до нуля, и снова регенерируем (Мне это напомнило движение единицы в кольцевом сдвиговом регистре). Или это не так ? Вот эта фраза совсем непонятна В качестве альтернативы 4096 команд автоматической регенерации могут выполняться одним пакетом с минимальным временем цикла tRC каждые 64 мс. Можете помочь разобраться ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Den64 0 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Лучше читать с первоисточника. Читайте лучше даташит к вашей микросхеме памяти и апноты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Совсем непонятно что такое автоматическая регенерация, и когда её включать. Какие банки она регенерирует ? Какие строки ? Чтобы её включить (если речь идёт о SDRAM подключенной к МК) достаточно в контроллере внешней памяти МК прописать период регенерации. Ну по-крайней мере для LPC1788 это справедливо. Ну и остальные параметры правильно проинитить. Дальше контроллер всё делает сам. Т.е каждые 64 мс мы запускаем регенерацию. Сначала одну строку, потом вторую .... и.т.д. Доходим до нуля, и снова регенерируем (Мне это напомнило движение единицы в кольцевом сдвиговом регистре). Или это не так ? Нет, не так. 64мс - это время, за которое весь чип должен быть регенерирован. Т.е. - если в чипе 8192 строк, то период регенерации должен быть <= 64мс/8192. Хотя в реальности чип держит данные без регенерации гораздо дольше чем 64мс. Вот эта фраза совсем непонятна А что непонятного? При чтении данных они одновременно и регенерируются. Т.е. - можно не включать автоматическую регенерацию силами контроллера памяти, а просто программно как минимум раз в 64мс считать данные из всех строк чипа. Именно поэтому в некоторых областях применения памяти автоматическую регенерацию не делают, например - для видеопамяти, так как она и так вся не менее чем раз за один кадр считывается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Лучше читать с первоисточника. Читайте лучше даташит к вашей микросхеме памяти и апноты. Да я читал первоисточник. Там то-же самое написано, только на английском. Мне бы разобраться с этими командами. Чтобы меня навели на мысль, подсказали, где я туплю. Смысл команды мне ясен - подзарядить конденсаторы. А вот как это правильно делать я не понял. Просто в datashit'е есть картинка как это делать. В то-же время есть другое требования что время обновления 4096 строк 64 мс. Вот я и пытаюсь понять как происходит рефреш. Зачем нужны эти два требования. Что будет если во время обновления строки туда писать/читать данные. В datashit'е я ответов на эти вопросы не увидел. Чтобы её включить (если речь идёт о SDRAM подключенной к МК) достаточно в контроллере внешней памяти МК прописать период регенерации. Ну по-крайней мере для LPC1788 это справедливо. Ну и остальные параметры правильно проинитить. Дальше контроллер всё делает сам. Нет, не так. 64мс - это время, за которое весь чип должен быть регенерирован. Т.е. - если в чипе 8192 строк, то период регенерации должен быть <= 64мс/8192. Хотя в реальности чип держит данные без регенерации гораздо дольше чем 64мс. А что непонятного? При чтении данных они одновременно и регенерируются. Т.е. - можно не включать автоматическую регенерацию силами контроллера памяти, а просто программно как минимум раз в 64мс считать данные из всех строк чипа. Именно поэтому в некоторых областях применения памяти автоматическую регенерацию не делают, например - для видеопамяти, так как она и так вся не менее чем раз за один кадр считывается. Меня вот это вот и смущает то период регенерации должен быть <= 64мс/8192. Как я понял, регенерация происходит построчно. В этом случае при таком периоде у нас получиться, что как только мы подзаридили последнюю строку у нас прошло 64 мс. И настало время снова регенирировать первую строку. Тогда зачем дана картинка ? (выложил сообщением ранее). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Как я понял, регенерация происходит построчно. В этом случае при таком периоде у нас получиться, что как только мы подзаридили последнюю строку у нас прошло 64 мс. И настало время снова регенирировать первую строку. Тогда зачем дана картинка ? (выложил сообщением ранее). 64 мс (или менее) должно быть не между последней строкой и первой, а между первой и снова первой (в след. цикле регенерации). За 64мс все строки должны быть регенерированы. А зачем Вам это надо? Контроллер SDRAM разрабатываете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 19 сентября, 2016 Опубликовано 19 сентября, 2016 (изменено) · Жалоба 64 мс (или менее) должно быть не между последней строкой и первой, а между первой и снова первой (в след. цикле регенерации). За 64мс все строки должны быть регенерированы. А зачем Вам это надо? Контроллер SDRAM разрабатываете? Да. Я пытаюсь сделать собственный SDRAM контроллер. Хочу организовать фреймбуфер для LVDS матрицы. Знаю, что есть готовые варианты контроллеров. Но я хочу научиться , а не брать готовое. Так у нас и получается что регенерация выглядит как-будто единица "бегает" по кольцевому сдвиговому регистру. 0001 0010 0100 1000 0001 Период регенерации каждой строки расположенному по конкретному адресу получается 64 мs. Как я понял надо каждые 64мс/8192 выдавать сигнал регенерации. А встроенный контроллер уже сам будет выбирать строки. Так опять же накой фиг нужна картинка, выложенная мной ? Или она говорит лишь о минимальном времени регенерации и о том как должна выглядеть команда авто-регенерации ? 1. После команды PRECHARGE 2. Подождали время TRP 3. Выдали команду AUTO REFRESH 4. Подождали время TRFC 5. Выдали команду AUTO REFRESH 6. Подождали время TRFC 7. Можно работать со строкой И что делать если строка в которую я читаю\пишу данные выбрана контролером для регенерации. Как я узнаю, что контроллер в это время работает со строкой ? Изменено 19 сентября, 2016 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Период регенерации каждой строки расположенному по конкретному адресу получается 64 мs. Как я понял надо каждые 64мс/8192 выдавать сигнал регенерации. А встроенный контроллер уже сам будет выбирать строки. Так опять же накой фиг нужна картинка, выложенная мной ? Или она говорит лишь о минимальном времени регенерации и о том как должна выглядеть команда авто-регенерации ? Ну да - не более 64мс. Контроллер SDRAM просто выдаёт сигнал авторегенерации (определённый набор сигналов RAS,CAS,CS,WE,CKE). Номер регенерируемой строки SDRAM получает из внутреннего своего счётчика, который после инкрементируется. И что делать если строка в которую я читаю\пишу данные выбрана контролером для регенерации. Как я узнаю, что контроллер в это время работает со строкой ? Что значит "я пишу"? Все операции производит контроллер SDRAM. Он и читает и пишет и сигналы авторегенерации выдаёт. Если процессор запрашивает доступ к SDRAM (через контроллер), то на это время все циклы авторегенерации могут например откладываться, накапливаясь где-то, а когда будет интервал простоя в запросах CPU, в это время контроллер может все эти задержанные авторефреши быстро и провести. А можно и не задерживать рефреши, а задерживать обслуживание запросов CPU на время авторефреша - тут воля Ваша как реализовать, раз Вы сами и делаете этот контроллер. Можете вообще пакетно один раз за 64 мс сразу все строки регенерировать, приостановив нормальный обмен на это время. Можно даже учесть алгоритм работы ПО с этой памятью и не обновлять те строки, которые явно должны быть считаны CPU за время 64мс - сэкономить таким образом на бюджете времени SDRAM. А ещё можно использовать Self Refresh. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба Ну да - не более 64мс. Контроллер SDRAM просто выдаёт сигнал авторегенерации (определённый набор сигналов RAS,CAS,CS,WE,CKE). Номер регенерируемой строки SDRAM получает из внутреннего своего счётчика, который после инкрементируется. Что значит "я пишу"? Все операции производит контроллер SDRAM. Он и читает и пишет и сигналы авторегенерации выдаёт. Если процессор запрашивает доступ к SDRAM (через контроллер), то на это время все циклы авторегенерации могут например откладываться, накапливаясь где-то, а когда будет интервал простоя в запросах CPU, в это время контроллер может все эти задержанные авторефреши быстро и провести. А можно и не задерживать рефреши, а задерживать обслуживание запросов CPU на время авторефреша - тут воля Ваша как реализовать, раз Вы сами и делаете этот контроллер. Можете вообще пакетно один раз за 64 мс сразу все строки регенерировать, приостановив нормальный обмен на это время. Можно даже учесть алгоритм работы ПО с этой памятью и не обновлять те строки, которые явно должны быть считаны CPU за время 64мс - сэкономить таким образом на бюджете времени SDRAM. А ещё можно использовать Self Refresh. А можно поподробнее поведать про режим пакетной регенерации в двух словах ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба А можно поподробнее поведать про режим пакетной регенерации в двух словах ? Один раз за период не более 64мс делаете NR (NR - число строк) последовательных чтений с шагом, определяемым организацией карты адресов чипа. Но это для регенерации силами внешнего Bus Master-а, обращающегося к памяти через контроллер SDRAM. Если силами контроллера SDRAM, то лучше NR раз подать команду автоматической регенерации. PS: Вы задаёте вопросы, ответы на которые очевидны. Значит не читали вообще никаких док по работе SDRAM. Поищите в инете - таких док полно и ознакомьтесь хотя-бы с базовыми понятиями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Один раз за период не более 64мс делаете NR (NR - число строк) последовательных чтений с шагом, определяемым организацией карты адресов чипа. Но это для регенерации силами внешнего Bus Master-а, обращающегося к памяти через контроллер SDRAM. Если силами контроллера SDRAM, то лучше NR раз подать команду автоматической регенерации. PS: Вы задаёте вопросы, ответы на которые очевидны. Значит не читали вообще никаких док по работе SDRAM. Поищите в инете - таких док полно и ознакомьтесь хотя-бы с базовыми понятиями. Спасибо ! PS. Я честно искал информацию по работе с SDRAM памятью. Но нарыл информации недостаточно, чтобы получить ответы на свои вопросы. То что я нарыл почти всё на английском. У меня с ним беда (надеюсь временная). Поэтому обратился за помощью к знающим людям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Прикладываю сюда достаточно хорошие доки по операциям SDRAM. Они конечно на англ. Но вроде и на русском встречал много инфы по SDRAM в сети. SDRAM_timing.pdf sdram_operation_timing.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба PS. Я честно искал информацию по работе с SDRAM памятью. Но нарыл информации недостаточно, чтобы получить ответы на свои вопросы. То что я нарыл почти всё на английском. У меня с ним беда (надеюсь временная). Поэтому обратился за помощью к знающим людям. Я думаю, что это просто треп ленивого... Регенерацию динамической памяти можно найти в любом учебнике и студенты это должны учить... В конце концов можно взять описание любой отечественной микросхемы начиная с 30-ти летней давности... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Регенерацию динамической памяти можно найти в любом учебнике и студенты это должны учить... В конце концов можно взять описание любой отечественной микросхемы начиная с 30-ти летней давности... Согласен. Набираешь в гугле - и кучу ссылок даёт, только отсеивай. В том числе и на русском. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 сентября, 2016 Опубликовано 20 сентября, 2016 (изменено) · Жалоба Я думаю, что это просто треп ленивого... Регенерацию динамической памяти можно найти в любом учебнике и студенты это должны учить... В конце концов можно взять описание любой отечественной микросхемы начиная с 30-ти летней давности... К моему большому сожалению Вы не правы. Студентов этому не учат(их вообще мало чему учат...) Я учился в достаточно хорошем институте (ГУАП). Даже окончил его с красным дипломом. Но к сожалению я понимаю, что по сути я почти за 5 лет учёбы практически ничему не научился, и по факту мой диплом ни о чем не говорит. То, что я читаю в книгах по ПЛИС, схемотехнике, читаю на форумах, нам даже не говорили. Максимум что нам дали - это основы AHDL( совсем базовый уровень). Никаких интерфейсов, нам не давали за 5 лет обучения. Как ни странно, но большую часть учебного времени занимали гуманитарные предметы, хотя специальность техническая. Вот и приходится всё изучать с нуля самому в свободное от работы время. Изменено 20 сентября, 2016 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Да. Я пытаюсь сделать собственный SDRAM контроллер. Хочу организовать фреймбуфер для LVDS матрицы.Я правильно понимаю, что ваш контролер будет постоянно сканировать SDRAM и выдывать ее содержимое в LVDS матрицу? Если это так, то регенерация вам возможно вообще не понадобится (если правильно расположить данные в SDRAM) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться