Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

terça-feira, 4 de janeiro de 2011

Falando sobre memórias RAM

Introdução

Embora seja brutalmente mais rápida que o HD e outros periféricos, a memória RAM continua sendo muito mais lenta que o processador. O uso de caches diminui a perda de desempenho, reduzindo o número de acessos à memória; mas, quando o processador não encontra a informação que procura nos caches, precisa recorrer a um doloroso acesso à memória principal, que em um processador atual pode resultar em uma espera de mais de 150 ciclos.
Para reduzir a diferença (ou pelo menos tentar impedir que ela aumente ainda mais), os fabricantes de memória passaram a desenvolver um conjunto de novas tecnologias, a fim de otimizar o acesso aos dados, dando origem aos módulos de memória DDR2 e DDR3 utilizados atualmente.
Começando do básico, um chip de memória é um exército de clones, formado por um brutal número de células idênticas, organizadas na forma de linhas e colunas, de forma similar a uma planilha eletrônica.
O chip de memória em si serve apenas para armazenar dados, não realiza nenhum tipo de processamento. Por isso, é utilizado um componente adicional, o controlador de memória, que pode ser incluído tanto no chipset da placa-mãe quanto dentro do próprio processador, como no caso dos processadores AMD a partir do Athlon 64 e dos processadores Intel a partir do Core i7.
Para acessar um determinado endereço de memória, o controlador primeiro gera o valor RAS (Row Address Strobe), ou o número da linha da qual o endereço faz parte, gerando em seguida o valor CAS (Column Address Strobe), que corresponde à coluna. Quando o RAS é enviado, toda a linha é ativada simultaneamente; depois de um pequeno tempo de espera, o CAS é enviado, fechando o circuito e fazendo com que os dados do endereço selecionado sejam lidos ou gravados:
Não existe um caminho de volta, ligando cada endereço de volta ao controlador de memória. Em vez disso, é usado um barramento comum, compartilhado por todos os endereços do módulo. O controlador de memória sabe que os dados que está recebendo são os armazenados no endereço X, pois ele se "lembra" que acabou de acessá-lo.

A evolução dos módulos de memória

Nos micros XT, 286 e nos primeiros 386, ainda não eram utilizados módulos de memória. Em vez disso, os chips de memória eram instalados diretamente na placa-mãe, encaixados individualmente em colunas de soquetes (ou soldados), onde cada coluna formava um banco de memória.
Esse era um sistema antiquado e que trazia várias desvantagens, por dificultar upgrades de memória ou a substituição de módulos com defeito. Imagine você fazendo um upgrade de memória em uma placa como esta:
Não é só você que não achou muito atraente a ideia de ficar catando chips de memória um a um. Foi questão de tempo até que alguém aparecesse com uma alternativa mais prática, capaz de tornar a instalação fácil até mesmo para usuários inexperientes.
Os módulos de memória são pequenas placas de circuito onde os chips DIP são soldados, facilitando o manuseio e a instalação. Os primeiros módulos de memória criados são chamados de módulos SIMM, sigla que significa "Single In Line Memory Module", justamente porque existe uma única via de contatos, com 30 vias. Apesar de existirem contatos também na parte de trás do módulo, eles servem apenas como uma extensão dos contatos frontais, de forma a aumentar a área de contato com o soquete. Examinando o módulo, você verá um pequeno orifício em cada contato, que serve justamente para unificar os dois lados.
Módulo SIMM de 30 vias
Os módulos de 30 vias possuíam sempre 8 ou 9 chips de memória. Cada chip fornecia um único bit de dados em cada transferência, de forma que 8 deles formavam um módulo capaz de transferir 8 bits por ciclo. No caso dos módulos com 9 chips, o último era destinado a armazenar os bits de paridade, que melhoravam a confiabilidade, permitindo identificar erros. Hoje em dia os módulos de memória são mais confiáveis, de forma que a paridade não é mais usada. No lugar dela, temos o ECC, um sistema mais avançado, usado em módulos de memória destinados a servidores.
Os módulos de 30 vias foram utilizados em micros 386 e 486 e foram fabricados em várias capacidades. Os mais comuns foram os módulos de 1 MB, mas era possível encontrar também módulos de 512 KB, 2 MB e 4 MB. Existiram também módulos de 8 e 16 MB, mas eles eram muito raros devido ao custo.
Os processadores 386 e 486 utilizavam um barramento de 32 bits para o acesso à memória, o que tornava necessário combinar 4 módulos de 30 vias para formar um banco de memória. Os 4 módulos eram então acessados pelo processador como se fossem um só. Era preciso usar os módulos em quartetos: 4 módulos ou 8 módulos, mas nunca um número quebrado.
A exceção ficava por conta dos micros equipados com processadores 386SX, onde são necessários apenas 2 módulos, já que o 386SX acessa a memória usando palavras de 16 bits:
Apesar de serem muito mais práticos do que manipular diretamente os chips DIP, os módulos SIMM de 30 vias ainda eram bastante inconvenientes, já que era preciso usar 4 módulos idênticos para formar cada banco de memória. Eles foram desenvolvidos pensando mais na questão da simplicidade e economia de custos do que na praticidade.
Para solucionar o problema, os fabricantes criaram um novo tipo de módulo de memória SIMM de 32 bits, que possui 72 vias. Os módulos de 72 vias substituíram rapidamente os antigos nas placas para 486 e se tornaram o padrão nos micros Pentium, sendo em seguida substituídos pelos módulos de 168 vias.
Módulo SIMM de 72 vias
Em vez de quatro módulos, é preciso apenas um módulo SIMM de 72 vias para formar cada banco de memória nos micros 486. Como o Pentium acessa a memória usando palavras de 64 bits, são necessários 2 módulos em cada banco. É por isso que nos micros Pentium 1 precisamos sempre usar os módulos de memória em pares:
O acesso de 64 bits à memória foi introduzido para permitir que o processador conseguisse acessar grandes quantidades de dados mais rapidamente. O processador é tão mais rápido que a memória RAM, que depois de esperar vários ciclos para poder acessá-la, o melhor a fazer é pegar a maior quantidade de dados possível e guardar tudo no cache. Naturalmente os dados serão processados em blocos de 32 bits, mas a poupança ajuda bastante.
Dentro de um banco, todos os módulos são acessados ao mesmo tempo, como se fossem um só, por isso era sempre recomendável usar dois módulos iguais. Ao usar quatro módulos, o importante era que cada par fosse composto por dois módulos iguais. Não existia problema em usar dois pares de módulos diferentes, como ao usar dois de 16 MB e mais dois de 8 MB para totalizar 48 MB, por exemplo.
Uma curiosidade é que algumas placas-mãe para Pentium podem trabalhar com apenas um módulo de 72 vias. Nesse caso, a placa engana o processador, fazendo dois acessos de 32 bits consecutivos, entregando os dados de uma só vez para o processador. Apesar de funcionar, esse esquema reduz bastante a velocidade do micro, pois a taxa de transferência ao ler dados a partir da memória é efetivamente reduzida à metade.
Finalmente, temos os módulos DIMM, usados atualmente. Ao contrário dos módulos SIMM de 30 e 72 vias, os módulos DIMM possuem contatos em ambos os lados do módulo, o que justifica seu nome, "Double In Line Memory Module" ou "módulo de memória com dupla linha de contato".
Todos os módulos DIMM são módulos de 64 bits, o que eliminou a necessidade de usar 2 ou 4 módulos para formar um banco de memória. Muitas placas-mãe oferecem a opção de usar dois módulos (acessados simultaneamente) para melhorar a velocidade de acesso.
Esse recurso é chamado de dual-channel e melhora consideravelmente o desempenho, sobretudo nas placas-mãe com vídeo onboard, onde a placa de vídeo disputa o acesso à memória RAM com o processador principal. De qualquer forma, mesmo nas placas dual-channel, usar os módulos em pares é opcional; você pode perfeitamente usar um único módulo, mas neste caso o suporte à dual-channel fica desativado.
Existem três formatos de memória DIMM. Os mais antigos são os módulos de memória SDR, de 168 vias, que substituíram os antigos módulos de memória EDO, mas logo deram lugar às tecnologias mais recentes. Em seguida, temos os módulos de memória DDR, que possuem 184 contatos; os módulos DDR2, que possuem 240; e, os módulos DDR3, que também possuem 240 contatos, mas utilizam tensões e sinalizações diferentes.
Apesar do maior número de contatos, os módulos DDR, DDR2 e DDR3 são exatamente do mesmo tamanho que os módulos SDR de 168 vias, por isso foram introduzidas mudanças na posição dos chanfros de encaixe, de forma que você não consiga encaixar os módulos em placas incompatíveis.
Os módulos SDR possuem dois chanfros, enquanto os DDR possuem apenas um chanfro, que ainda por cima é colocado em uma posição diferente:
Módulo DIMM SDR (em cima) e módulo DDR
Os módulos DDR2 também utilizam um único chanfro, mas ele está posicionado mais próximo do canto do módulo em relação ao usado nos módulos DDR, de forma que é novamente impossível encaixar um módulo DDR2 numa placa antiga:
Módulo DIMM DDR2
Isso é necessário, pois além das mudanças na forma de acesso, os módulos DDR2 utilizam tensão de 1.8V, enquanto os módulos DDR usam 2.5V. Se fosse possível instalar um módulo DDR2 em uma placa antiga, a maior tensão queimaria o módulo rapidamente.
Outra característica que torna os módulos DDR2 diferentes é a presença de um terminador resistivo dentro de cada chip de memória. O terminador é necessário para "fechar o circuito", evitando que os sinais elétricos retornem na forma de interferência ao chegarem ao final do barramento. Nos módulos DDR os terminadores são instalados na placa-mãe, o que torna a terminação menos eficiente. Como os módulos DDR2 operam a frequências muito mais altas, a presença do terminador dentro dos próprios chips se tornou uma necessidade, já que torna o sinal mais estável e livre de ruídos.
Em seguida temos os módulos DDR3. Como comentei, eles utilizam os mesmos 240 contatos dos módulos DDR2 e mantém o mesmo formato. A única diferença visível (fora etiquetas e códigos de identificação) é a mudança na posição do chanfro, que passou a ser posicionado mais próximo do canto do módulo. O chanfro serve justamente para impedir que os módulos sejam encaixados em placas incompatíveis:
Módulo DDR3
Como os módulos DDR2 e DDR3 trabalham a frequências mais altas, o uso de dissipadores se tornou mais comum. Eles não são realmente necessários, mas a melhor dissipação do calor permite que o módulo trabalhe a frequências mais altas, por isso eles se tornaram norma nos módulos de alto desempenho e, principalmente, nos módulos "premium", destinados a overclock. Alguns fabricantes chegam a utilizar heat-pipes ou a oferecer coolers ativos, que podem ser instalados sobre os módulos, mas nesse caso o efeito é mais estético do que prático.
Módulos DDR2 com dissipadores
Outra diferença é que os chips DDR2 e DDR3 utilizam o encapsulamento BGA (Ball Grid Array), no lugar do encapsulamento TSOP (Thin Small-Outline Package), usado nos chips SDR e DDR. A grande diferença é que no BGA os pontos de solda são posicionados diretamente na parte inferior dos chips, em vez de serem usadas as "perninhas" laterais. Isso reduz a distância que o sinal elétrico precisa percorrer, além de reduzir o nível de interferências, permitindo que os módulos sejam capazes de operar a frequências mais altas. Esta imagem ilustrativa da Micron mostra bem como os chips se parecem, com a face visível e os pontos de solda:
Chips BGA de memória
Concluindo, existem também os módulos SODIMM (Small Outline DIMM), destinados a notebooks. Eles são basicamente versões miniaturizadas dos módulos destinados a desktops, que utilizam os mesmos tipos de chips de memória.
Os módulos SODIMM SDR possuem 144 pinos, os módulos SODIMM DDR e DDR2 possuem 200 pinos e os módulos SODIMM DDR3 possuem 204 pinos. Nos módulos SDR o chanfro fica próximo ao centro do módulo, enquanto nos DDR e DDR2 ele fica à esquerda.
Assim como nos módulos para desktops, existe uma pequena diferença no posicionamento do chanfro entre os módulos DDR e DDR2, que impede o encaixe incorreto, já que ambos são incompatíveis:
Módulo SODIMM DDR2

A questão do acesso de dados

Antigamente (na época dos módulos SIMM de 30 vias usados nos micros 386 e 486), cada chip de memória oferecia a leitura de um bit de cada vez. Os módulos de 30 vias eram compostos por 8 chips de memória (com exceção dos módulos com paridade, que usavam 9 chips), o que resultava na leitura de 8 bits por ciclo. Apesar disso, o processador lia 32 bits de dados a cada ciclo, de forma que era necessário usar os módulos em quartetos.
Do ponto de vista do processador, não existia divisão, os chips eram acessados como se fossem um só. O processador não via 32 endereços separados, em 32 chips diferentes, mas sim um único endereço, contendo 32 bits.
Módulos antigos de 30 vias (8 bits), 72 vias (32 bits) e 168 vias (64 bits)
Nos módulos DIMM atuais são geralmente usados 8 chips de 8 bits cada um, formando os 64 bits fornecidos ao processador. Existem ainda módulos com 16 chips de 4 bits cada, ou ainda, módulos com 4 chips de 16 bits (comuns em notebooks). Do ponto de vista do processador, não faz diferença, desde que somados, os chips totalizem 64 bits.
Imagine que o controlador de memória envia sequências com 4, 8 ou 16 pares de endereços RAS e CAS e recebe de volta o mesmo número de leituras de 64 bits. Mesmo em casos em que o processador precisa de apenas alguns poucos bytes, contendo uma instrução ou bloco de dados, ele precisa ler todo o bloco de 64 bits adjacente, mesmo que seja para descartar os demais.
No caso dos chipsets e processadores com controladores de memória dual-channel, continuamos tendo acessos de 64 bits, a única diferença é que agora o controlador de memória é capaz de acessar dois endereços diferentes (cada um em um módulo de memória) a cada ciclo de clock, ao invés de apenas um. Isso permite transferir o dobro de dados por ciclo, fazendo com que o processador precise esperar menos tempo ao transferir grandes quantidades de dados.
Na verdade, nos PCs contemporâneos, praticamente qualquer dispositivo pode acessar a memória diretamente através do barramento PCI Express, PCI (ou AGP no caso de micros mais antigos) e até mesmo a partir das portas SATA, IDE e USB. Naturalmente, todos os acessos são coordenados pelo processador, mas como a memória é uma só, temos situações onde o processador precisa esperar para acessar a memória, porque ela está sendo acessada por outro dispositivo.
Existem várias formas de melhorar o desempenho da memória RAM. A primeira é aumentar o número de bits lidos por ciclo, tornando o barramento mais largo, como o aumento de 32 para 64 bits introduzida pelo Pentium 1, que continua até os dias de hoje. O problema em usar um barramento mais largo é que o maior número de trilhas necessárias, tanto na placa-mãe quanto nos próprios módulos de memória, aumentam a complexidade e o custo de produção.
A segunda é acessar dois ou mais módulos de memória simultaneamente, como nas placas e processadores com controladores de memória dual-channel ou triple-channel. O problema é que nesse caso precisamos de dois módulos, além de circuitos e trilhas adicionais na placa-mãe e pinos adicionais no soquete do processador.
A terceira é criar módulos de memória mais rápidos, como no caso das memórias DDR2 e DDR3. Essa questão da velocidade pode ser dividida em dois quesitos complementares: o número de ciclos por segundo e a latência, que é o tempo que a primeira operação numa série de operações de leitura ou escrita demora para ser concluída. O tempo de latência poderia ser comparado ao tempo de acesso de um HD, enquanto o número de ciclos poderia ser comparado ao clock do processador.
É aqui que entram as diferentes tecnologias de memórias que foram introduzidas ao longo das últimas décadas, começando pelas memórias regulares, usadas nos XTs e 286, que evoluíram para as memórias FPM, usadas em PCs 386 e 486, em seguida para as memórias EDO, usadas nos últimos micros 486s e nos Pentium. Estas três primeiras tecnologias foram então substituídas pelas memórias SDR-SDRAM, seguidas pelas memórias DDR e pelas DDR2 e DDR3 usadas atualmente.
Tudo começou com as memórias regulares, que são o tipo mais primitivo de memória RAM. Nelas, o acesso é feito da forma tradicional, enviando o endereço RAS, depois o CAS e aguardando a leitura dos dados para cada ciclo de leitura.
Isso funcionava bem nos micros XT e 286, onde o clock do processador era muito baixo e a memória RAM podia funcionar de forma sincronizada com ele. Em um 286 de 8 MHz, eram usados chips com tempo de acesso de 125 ns (nanossegundos) e em um de 12 MHz eram usados chips de 83 ns.
O problema era que a partir daí as memórias da época atingiram seu limite e passou a ser necessário fazer com que a memória trabalhasse de forma assíncrona, onde o processador trabalha a uma frequência mais alta que a memória RAM.
A partir do 386, a diferença passou a ser muito grande, o que levou à introdução da memória cache e ao início da corrida em busca de módulos de memória mais rápidos.

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.

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:
No final da era Pentium, as memórias EDO enfrentaram a concorrência das memórias BEDO (Burst EDO), que utilizavam um sistema de pipeline para permitir acessos mais rápidos que as EDO. Em um Bus de 66 MHz, as memórias BEDO eram capazes de funcionar com temporização de 5-1-1-1, quase 30% mais rápido que as memórias EDO convencionais.
No papel as memórias BEDO eram interessantes, mas elas nunca foram usadas em grande escala. A tecnologia era propriedade da Micron, que ansiava por cobrar royalties dos demais fabricantes, caso ela fosse adotada em grande escala. Os fabricantes de memória trabalham com margens de lucro incrivelmente apertadas, de forma que a palavra "royalties" gera calafrios. Ao invés de caírem na armadilha da Micron, eles se apressaram em adotar as memórias SDRAM, que além de serem um padrão aberto, eram tecnicamente superiores.

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 DDR

Apesar das otimizações, os módulos de memória SDR-SDRAM continuam realizando apenas uma transferência por ciclo, da forma mais simples possível. Depois de decorrido o longo ciclo inicial, as células de memória entregam uma leitura de dados por ciclo, que passa pelos buffers de saída e é despachada através do barramento de dados. Todos os componentes trabalham na mesma frequência:
As memórias DDR implementam um novo truque, que as torna capazes de realizarem duas transferências por ciclo e serem quase duas vezes mais rápidas que as memórias SDRAM regulares, mesmo mantendo a mesma frequência de operação e a mesma tecnologia básica. Vem daí o termo "DDR", que significa "Double Data Rate", ou frequência dupla de transferência de dados.
Com o lançamento das memórias DDR, as SDRAM passaram a ser chamadas de "SDR" (Single Data Rate) ou SDR-SDRAM, reforçando a diferença entre as duas tecnologias. Embora tanto as memórias DDR quanto as DDR2 e DDR3 continuem sendo memórias SDRAM, o termo saiu de moda, já que é muito mais fácil dizer "DDR" do que "DDR-SDRAM".
De volta à tecnologia, os chips de memória DDR incluem circuitos adicionais, que permitem gerar comandos de acesso e receber os dados referentes às leituras duas vezes por ciclo de clock, executando uma operação no início do ciclo e outra no final. Como são utilizadas as mesmas trilhas para realizar ambas as transferências, não foi necessário fazer grandes modificações nem nos módulos de memória, nem nas placas-mãe.
Apesar disso, as células de memória propriamente ditas continuam operando na mesma frequência. Em um módulo DDR-266, por exemplo, elas operam a apenas 133 MHz, da mesma forma que num módulo SDR PC-133. O pulo do gato é fazer com que cada um dos dois comandos de leitura (ou gravação) sejam enviados para um endereço diferente, na mesma linha. As duas leituras são enviadas através do barramento de dados na forma de duas transferências separadas, uma realizada no início e a outra no final do ciclo de clock:
O maior problema é que o ciclo inicial continua demorando o mesmo tempo que nas memórias SDRAM, de forma que o ganho aparece apenas em leituras de vários setores consecutivos e a taxa de transferência nunca chega realmente a dobrar, variando bastante de acordo com o tipo de aplicativo usado.
A temporização para um burst de 8 leituras, usando memórias DDR, seria 5-½-½-½-½-½-½-½ (8.5 ciclos) ao invés de 5-1-1-1-1-1-1-1 (12 ciclos) como num módulo SDR. A diferença é menor em bursts menores, de apenas duas ou quatro leituras.
Apesar disso, as memórias DDR acabaram sendo um excelente negócio, pois tornaram possível obter ganhos perceptíveis de performance sem um aumento considerável no custo. Justamente por isso elas se popularizaram rapidamente, substituindo as memórias SDR em um espaço de menos de um ano.
Os módulos DDR podem ser vendidos tanto segundo sua frequência de operação quanto segundo sua taxa de transferência.
DDR-200 (100 MHz) = PC1600
DDR-266 (133 MHz) = PC2100
DDR-333 (166 MHz) = PC2700
DDR-400 (200 MHz) = PC3200
DDR-466 (233 MHz) = PC3700
DDR-500 (250 MHz) = PC4000
Assim como no caso dos módulos SDR, existem módulos de memória DDR CL2 e CL3, sendo que nos CL2 o tempo do acesso inicial é reduzido em um ciclo, resultando em um pequeno ganho de desempenho. Como as DDR realizam duas operações por ciclo, surgiram também os módulos CL2.5, que ficam no meio do caminho.
As especificações dos módulos indicam a frequência máxima para a qual seu funcionamento foi comprovado. Nada impede que você use o módulo a uma frequência mais baixa que o especificado; você pode usar um módulo DDR-400 em uma placa-mãe configurada para trabalhar a 133 MHz, por exemplo, mas nesse caso não existe ganho de desempenho com relação a um módulo DDR-266, com exceção de pequenas diferenças relacionadas ao valor CAS ou à temporização dos dois módulos.
Quase sempre, é possível também usar o módulo a frequências um pouco mais altas que o especificado, fazendo overclock. O módulo DDR-400 poderia funcionar então a 215 MHz, por exemplo. Fazer overclock sem aumentar a tensão da memória não traz perigo para os módulos (mesmo a longo prazo), porém você também não tem garantia de estabilidade. Normalmente os módulos CL2 ou CL2.5 suportam melhor os overclocks, já que o controlador tem mais margem para aumentar a temporização dos módulos para compensar o aumento na frequência.
Ao misturar dois módulos de especificações diferentes, é necessário nivelar por baixo, usando a frequência suportada pelo módulo mais lento. Justamente por isso, nem sempre é conveniente aproveitar os módulos antigos ao fazer upgrade de memória, pois você acaba sub-utilizando os novos módulos, obrigando-os a acompanharem as temporizações dos módulos antigos.
Continuando, quase todos os módulos de memória SDRAM ou DDR possuem um chip de identificação chamado de "SPD" (Serial Presence Detect), que armazena os códigos de identificação do módulo, detalhes sobre a frequência, tempos de acesso, CAS latency e outras especificações. Estas informações são exibidas por programas de identificação, como o CPU-Z e o Sandra. No Linux, você pode ler as informações gravadas no chip usando o script "decode-dimms.pl" (você pode encontrá-lo usando o comando "locate"), que faz parte do pacote "lm-sensors". Ele retorna uma longa lista de informações sobre cada um dos módulos instalados na máquina, como neste exemplo:
Memory Serial Presence Detect Decoder
By Philip Edelbrock, Christian Zuckschwerdt, Burkart Lingner,
Jean Delvare and others
Version 2.10.1
Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0050
Guessing DIMM is in bank 1
---=== SPD EEPROM Information ===---
EEPROM Checksum of bytes 0-62 OK (0x8C)
# of bytes written to SDRAM EEPROM 128
Total number of bytes in EEPROM 256
Fundamental Memory type DDR SDRAM
SPD Revision 0.0
---=== Memory Characteristics ===---
Maximum module speed 400MHz (PC3200)
Size 512 MB
tCL-tRCD-tRP-tRAS 3-3-3-8
Supported CAS Latencies 3, 2.5, 2
Supported CS Latencies 0
Supported WE Latencies 1
Minimum Cycle Time (CAS 3) 5 ns
Maximum Access Time (CAS 3) 0.65 ns
Minimum Cycle Time (CAS 2.5) 6 ns
Maximum Access Time (CAS 2.5) 0.7 ns
Minimum Cycle Time (CAS 2) 7.5 ns
Maximum Access Time (CAS 2) 0.75 ns
---=== Manufacturing Information ===---
Manufacturer Kingston
Manufacturing Location Code 0x04
Part Number K
Manufacturing Date 0x001E
Assembly Serial Number 0x6B376D48
Pelas informações, podemos ver que se trata de um módulo DDR-400 (PC3200) de 512 MB da Kingston. Veja que o módulo suporta o uso de CAS 3, 2.5 ou 2, mas em seguida é especificado que o tempo mínimo de acesso usando CAS 3 são 5 ns e usando CAS 2 são 7.5 ns. Ou seja, o módulo só é capaz de usar CAS 2 em frequências mais baixas. Ao operar a 200 MHz, sua frequência nominal, ele passa automaticamente a usar CAS 3. Apesar das especificações serem um pouco confusas, elas indicam que na verdade tenho em mãos um módulo CL3.
O SPD é um pequeno chip de memória EEPROM, com apenas 128 ou 256 bytes, que pode ser localizado facilmente no módulo:
O chip responsável pelo SPD
Graças a ele, a placa-mãe pode utilizar automaticamente as configurações recomendadas para o módulo, facilitando a configuração. De qualquer maneira, você pode também desativar a configuração automática (By SPD) e especificar sua própria configuração através do Setup.
A maioria das placas atuais permite que a memória opere de forma assíncrona com o clock da placa-mãe, permitindo que a placa-mãe opere a 166 MHz, enquanto a memória opera a 200 ou 233 MHz, por exemplo. Ao usar um módulo antigo, também é possível fazer o contrário, mantendo a placa-mãe a 200 MHz, mas configurando a memória para operar a 133 MHz, por exemplo. Basta localizar a opção "DRAM Frequency", "Memclock Value" ou similar:
Na maioria das placas é possível ajustar manualmente o valor CAS. Isso pode ser útil ao fazer overclock, pois um módulo DDR-400, pode não conseguir trabalhar estavelmente a 233 MHz (por exemplo), mantendo o CAS em 2 tempos, mas pode funcionar perfeitamente se o tempo for aumentado para 3 tempos. O inverso também é possível. Um módulo DDR-400 CAS 3 poderia vir a trabalhar estavelmente com CAS 2 se a frequência fosse reduzida para 166 MHz, por exemplo, oferecendo uma boa flexibilidade para quando você tem tempo disponível e quer chegar ao melhor desempenho possível.
Muitas placas vão mais longe, oferecendo conjuntos completos de ajustes, como neste segundo screenshot:
Brincar com a frequência e tempos de acesso da memória não oferece riscos para o equipamento. No máximo você pode precisar limpar o setup, para que o micro volte a inicializar depois de tentar usar uma configuração não suportada pelos módulos.
O maior risco está em aumentar a tensão usada pelos módulos (Memory Voltage). Está comprovado que pequenos aumentos na tensão aumentam a possibilidade dos módulos trabalharem estavelmente a frequências mais altas, sobretudo nos módulos DDR2, que dissipam mais calor. O problema é que isso também pode abreviar a vida útil dos módulos, por isso nem sempre é uma boa ideia.
Aumentos de até 5 a 8% estão dentro do limite de tolerância dos circuitos e não oferecem grandes riscos. Você pode usar 2.65V em um módulo DDR ou 1.9V em um módulo DDR2, por exemplo, mas aumentos mais agressivos resultam quase sempre em uma redução significativa da vida útil dos módulos. Muitas placas oferecem a opção de aumentar as tensões dos módulos em 30% ou mais, o que pode danificá-los em poucas horas.