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

Помогите определиться с памятью - SRAM или DRAM

Господа, приходилось играться с памятью SRAM - там все просто - адресные входы, входи данных, простенькое управление. Да вот понадобилось мне 2-4 мегабайта оперативной памяти, а цена кусается сильно. В то время как DRAM yf 128 МБ можно купить за 120 рублей.

 

В чем принципиальная разница между этими двумя видами памяти я знаю, а вот у управлении? Я слышал что в ARM есть интерфейс к DRAM, возникает ощущение что общение с ней сложное. ВОзможно ли его реализовать на AVR? Если я использую параллельную DRAM c выводом данных по 8 бит - сколько машинных тактов мне понадобится на кадлый такой байт?

 

Почитал описание http://www.terraelectronica.ru/pdf/HSI/HY5...1620FTP-H-C.pdf одной DRAM -вроде ничего сложного только добавились CAS RAS сигналы что кстати упрощает задачу - меньше ножек контроллера требуется, но требуется больше тактов для выборки данных чем в SRAM.

 

Задача моя - загонять данные параллельным потоком в драйвер светодиодов - сдвиговые регистры. имеется 8 рядов драйверов вот и хочу использовтья память c организацией x8. ДОпустиме время заполнения драйверов не более 139 мкс. с SRAM по расчету получается 12 мкс. Намного ли меньше будет скорость?

 

В общем просветите меня, на практике - в каких ситуциях лучше SRAM, в каких DRAM? В чем их преимущества и недостатки?

 

Спасибо.

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


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

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

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


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

Зачем Вам ПЛИС? Например, SDRAM вполне ногодрыгом окучивается - http://tinyvga.com/avr-sdram-vga

 

Да и работать с SDRAM проще, чем с DRAM, а скорости выдачи потока получаются байт на такт.

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


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

эээ я думал DRAM и SDRAM радикально не отличаются...

А SDRAM нужно постоянно регенерировать? ТО есть пока к памяти нет обращения и контроллер чем-то еще может заниматься?

 

Вот это мне подойдет? http://www.alldatasheet.com/datasheet-pdf/...K4S161622D.html

 

хм... так это вместо того, чтобы покупать микросхемы у поставщика, можно за бесценок куить дешевые компьютерные sdram и повыдергивать оттуда микросхемы?

Изменено пользователем zheka

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


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

А SDRAM нужно постоянно регенерировать?

 

Нужно. Как и DRAM.

хм... так это вместо того, чтобы покупать микросхемы у поставщика, можно за бесценок куить дешевые компьютерные sdram и повыдергивать оттуда микросхемы?

 

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

 

Хотя, честно говоря, отправился на гадюшник только из за того, что у любимого поставщика на складе закончились, две недели ждать - не стоит.

 

Поправка. У SDRAM есть режим саморегенерации без вмешательства собственно контроллера. Но только в этом режиме к ней доступа нет. Т.е. режим можно включить, а когда нужен будет доступ - выключить.

Ну и не забывайте, что доступ тоже регенерирует выбранный ряд. Подробности - в даташитах.

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


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

А вы лично на АВР СДРАМ гоняли?

По поводу саморегенерации - значит у меня есть период 139 мкс когда микросхема должна простаивать. Дальше из нее читается 120 байт данных и опять простой. Частота камня 16 МГЦ. ПОлучится?

 

 

Как я понял, чтение и запись сложны. ТО есть снала нужно открыть указанный адрес, а потом считать или записать. Как при этом за один такт читается один байт мне непонятно.

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


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

Хм... почитал, понял пока не все, но не вижу причин, чтобы это не работало на AVR. К тому же скорость мне нужна в 10 раз меньшая, чем можно выжать из SDRAM.

DpInRock, скажите, ваши слова точно относились именно к DRAM?

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


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

Как я понял, чтение и запись сложны. ТО есть снала нужно открыть указанный адрес, а потом считать или записать.

 

Вся динамическая память построена в виде матрицы - ряды (row) и столбцы (column). Когда начинается цикл чтения или записи, то происходит активация нужного ряда. Затем Вы можете в пределах активированного ряда перебирать столбцы без повторной активации. В пределах одного ряда можно перебирать 512 адресов (стандартный размер одного ряда для байтовой ширины микросхемы). Если надо больше, то делается активация нескольких банков и становится доступно 512*n адресов, где n - количество банков (обычно 4 банка).

 

Как при этом за один такт читается один байт мне непонятно.

Ну если CLK SDRAM посадить на CLK процессора, то за один такт вполне можно перебирать адреса. Значит, скорость обновления информации на шине данных будет байт за такт.

 

Правда, перебирать адреса в больших количествах (больше, чем 32 разных адреса) за один такт получится только на процах, которые по OUT в PINx инвертируют состояние ножки. Остальным светит 2 такта на изменение адреса.

 

Проект, на который я Вам дал ссылку, использует вообще burst-режим для чтения данных, так что без вмешательства процессора все получается, почти DMA :) Но, размер такого чтения не более одного ряда. Если надо больше 512 байт вычитать, то надо извращаться с ручной генерацией адресов.

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


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

Ну если CLK SDRAM посадить на CLK процессора, то за один такт вполне можно перебирать адреса.

 

Я понял.... Я просто думал раньше что ряд нужно каждый раз активировать....

 

Проект, на который я Вам дал ссылку, использует вообще burst-режим для чтения данных, так что без вмешательства процессора все получается, почти DMA Но, размер такого чтения не более одного ряда. Если надо больше 512 байт вычитать, то надо извращаться с ручной генерацией адресов.

 

У меня память напрямую будет соединена с микросхемой памяти, данные в контроллер читаться не будут. Контроллер будет лишь дрыгать ногами и загонять информацию в память. К ручной генерации адресов я готов - у меня ATMEGA 32, два порта я готов под это дело отдать.

 

Правда, перебирать адреса в больших количествах (больше, чем 32 разных адреса) за один такт получится только на процах, которые по OUT в PINx инвертируют состояние ножки. Остальным светит 2 такта на изменение адреса.

 

Если честно, не въехал.... Объясните на примере ATMega32

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


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

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

 

Ну так Вам прямо просится реализация как в том проекте, с burst-режимом. Вообще контроллер будет бамбук курить - зарядили цикл и занимаетесь своим делом, по таймеру, например, остановили, потом зарядили новый. И т.д.

 

Если честно, не въехал.... Объясните на примере ATMega32

 

Смотрите, чтобы быстро менять адреса есть 2 способа - либо все возможные адреса положить в регистры (это будет максимум 32 регистра) и непосредственно выводить нужный регистр в порт, к которому прикручена шина адреса. Если имеете полотенце команд OUT, то скорость будет 1 такт на байт (время выполнения OUT). Если же надо больше, то получается минимум 2 такта

   OUT PORTx,R16
   INC R16
   OUT PORTx,R16
   INC R16
....
   OUT PORTx,R16
   INC R16
   OUT PORTx,R16

 

Итого, на смену адреса 2 такта - OUT+INC.

 

А вот если бы проц был поновее (умел по OUT PINx,Ry инвертировать биты), то можно было бы, задействовав 8 регистров (записав в них значения 1,2,4,8,16,32,64,128) и используя код Грея увеличивать адреса со скоростью 1 такт на адрес. Дело в том, что 2 соседних значения в коде Грея отличаются одним битом, следовательно, для перехода к следующему адресу достаточно изменить один бит, для чего нужно выполнить OUT в регистр PINx соответствующей маски (один из 8ми регистров).

 

Более того, в одном проекте (я его тут выкладывал), я использовал инкрементирование адреса в коде Грея для того, чтобы не было ситуаций, что одновременно переключается много линий адреса - это было сделано для снижения помех, наводимых на аналоговую часть.

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


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

Если надо больше 512 байт вычитать, то надо извращаться с ручной генерацией адресов.

 

120 байт - можно 4 раза передать, потом генерировать адрес. Да легко. Тем более burst это один байт за 1 такт я правильно понял?

 

 

А вообще - ламерский вопрос - а где взять CLK ? Допустим я буду использовать двухтактовый режим - мне нужен будет CLK для памяти и CLK/2 для драйвера. Как программно этим делом управлять, чтобы не пришлось тратить отдельный такт на инверсию CLK?

 

Чем сложнее DRAM в отличие от SDRAM, что мне советовали про нее забыть?

 

Да, и самый главный вопрос - если я буду использовать микросхемы от компьютерых б/у планок - DDR подойдет? Я читал что отличие их - удвоенная частота. Это касается только разгонных возможостей микросхемы или же есть еще нюансы?

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


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

А вообще - ламерский вопрос - а где взять CLK ? Допустим я буду использовать двухтактовый режим - мне нужен будет CLK для памяти и CLK/2 для драйвера.

 

Зачем 2 разных? Сделайте на таймере вывод CLK/2 и для драйвера, и для памяти. Таймер нужен с Output Compare и Clear on compare match. Управление выводом настраивается на переключение по сравнению, и в регистр сравнения заносится 0. Результатом будет тактовая частота, деленная на 2.

 

DDR-память тоже можно окучить, но с заметно большим геморроем.

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


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

А вообще ...

И вообще фигней Вы занимаетесь.

Вместо освоения современного контроллера, в котором задача решается автоматически десятью строчками кода, и вдобавок получаете кучу бонусов в виде быстродействия в 5-7 раз выше, память десятки мегабайт, бОльшего набора периферии, Вы пытаетесь уехать на телеге AVR.

На фоне светодиодов, их качества, механики разница в стоимости 3 доллара на электронику просто смешна.

Странно, что кризис не отмел таких энтузиастов.

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


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

Зачем 2 разных? Сделайте на таймере вывод CLK/2 и для драйвера, и для памяти.

 

Как зачем? Памяти нужно 2 клока на один байт, а в драйвер информация заносится с каждым клоком. Пустые ячейки через одну будут, или я не прав?

 

 

На фоне светодиодов, их качества, механики разница в стоимости 3 доллара на электронику просто смешна.

 

Я смету знаю лучше вас, поверьте. Есть еще ряд факторов, которые вынуждают меня решать задачу именно таким образом.

НАфига мне навороченный камень, если AVR обеспечивает быстродействие в 139/12 раз большее чем мне надо? Хватило бы ног, а их хватит.

Нафига мне сороконожка ARM, которых сейчас все-больше и больше в BGA, под которые платы делать сложновато, либо в TQFP размерами по 2 см, с кучей ненужных мне ног и функций?

Впрочем, давайте не будем об этом, ладно?

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


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

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

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

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

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

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

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

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

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

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