Wait States

Um wait state é um pulso de clock extra adicionado ao ciclo de leitura ou escrita da memória. O objetivo é tornar o ciclo de acesso à memória RAM compatível com o tempo de acesso à memória.

Como o ciclo de acesso à memória RAM dura dois pulsos de clock, com a adição de 1 wait state o ciclo passaria a ter três pulsos de clock. Se adicionarmos dois wait states ao ciclo de leitura em memória este passa a ter quatro pulsos de clock de duração e assim sucessivamente. Aumentar a duração do ciclo de acesso à memória faz com que memórias com tempos de acesso maiores possam ser utilizadas.

Por exemplo, se utilizarmos um processador que trabalhe externamente a 66 MHz, teremos de adicionar dois wait states para que o ciclo passe a ser de 60 ns, fazendo com que memórias com tempo de acesso de 60 ns possam ser utilizadas. Cálculo usado: cada pulso de clock terá 15 ns; a memória deve ser capaz de responder em dois pulsos de clock, ou seja, em 30 ns. Precisamos adicionar dois pulsos extras (ou seja, dois wait states) para que o ciclo passe a ser de 60 ns, fazendo com que memórias de 60 ns consigam responder. Esse exemplo está esquematizado na Figura abaixo.

Esquema de wait states

No caso da utilização de uma memória com 70 ns de tempo de acesso, teremos de adicionar mais um wait state (ou seja, um total de três wait states), para que o ciclo de acesso à memória seja de 75 ns e esta possa “acompanhar” a transferência de dados com o processador.

Em outras palavras, para que o processador consiga comunicar-se corretamente com a memória RAM, o ciclo de leitura deverá ser igual ou maior que o tempo de acesso da memória RAM. Caso isso não ocorra, é necessária a adição de pulsos de clock extras, chamados wait states. Deverão ser adicionados tantos wait states quantos forem necessários para que essa condição seja atingida.

Importante: Nesses exemplos, estamos assumindo que a memória RAM é do tipo assíncrona (FPM ou EDO). As memórias RAM do tipo síncrona (SDRAM) utilizam um método de funcionamento diferente. Como são sincronizadas pelo clock do barramento, não apresentam esse tipo de problema de sincronização. Em compensação, continuam tendo um tempo de resposta (“tempo de acesso”, isto é, o tempo demorado entre o processador pedir um dado e a memória entregá-lo) relativamente alto, normalmente de dois ou três pulsos de clock (entre 30 e 45 ns, no caso de barramentos de 66 MHz, entre 20 e 30 ns, no caso de barramentos de 100 MHz, e entre 15 e 22,5 ns, no caso de barramentos de 133 MHz). Essa característica não é chamada de “tempo de acesso”, mas sim latência do CAS.

A utilização de wait states faz com que as lentas memórias dinâmicas do tipo assíncronas consigam ser utilizadas mesmo em micros mais modernos. No entanto, temos um grande problema: durante um pulso de wait state, o processador fica ocioso, esperando que a memória esteja pronta para armazenar o próximo dado ou então entregar o dado solicitado.

Na utilização de apenas um wait state, reduzimos o desempenho do computador em 1/3: o processador utiliza três pulsos de clock para acessar à memória, porém somente dois pulsos são efetivamente utilizados; no outro pulso, o processador fica ocioso. No caso da adição de dois wait states, reduzimos o desempenho em ½, ou seja, 50%, pois metade dos pulsos utilizados no acesso à memória não são utilizados. E assim sucessivamente, ou seja, quanto mais wait states utilizamos, menor será o desempenho do micro.

Utilizar memória com o menor tempo de acesso possível faz com que o micro utilize menos wait states, melhorando o problema de desempenho. Contudo, mesmo utilizando as memórias dinâmicas assíncronas mais rápidas existentes no mercado, não é possível acessar a memória sem utilizar wait states.

Dica: Se você resolver trocar a memória de seu micro por uma com tempo de acesso menor, não se esqueça de configurar o micro de forma que este efetivamente utilize menos wait states. Caso contrario, o seu micro continuará utilizando o mesmo número de wait states que estava configurado anteriormente, mesmo que você tenha trocado as memórias por modelos mais rápidos. Em outras palavras, trocar simplesmente sua memória de 70 ns de tempo de acesso por uma de 60 ns não fará com que o seu micro fique mais rápido; você deverá reconfigurar o número de wait states no setup do micro.

A solução para o impacto no desempenho é a utilização de uma memória que consiga “falar” com o processador na mesma velocidade — a memória estática. Utilizamos uma pequena quantidade de memória estática no micro: o cache de memória. Quando o processador for armazenar ou buscar dados, estará na verdade “conversando” com a memória cache (memória estática), e não com a memória dinâmica, fazendo com que não precise utilizar wait states e, conseqüentemente, não comprometendo o desempenho do micro. Em pelo menos 80% do tempo o processador acessa a memória cache e não a memória RAM.

Entretanto, o controlador de cache continua precisando acessar a memória RAM, de forma a ir copiando os dados presentes na RAM à medida em que o processador for necessitando deles.

Novas tecnologias — como a EDO e a SDRAM — tiveram de ser criadas para diminuir a quantidade de wait states utilizada pelo processador no acesso à memória RAM.

Curiosidade: Mais importante do que saber o tempo de acesso da memória RAM, é saber o seu tempo de ciclo de acesso aleatório (também chamado tRC). Esse valor mede a capacidade de dois acessos consecutivos a endereços diferentes da memória RAM e varia de acordo com o tipo de circuito, modelo e fabricante. Por exemplo, um circuito de memória FPM de 70 ns tipicamente tem um tempo de ciclo de 130 ns (esse tempo cai para 110 ns se a memória for de 60 ns). Isso quer dizer que dois acessos consecutivos à memória RAM deverão ter um espaço de tempo de 130 ns entre eles! Nesse caso, o processador terá de esperar ainda mais!

Anúncios