por msamsoniuk » 06 Out 2010 23:54
opa opa opa... SDRAM eh synchronous DRAM! nao confundir com SRAM! :/
a unica diferenca de uma SDRAM para uma DRAM boa eh apenas a existencia de clock, que permite fazer transferencias em burst com um acesso por clock em uma mesma linha de acesso. o armazenamento no array de memoria continua sendo com capacitancia parasita, o que significa que a memoria continua requerendo refresh periodico. o que melhorou foi a performance e a funcionalidade.
na epoca do proex a vida era simples pq era facil de entender e usar uma memoria DRAM. uma memoria de 64Kbit formava na verdade um array com 256 x256 elementos, assim bastava colocar em A0-7 o valor da linha desejada no array e ativar RAS. depois de um certo tempo de acesos, os 256 bits da linha eram lidos e bufferizados. na subida de RAS os 256 bits eram entao reescritos e isso corresponde a uma operacao de refresh do tipo RAS-only.
se antes de subir RAS vc colocasse o valor da coluna em A0-7 e baixasse CAS, depois de um tempo de acesso vc conseguia transferir para DO o valor dessa coluna especifica. se o pino RW estivesse baixo durante a subida de CAS, no lugar de escrever a linha inteira bufferizada (como se fosse um refresh), aquele elemento em particular enderecado em DO seria substituido pelo valor em DI e assim vc estaria fazendo nao apenas o refresh da linha inteira, como tambem a atualizacao de uma coluna especifica do array.
daih eh facil melhorar o esquema: se vc nao subir RAS nunca, vc nunca vai gravar a linha. isso significa que vc pode enderecar uma linha especifica com RAS e entao ler e escrever varias colunas nessa mesma linha, ativando e desativando varias vezes CAS. com isso vc tem o que se chama de page mode. mas vc nao pode ficar parado muito tempo, pois precisa fazer refresh de outras linhas.
surgiram varias solucoes, hidden refresh, que permite vc embutir o ciclo de refresh no proprio ciclo RAS/CAS. e vale lembrar que apesar do array ser comporto por capacitores parasitas, quando se le uma linha ela eh armazenada em estruturas estaticas, portanto eh facil adicionar logica de aceleracao e isso gerou memorias tipo static colunm, bust, pipeline burst, bank interleave, etc.
em especial, a SDRAM eh o apice desses melhoramentos, ou seja, o array de capacitores continua o mesmo, o que melhora eh a tecnologia entre o buffer de linha e o processador. e isso vai melhorando mais e mais com as memorias DDR.
entao DRAM, SDRAM, DDR e qq coisa dinamica eh tudo farinha do mesmo saco! soh muda mesmo a complexidade (e velocidade) da interface.
DRAM eh relativamente simples com uma maquina de estados... exemplo de um pseudo-codigo para uma DRAM de 64Kbyte, cada linha eh um evento no tempo:
write_dram:
RW = 0
D[0-7] = dados
A[0-7] = linha
RAS = 0
A[0-7] = coluna
CAS = 0
CAS = 1
RAS = 1
read_dram:
RW = 1
A[0-7] = linha
RAS = 0
A[0-7] = coluna
CAS = 0
dados = D[0-7]
CAS = 1
RAS = 1
refresh_dram:
RW = 1
A[0-7] = refresh++
RAS = 0
RAS = 1
nos datasheets tem o tempo para fazer o refresh espalhado, ou seja, a cada tantos microsegundos vc faz o refresh de uma linha. com isso vc garante que cada celula nao fica mais que tantos milisegundos sem refresh. o exemplo de leitura e escrita sao simples e assumem um processador lento, isso pq em uma DRAM de 70ns vc precisa garantir pelo menos uns 40ns o CAS em nivel 0 para que o dado seja efetivamente lido ou escrito. bom, SPI nao dah nem para o comeco pq uma DRAM da epoca do proex fornece ae mais de uma dezena de MBytes/s na boa de taxa de transferencia, bem acima do que SPI eh capaz.
SDRAM e DDR sao parecidos, mas infinitamente mais complexos, pq sao memorias sincronas e usam estes clocks para transferir bursts. as SDRAM tipicas operam entre 66 e 133MHz, mas as DDR tipicas comecam em 133 e vao acima dos 1333 MHz. essas coisas podem chegar na boa dos GBytes/s, mas se aventurar a fazer um controlador no braco eh loucura, melhor investir em um processador de verdade com controlador SDRAM ou DDR integrado.
lembrando que nas memorias SRAM ou MRAM, apesar de serem estruturas em arrays, vc nao precisa de refresh pq sao estruturas completamente estaticas, ou seja, sao farinha de outro saco hehehe. esse fato por si elimina a necessidade de ler, bufferizar e escrever linhas inteiras o tempo todo... isso as torna simples e rapidas.