O que são estados de espera da memória flash?

10

Estou usando um microcontrolador PowerPC em escala livre. No módulo de memória flash da folha de dados, o número de "estados de espera do acesso à memória flash" é configurável.

A seguir, a parte da folha de dados que foi levantada, foi retirada da descrição do registro dos registros do módulo PFlash:

Este campo deve ser definido como um valor correspondente à frequência de operação do PFlash e ao tempo real de acesso de leitura do PFlash. Frequências operacionais mais altas exigem configurações diferentes de zero para este campo para uma operação adequada do Flash.
0 MHz, <23 MHz, estados de espera necessários = 0 a
23 MHz, <45 MHz, estados de espera necessários = 1 a
45 MHz, <68 MHz, estados de espera necessários = 2 a
68 MHz, <90 MHz, estados de espera necessários = 3 ---

(PFlash é o módulo do controlador Platform Flash)

Entendo que o processador é mais rápido que o flash, é por isso que os estados de espera são introduzidos. O que eu não entendo é: se o processador é mais rápido que o flash, então é o processador que precisa ser mais lento, não o flash, mas o parágrafo acima diz o contrário (ou eu não entendi isso?) diz que, caso o Pflash seja operado com altas frequências, precisamos abrandá-lo adicionando estados de espera adicionais !!

O que há de errado com meu entendimento?

obrigado

MohamedEzz
fonte
11
Se bem entendi, é o controlador que pode ser configurado para diferentes velocidades; portanto, é necessário aguardar que a memória Flash real tenha os dados disponíveis.
clabacchio

Respostas:

8

Para amplificar a resposta de stevenvh, qualquer tipo de lógica, quando receber um sinal de entrada, levará algum tempo para produzir um sinal de saída; a memória geralmente é muito lenta em comparação com outra lógica. Freqüentemente, haverá uma garantia de que o sinal de saída se tornará válido dentro de um certo período de tempo, mas é isso. Em particular, é possível que o sinal mude várias vezes dentro desse intervalo, e não haverá indicação, antes do final desse intervalo, de que o sinal atingiu seu valor "correto" final.

Quando um microcontrolador ou microprocessador típico lê um byte (ou palavra, ou qualquer unidade) de memória, ele gera um endereço e, algum tempo depois, analisa o valor emitido pela memória e age sobre ele. Entre o momento em que o controlador gera o endereço e o tempo em que olha o valor da memória, não se importa quando ou se os sinais de saída da memória mudam. Por outro lado, se o sinal da memória não tiver se estabilizado em seu valor final no momento em que o controlador olhar para ele, o controlador interpretará mal a memória como tendo mantido qualquer valor que estava sendo emitido no momento em que olhou. Normalmente, o controlador examinaria o valor da memória assim que estivesse pronto para fazer algo com ele, mas se o valor da memória não estivesse pronto, isso poderia não funcionar. Consequentemente, muitos controladores têm a opção de esperar um pouco mais depois de estarem prontos para processar dados da memória, para garantir que a saída da memória seja realmente válida. Observe que adicionar esse atraso reduzirá a velocidade das coisas (o controlador ficaria feliz em agir sobre os dados da memória mais cedo), mas não afetará a correção da operação (a menos que as coisas diminuam a velocidade tanto que outras obrigações de tempo não possam ser cumpridas).

supercat
fonte
Agradável! Obrigado pelos detalhes úteis que você explicou!
MohamedEzz 27/02
11
@MemoryLeaks: O prazer é meu. Um aspecto importante a ser observado é que reduzir os estados de espera abaixo dos limites especificados fará com que o sistema funcione mais rapidamente, mas as leituras da memória podem gerar arbitrariamente dados incorretos; além disso, "gerar dados incorretos arbitrariamente" pode significar "gerar dados corretos até que o dispositivo que você projetou esteja nas mãos de seus clientes e, em seguida, comece a produzir dados incorretos com frequência suficiente para deixar o cliente muito zangado com você".
Supercat 27/02
11
Isso parece muito próximo ao overclocking, mas é mais uma opção configurável. Maneira interessante de fazer overclock em um MCU, talvez.
Julio
11
@ supercat, Uma pergunta que se entende por controlador é o processador ou o controlador de memória?
Mouin
11
@ Muin: O controlador de memória, se houver, ou o processador, se não houver.
Supercat #
9

Os estados de espera são adicionados ao ciclo de acesso à memória iniciado pela CPU. Portanto, é realmente a CPU que precisa aguardar o Flash mais lento. O controlador de memória sinaliza "não está pronto" para a CPU por vários ciclos (0 a 3) e, enquanto o faz, a CPU permanece em seu estado atual, ou seja, tendo escrito o endereço Flash, mas ainda não está lendo os dados. Somente quando o controlador de memória sinaliza "dados prontos", a CPU lê o barramento de dados e continua suas instruções (travando os dados em um registro ou na RAM).

stevenvh
fonte
11
Então, definindo essa configuração, estou dizendo ao controlador de memória quando sinalizar exatamente "dados prontos". Não posso simplesmente dizer à memória para sinalizar "dados prontos" quando eles realmente estiverem prontos?
MohamedEzz 27/02
11
@MemoryLeaks - Isso é possível e é feito por processadores assíncronos, que são raros. É mais comum e mais previsível sincronizar tudo usando um relógio. Portanto, é um atraso no ciclo do relógio (ou 2 ou 3) ou nada.
27412 stevenvh
Obrigado pela sua resposta :) Assim, para resumir: a descrição na minha pergunta acima meios que irá atrasar o "CPU" e não o controlador flash
MohamedEzz
11
@stevenvh o processador desliga literalmente isso, recebe os dados da memória, quer dizer, interrompe completamente a execução ou executa outras instruções no caso de uma CPU em pipeline. E quanto às interrupções, acho que elas seriam atendidas enquanto a CPU aguarda a memória estar pronta?
Miguel Sanchez
3

O processador pode precisar travar na memória, mas um design inteligente não precisa.

Acho que a principal tecnologia que você não conhece é o acesso ao modo burst / página . Isso permite que a largura de banda dos acessos à memória esteja muito próxima da velocidade do processador (mas provavelmente o Flash ainda é o gargalo, pois nunca vi um MCU baseado em Flash que roda a> 200MhZ)

No entanto, a latência permanece a mesma. Por exemplo, para os MCUs STM32F4 que estou usando, #wait states = floor (clockSpeed ​​/ 30MhZ). Isso significa que a latência é sempre 33ns, independentemente da velocidade do relógio. Há um ditado: "O dinheiro pode comprar largura de banda, mas a latência é para sempre ..."

Mesmo que a largura de banda do Flash não seja suficiente para manter a CPU ocupada, é possível criar facilmente um cache de código que armazene e prefira instruções que se espera que sejam executadas. O ST tem uma dica sobre isso para seus MCUs STM32F4 (168 MhZ):

Graças ao acelerador ART e à memória Flash de 128 bits, o número de estados de espera fornecidos aqui não afeta a velocidade de execução da memória Flash, pois o acelerador ART permite obter um desempenho equivalente à execução do programa no estado de espera 0.

Na verdade, a declaração também sugere que o modo burst não é necessário e que uma interface de memória muito ampla também é suficiente. Mas a ideia é a mesma (usando o paralelismo para ocultar a latência). No chip, os fios são livres, portanto uma memória de 128 bits faria sentido.

Yale Zhang
fonte
Os fios estão longe de "livres" em um chip, de modo geral, mas aumentar a largura do barramento entre uma matriz de memória e um conjunto de travas não adiciona fios. Se um chip possui um conjunto de flash de 256kbit organizado como uma grade de 512x512, será necessária a fiação e a lógica para condensar 512 colunas em um barramento de 32 bits, quer se coloque uma trava de 512 bits antes dos fios e lógica "condensadores" ou uma trava larga de 32 bits depois deles.
supercat
11
Quero dizer, eles são "gratuitos" em comparação com pinos externos. Sei que a energia do fio domina atualmente e que a localidade é importante, então deixe-me qualificar essa afirmação. Eles são livres para criar, mas não são livres para serem ativados!
Yale Zhang
11
Não sei ao certo o que você quer dizer com "energia de arame", mas mesmo do ponto de vista espacial, os ônibus grandes são caros, mas se a duplicação da largura de um ônibus reduz seu comprimento aproximadamente pela metade, o custo total permanecerá o mesmo.
Supercat