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

Вопрос по работе с SDRAM

В своих разработках все время использовал статическую память – микросхемы довольно доступны, написание контроллеров довольно несложное и т.д. Сейчас широко используется более быстрая, более дешевая и намного больших объемов динамическая память. Порылся в сети, нашел кучу девайсов на которых установлена SDRAM в том числе и DDR в том числе и на DIMM. Порылся еще, нашел кучу исходников корок контроллеров, которые якобы реально работают. Сложилось ощущение что с этим уже давно и успешно работают. В связи с этим имеется вопрос.

 

Есть плата на которой установлено АЦП, статическая память и плисина. В плисине работает автомат который забирает данные с АЦП и пишет в память. Частота работы АЦП и памяти 100 МГц. Если переделать данную плату для установки динамической памяти, допустим скорость работы памяти все те же 100 МГц, сможет ли данная система писать в память непрерывный поток данных с частотой 100 МГц. Позволяет ли это архитектура самой динамической памяти. Может кто подскачет хороший материальчик почитать.

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


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

В общем случае, не позволит. Потому как любая динамическая память требует

1. Активация банка

2. Пауза

3. Команда

4. если запись, то паузы нет, если чтение, то пауза

5. пауза, пока последний записанный запишется.

6. Закрытие банка. (precharge)

 

кроме этого, обязательно каждые 7 микросекунд надо давать команду REFRESH, после чего некоторое время вообще ничего делать нельзя.

 

Конечно, можно использовать AUTOPRECHARGE, но он не работает на FULL PAGE MODE, а именно его надо использовать, если хочется максимально "выжать" производительность.

 

Но! МОжно использовать ширину шины данных 8, 16, 32 бита, также 64. Это позволит достичь заданной производительности. Но с увеличением ширины данных появляются другие проблемы - где брать клоки для ИС памяти и тд. Так что пути есть, но какой выбрать решить можете только вы сами.

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


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

В общем случае, не позволит.

В общем случае, конечно, позволит.

 

Во первых, все современые плисины, наверное, имеют встроенную память которую можно использовать для блочной буферизации. И при таком подходе у меня в камере на одной DDR SDRAM микросхеме (16M x 16) при тактовой частоте 125МГц получается в среднем около 470МБ/сек (из 500 "теоретических) - но там очень слоажная организация данных и контроллер облуживает 8 конкурентных каналов доступа одновременно.

 

С другой стороны, для такой простой задачи, как запись одного канала последовательных данных можно даже обойтись и без буфера - достаточно использовать банки с перекрытием.

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


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

С другой стороны, для такой простой задачи, как запись одного канала последовательных данных можно даже обойтись и без буфера - достаточно использовать банки с перекрытием.

 

 

Очень интересно!

И как можно обойтись без буфера?

И нельзя ли пояснить, что значит "использовать банки с перекрытием"?

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


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

Очень интересно!

И как можно обойтись без буфера?

И нельзя ли пояснить, что значит "использовать  банки с перекрытием"?

 

Микросхемы SDRAM имеют 4 банка, и пока идет обмен с одним из них - 3 других могут отрабатывать активацию и закрытие. В DDR SDRAM команды поступают со скоростью тактов, хотя обмен данными производится вдвое быстрее.

Так вот при чтении, например, не нужно подавать команду чтения в каждом такте - при исвользовании burst=8, при непрерывном чтении такая команда нужна только каждый 4-й такт, данные будут поступать все равно. Так вот "дырки" по три такта можно использовать для подготовки других банков, чтобы поток данных шел непрерывно.

На приложенной картинке показано, как у меня используются банки при чтении и записи токенов в процессе видеокомпрессии - там последовательность записи и чтения почти "ортогональна" - данные в память идут внутри по номерам коэффициентов преобразования DCT, снаружи - по блокам в макроблоке и совсем снаружи - по макроблокам, а при чтении - все наоборот - номер DCT - это самый внешний цикл. В этом примере "дырок" при записи нет, т.к. данные идут не подряд, а в чтении есть и использованы - там адреса доступа последовательны,

 

В этом варианте используется блочный доступ с буфером, так как необходимо обеспечить квази-одновременную работу многих каналов. Для одного канала можно аналогично сделать полностью непрерывную последовательность.

fig_5.pdf

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


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

И как можно обойтись без буфера?

 

Можно, но лучше не надо. Головной боли будет меньше.

 

И нельзя ли пояснить, что значит "использовать банки с перекрытием"?

 

Есть такое понятие - интерлив, или чередование по-русски. Смысл в том, что пишутся данные в пакетном режиме в одну микросхему на полную длину строки. Замечу только, что надо выбирать СДРАМ умеющий записывать в пакете полную строку. У самсунгов и хайниксов в этом плане всё в порядке. Другая инициализируется точно вовремя, для того чтобы запись в первую ячейку второй микросхемы была в следующем такте после последней записи в первую микросхему. Вообще говоря обычно СДРАМ имеет четырёхбанковую архитектуру. Если вам достаточно общей длины пакета непрерывной записи в 2000 отсчетов (четыре банка на 512 слов ), то можно обойтись одной микросхемой. 512 слов - это длина строки для 128 и более мегабитных чипов 16-ти битной разрядности. Если чип 8-ми битной организации - строка вдвое длинней. Хотя про это пишут в даташитах ;). Банки тоже можно чередовать для непрерывной записи, но когда запишите последний, то увы неизбежен пречардж, рефреш и ждать время для новой инициализации процесса записи, если читать не надо никогда вообще.

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


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

Замечу только, что надо выбирать СДРАМ умеющий записывать в пакете полную строку.

 

Совершенно не обязательно, burst=8 (4 такта у DDR SDRAM) вполне хватает для организации перекрытия (см картинку выше).

 

  Банки тоже можно чередовать для непрерывной записи, но когда запишите последний, то увы  неизбежен пречардж, рефреш и ждать время для новой инициализации процесса записи, если читать не надо никогда вообще.

 

Почему? После банка 3, например, может идти опять банк 0, а precharge и activate вполне "прячутся" во время обмена с активным банком.

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


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

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

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

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

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

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

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

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

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

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