Quels sont les états d'attente de la mémoire flash?


10

J'utilise un microcontrôleur PowerPC freescale. Dans le module de mémoire flash de la fiche technique, le nombre d '"états d'attente de l'accès à la mémoire flash" est configurable.

Ce qui suit est la partie de la fiche technique soulevée ma question, elle est tirée de la description du registre des registres du module PFlash:

Ce champ doit être réglé sur une valeur correspondant à la fréquence de fonctionnement du PFlash et au temps réel d'accès en lecture du PFlash. Des fréquences de fonctionnement plus élevées nécessitent des réglages non nuls pour ce champ pour un fonctionnement correct du flash.
0 MHz, <23 MHz, états d'attente requis = 0 ---
23 MHz, <45 MHz, états d'attente requis = 1 ---
45 MHz, <68 MHz, états d'attente requis = 2 ---
68 MHz, <90 MHz, états d'attente requis = 3 ---

(PFlash est le module contrôleur Platform Platform)

Je comprends que le processeur est plus rapide que le flash, c'est pourquoi des états d'attente sont introduits. Ce que je ne comprends pas, c'est: si le processeur est plus rapide que le flash, alors c'est le processeur qui doit être ralenti pas le flash, mais le paragraphe ci-dessus dit le contraire (ou n'ai-je pas compris cela?), Il dit que dans le cas où le Pflash fonctionne avec des fréquences élevées, alors nous devons le ralentir en lui ajoutant des états d'attente supplémentaires !!

Quel est le problème avec ma compréhension?

Merci


1
Si j'ai bien compris, c'est le contrôleur qui peut être réglé à différentes vitesses; il faut donc attendre que la mémoire Flash réelle ait les données disponibles.
clabacchio

Réponses:


8

Pour amplifier la réponse de Stevenevh, tout type de logique, lorsqu'il reçoit un signal d'entrée, mettra un certain temps à produire un signal de sortie; la mémoire est souvent très lente par rapport à d'autres logiques. Souvent, il y aura une garantie que le signal de sortie deviendra valide dans un certain laps de temps, mais c'est tout. En particulier, il est possible que le signal change plusieurs fois dans cet intervalle, et il n'y aura aucune indication, avant la fin de cet intervalle, que le signal a atteint sa valeur finale "correcte".

Lorsqu'un microcontrôleur ou microprocesseur typique lit un octet (ou un mot, ou n'importe quelle unité) de mémoire, il génère une adresse et, quelque temps plus tard, examine la valeur produite par la mémoire et agit en conséquence. Entre le moment où le contrôleur génère l'adresse et le moment où il regarde la valeur de la mémoire, il ne se soucie pas quand ni si les signaux de sortie de la mémoire changent. D'un autre côté, si le signal de la mémoire ne s'est pas stabilisé à sa valeur finale au moment où le contrôleur le regarde, le contrôleur va mal lire la mémoire comme ayant conservé la valeur émise au moment où il a regardé. Normalement, le contrôleur examinait la valeur de la mémoire dès qu'il était prêt à en faire quelque chose, mais si la valeur de la mémoire n'était pas prête alors, cela pourrait ne pas fonctionner. Par conséquent, de nombreux contrôleurs ont la possibilité d'attendre un peu plus longtemps lorsqu'ils sont prêts à traiter les données de la mémoire, pour garantir que la sortie de la mémoire est réellement valide. Notez que l'ajout d'un tel retard ralentira les choses (le contrôleur aurait été heureux d'agir plus tôt sur les données de la mémoire), mais n'affectera pas l'exactitude du fonctionnement (sauf si les choses sont ralenties au point que d'autres obligations de synchronisation ne peuvent pas être remplies).


Agréable! Merci pour les détails utiles que vous avez expliqués!
MohamedEzz

1
@MemoryLeaks: Mon plaisir. Une chose importante à noter est que la réduction des états d'attente au-dessous des limites spécifiées accélérera le système, mais les lectures à partir de la mémoire peuvent donner arbitrairement des données incorrectes; en outre, «donner arbitrairement des données incorrectes» peut signifier «fournir des données correctes jusqu'à ce que l'appareil que vous avez conçu soit entre les mains de votre client, puis commencer à produire des données incorrectes assez souvent pour que le client soit très en colère contre vous».
supercat

1
Cela semble très proche de l'overclocking parallèle, mais plutôt d'une option configurable de celui-ci. Un moyen intéressant d'overclocker un MCU peut-être.
sherrellbc

1
@supercat, Une question que veut dire contrôleur est-ce le processeur ou le contrôleur de mémoire?
Mouin

1
@Mouin: Le contrôleur mémoire s'il y en a un, ou le processeur s'il n'y en a pas.
supercat

9

Les états d'attente sont ajoutés au cycle d'accès à la mémoire initié par la CPU. C'est donc bien le CPU qui doit attendre le Flash plus lent. Le contrôleur de mémoire signale "non prêt" à la CPU pendant un certain nombre de cycles (0 à 3), et pendant ce temps, la CPU reste dans son état actuel, c'est-à-dire après avoir écrit l'adresse Flash, mais pas encore lu les données. Ce n'est que lorsque le contrôleur de mémoire signale "données prêtes" que la CPU lira sur le bus de données et poursuivra son instruction (en verrouillant les données dans un registre ou dans la RAM).


1
Donc, en configurant ce paramètre, je dis au contrôleur de mémoire quand signaler exactement "données prêtes". Est-ce que je ne peux pas simplement dire à la mémoire de signaler "données prêtes" quand elles sont réellement prêtes?
MohamedEzz

1
@MemoryLeaks - C'est possible, et cela se fait par des processeurs asynchrones, qui sont rares. Il est plus courant et plus prévisible de tout synchroniser à l'aide d'une horloge. C'est donc soit un retard de cycle d'horloge (ou 2 ou 3), soit rien.
stevenvh

Merci pour votre réponse :) Donc pour résumer: la description dans ma question ci-dessus signifie que cela retardera le "CPU" et non le contrôleur Flash
MohamedEzz

1
@stevenvh le processeur raccroche littéralement ce qu'il reçoit les données de la mémoire, je veux dire, il arrête complètement l'exécution ou exécuterait-il d'autres instructions dans le cas d'un CPU en pipeline. Qu'en est-il des interruptions, je suppose qu'elles seraient réparées pendant que le CPU attend que la mémoire soit prête?
Miguel Sanchez

3

Le processeur pourrait avoir besoin de caler sur la mémoire, mais une conception intelligente n'aurait pas besoin de le faire.

Je pense que la technologie clé que vous ne connaissez pas est l' accès en mode rafale / page . Cela permet au bande passante des accès mémoire d'être très proche de la vitesse du processeur (mais probablement Flash est toujours le goulot d'étranglement car je n'ai jamais vu de microcontrôleur basé sur Flash qui fonctionne à> 200MhZ)

Cependant, la latence reste la même. Par exemple, pour les microcontrôleurs STM32F4 que j'utilise, #wait states = floor (clockSpeed ​​/ 30MhZ). Cela signifie que la latence est toujours de 33 ns, quelle que soit la vitesse d'horloge. Il y a un dicton, "L'argent peut acheter de la bande passante, mais la latence est éternelle ..."

Même si la bande passante Flash n'était pas suffisante pour occuper le processeur, vous pouvez facilement concevoir un cache de code qui stocke et prélève des instructions qui devraient s'exécuter. ST a un indice à ce sujet pour leurs microcontrôleurs STM32F4 (168 MhZ):

Grâce à l'accélérateur ART et à la mémoire Flash 128 bits, le nombre d'états d'attente indiqué ici n'affecte pas la vitesse d'exécution à partir de la mémoire Flash car l'accélérateur ART permet d'atteindre une performance équivalente à l'exécution du programme à 0 état d'attente.

En fait, la déclaration suggère également que le mode rafale n'est pas nécessaire et qu'une interface mémoire très large est également suffisante. Mais l'idée est la même (utiliser le parallélisme pour masquer la latence). Sur puce, les fils sont libres, donc une mémoire de 128 bits aurait du sens.


Les fils sont loin d'être "libres" sur une puce, de manière générale, mais l'augmentation de la largeur du bus entre une matrice de mémoire et un ensemble de verrous n'ajoute pas de fils. Si une puce a une matrice flash de 256 kbit organisée en une grille 512x512, le câblage et la logique pour condenser 512 colonnes en un bus 32 bits seront nécessaires si l'on place un verrou de 512 bits avant les fils et la logique de "condensation" ou un verrou large de 32 bits après eux.
supercat

1
Je veux dire qu'ils sont "gratuits" par rapport aux broches externes. Je sais que l'énergie du fil domine ces jours-ci et que la localité est importante, alors laissez-moi nuancer cette affirmation. Ils sont libres de faire, mais pas libres de s'allumer!
Yale Zhang

1
Je ne suis pas sûr de ce que vous entendez par «énergie filaire», mais même du point de vue spatial, les gros bus coûtent cher, mais si doubler la largeur d'un bus réduit sa longueur d'environ la moitié, le coût global restera à peu près le même.
supercat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.