Páginas

quinta-feira, 17 de junho de 2010

Memórias SDR-SDRAM

Tanto as memórias FPM quanto as memórias EDO são assíncronas, o que significa que elas trabalham em seu próprio ritmo, independentemente dos ciclos da placa-mãe. Isso explica porque memórias FPM que foram projetadas para funcionar em placas para processadores 386 ou 486 funcionam sem problemas em placas soquete 7, que trabalham a 66 MHz. Na verdade, a memória continua trabalhando na mesma velocidade, o que muda são os tempos de espera que passam a ser mais altos. Assim, em vez de responder a cada 2 ciclos da placa-mãe, elas podem passar a responder a cada 3 ou 4 ciclos, por exemplo.
As memórias SDRAM (Synchronous Dynamic RAM) por sua vez, são capazes de trabalhar sincronizadas com os ciclos da placa-mãe, sem tempos de espera. Isso significa que a temporização das memórias SDRAM é sempre de uma leitura por ciclo. Independentemente da frequência de barramento utilizada, os tempos de acesso serão sempre de 6-1-1-1, ou mesmo 5-1-1-1.
Veja que o primeiro acesso continua tomando vários ciclos, pois nele é necessário realizar o acesso padrão, ativando a linha (RAS) e depois a coluna (CAS). Apenas a partir do segundo acesso é que as otimizações entram em ação e a memória consegue realizar uma leitura por ciclo, até o final da leitura.
O burst de leitura pode ser de 2, 4 ou 8 endereços e existe também o modo "full page" (uma novidade introduzida nos módulos SDRAM), onde o controlador pode especificar um número qualquer de endereços a serem lidos sequencialmente, até um máximo de 512. Ou seja, em situações ideais, pode ser possível realizar a leitura de 256 setores em 260 ciclos! Só para efeito de comparação, se fossem usadas memórias regulares, com tempos de acesso similares, a mesma tarefa tomaria pelo menos 1280 ciclos.
Outra característica que ajuda as memórias SDRAM a serem mais rápidas que as EDO e FPM é a divisão dos módulos de memória em vários bancos. Um módulo DIMM pode ser formado por 2, 4, ou mesmo 8 bancos de memória, cada um englobando parte dos endereços disponíveis. Apenas um dos bancos pode ser acessado de cada vez, mas o controlador de memória pode aproveitar o tempo de ociosidade para fazer algumas operações nos demais, como executar os ciclos de refresh e também a pré-carga dos bancos que serão acessados em seguida. Nos módulos EDO e FPM, todas essas operações precisam ser feitas entre os ciclos de leitura, o que toma tempo e reduz a frequência das operações de leitura.
A partir das memórias SDRAM, tornou-se desnecessário falar em tempos de acesso, já que a memória trabalha de forma sincronizada em relação aos ciclos da placa-mãe. As memórias passaram então a ser rotuladas de acordo com a frequência em que são capazes de operar. No caso das memórias SDR-SDRAM temos as memórias PC-66, PC-100 e PC-133, no caso das DDR-SDRAM temos as DDR-200, DDR-266, DDR-333, DDR-400 (e assim por diante), enquanto nas DDR2 temos as DDR2-533, DDR2-666, DDR2-800, DDR2-1066, que foram sucedidas pelos padrões de memórias DDR3.
Um módulo de memória PC-133 deve ser capaz de operar a 133 MHz, fornecendo 133 milhões de leituras (teóricas) por segundo. Entretanto, essa velocidade é atingida apenas quando o módulo realiza um burst de várias leituras. O primeiro acesso continua levando 5, 6 ou mesmo 7 ciclos da placa-mãe, como nas memórias antigas.
Ou seja, o fato de ser um módulo PC-100 não indica que ele possua um tempo de acesso de 10 ns ou menos (nem mesmo os módulos DDR3 atuais atingem essa marca). Pelo contrário, a maioria dos módulos PC-100 trabalhavam com tempos de acesso de 40 ns. Entretanto, graças a todas as otimizações que vimos, as leituras podiam ser paralelizadas, de forma que, no final, o módulo suporta bursts de leitura onde, depois de um lento ciclo inicial, ele consegue realmente entregar 64 bits de dados a cada 10 ns.
Independentemente da frequência de operação, temos também os módulos CL2 e CL3, onde o "CL" é abreviação de "CAS latency", ou seja, o tempo de latência relacionado ao envio do valor CAS, durante o primeiro acesso de cada burst.
Em módulos CL2, o envio do valor CAS toma 2 ciclos, enquanto nos CL3 toma 3 ciclos. A eles, somamos um ciclo inicial e mais dois ciclos relacionados ao envio do valor RAS, totalizando 5 (nos módulos CL2) ou 6 (nos CL3) ciclos para o acesso inicial. Entretanto, a diferença prática acaba sendo pequena, pois os acessos seguintes demoram sempre apenas um ciclo.
Um módulo CL2 realizaria um burst de 8 leituras em 12 ciclos (5-1-1-1-1-1-1-1), enquanto o CL3 demoraria 13 ciclos (6-1-1-1-1-1-1-1). Ou seja, embora os módulos CL2 tenham sido celebrados e sejam alvo de um grande esforço de marketing por parte dos fabricantes, a diferença de performance era muito pequena para justificar a diferença de preço.
Veja que das memórias regulares, até as SDRAM, foi possível multiplicar a velocidade de transferência sem fazer alterações fundamentais nas células, que continuam seguindo o mesmo projeto básico, com um transístor e um capacitor para cada bit armazenado. Desde a década de 80, as reduções nos tempos de acesso foram apenas incrementais, acompanhando as melhorias nas técnicas de fabricação. O que realmente evoluiu com o passar do tempo foram os circuitos em torno dos módulos, que otimizaram o processo de leitura, extraindo mais e mais performance.
Chegamos então às memórias DDR, DDR2 e DDR3 usadas atualmente, que levam este processo crescente de otimização a um novo nível, permitindo que o módulo de memória realize várias transferências por ciclo, multiplicando a frequência efetiva.

Memórias EDO

As memórias EDO (Extended Data Output) foram introduzidas a partir de 1994 e trouxeram mais uma melhoria significativa no modo de acesso a dados. Nas memórias FPM, uma leitura não pode ser iniciada antes que a anterior termine, mesmo dentro do burst de 4 leituras dentro da mesma linha. O controlador precisa esperar que os dados referentes à leitura anterior cheguem, antes de poder ativar o endereço CAS seguinte.
Nas memórias EDO, o controlador faz a leitura enviando o endereço RAS (como de costume) e em seguida enviando os 4 endereços CAS em uma frequência predefinida, sem precisar esperar que o acesso anterior termine. Os sinais chegam às células de memória na sequência em que foram enviados e, depois de um pequeno espaço de tempo, o controlador recebe de volta as 4 leituras.
O resultado acaba sendo exatamente o mesmo, mas passa a ser feito de forma mais rápida. Usadas em uma placa soquete 7, operando a 66 MHz, as memórias EDO são capazes de trabalhar com tempos de acesso de apenas 6-2-2-2, ou mesmo 5-2-2-2 (nos módulos de 60 ns). Nos bursts de 8 ou mais leituras, o ganho acaba sendo ainda maior, com o módulo FPM realizando a leitura dos 8 endereços em 27 ciclos (6-3-3-3-3-3-3-3) e o EDO em 20 (6-2-2-2-2-2-2-2). Veja que o ganho é maior em leituras de vários endereços consecutivos, por isso alguns aplicativos se beneficiavam mais do que outros.
Os módulos de memória EDO foram produzidos em versões com tempos de acesso de 70, 60 e 50 ns, com predominância dos módulos de 60 ns. Eles foram usados predominantemente na forma de módulos de 72 vias, usados nos micros 486 e Pentium fabricados a partir de 1995.
Existiram ainda alguns módulos DIMM de 168 vias com memória EDO. Eles foram bastante raros, pois foram logo substituídos pelos módulos de memória SDRAM.
As melhorias na arquitetura das memórias EDO tornaram-nas incompatíveis com placas-mãe equipadas com chipsets antigos. Basicamente, apenas as placas para processadores Pentium e algumas placas-mãe para 486 com slots PCI (as mais recentes) aceitam trabalhar com memórias EDO. Existem também placas para 486 "tolerantes" que funcionam com memórias EDO, apesar de não serem capazes de tirar proveito do modo de acesso mais rápido, e finalmente, as placas incompatíveis, que nem chegam a inicializar caso sejam instaladas memórias EDO.
Todos os módulos de 30 vias são de memórias FPM, enquanto (com exceção de alguns módulos antigos) todos os de 168 vias são de memórias SDRAM. A confusão existe apenas nos módulos de 72 vias, que podem ser tanto de memórias EDO quanto de memórias FPM. Para saber quem é quem, basta verificar o tempo de acesso. Todo módulo de memória traz seus dados estampados nos chips, na forma de alguns códigos; o tempo de acesso é indicado no final da primeira linha. Se ela terminar com -7, -70, ou apenas 7, ou 70, o módulo possui tempo de acesso de 70 ns. Se por outro lado a primeira linha terminar com -6, -60, 6 ou 60 o módulo é de 60 ns.
Como quase todos os módulos de 70 ns são de memórias FPM, e quase todos os módulos de memórias EDO são de 60 ns, você pode usar esse método para determinar com 95% de certeza o tipo de memória usada:
m29588999

Memórias FPM

A primeira melhora significativa na arquitetura das memórias veio com o FPM (Fast-Page Mode, ou "modo de paginação rápida").
A ideia é que, ao ler um bloco de instruções ou arquivo gravado na memória, os dados estão quase sempre gravados sequencialmente. Não é preciso então enviar o endereço RAS e CAS para cada bit a ser lido, mas simplesmente enviar o endereço RAS (linha) uma vez e em seguida enviar uma sequência de até 4 endereços CAS (coluna), realizando uma série rápida de 4 leituras.
O primeiro ciclo de leitura continua tomando o mesmo tempo, mas as 3 leituras seguintes passam a ser bem mais rápidas. Graças a essa pequena otimização, as memórias FPM conseguem ser até 30% mais rápidas que as memórias regulares, sem grandes alterações nos chips de memória ou na técnica de fabricação. O burst (sequência de acessos rápidos) de 4 leituras pode ser prolongado para 8, ou até mesmo 16 leituras consecutivas, desde que sejam lidos dados gravados em endereços adjacentes, da mesma linha.
As memórias FPM foram utilizadas em micros 386, 486 e nos primeiros micros Pentium, na forma de módulos SIMM de 30 ou 72 vias, com tempos de acesso de 80, 70 ou 60 ns, sendo as de 70 ns as mais comuns.
Instaladas em uma placa-mãe soquete 7, que trabalhe com bus de 66 MHz, os intervalos de espera de memórias FPM podem ser de até 6-3-3-3, o que significa que o processador terá de esperar cinco ciclos da placa-mãe para a memória efetuar a primeira leitura de dados e somente mais 3 ciclos para cada leitura subsequente. Os tempos de espera das memórias podiam ser configurados no setup, através da opção "Memory Timing" ou similar, onde ficavam disponíveis opções como "slow", "normal" e "fast", que substituem os valores numéricos.
No caso das placas para 486, que operavam a clocks mais baixos (30, 33 ou 40 MHz), os tempos de espera podiam ser configurados com valores mais baixos, como 4-3-3-3 ou 3-2-2-2, já que, com menos ciclos por segundo, é natural que os tempos de resposta dos módulos correspondam a um número menor de ciclos da placa-mãe.