La plupart d'entre nous qui sommes issus de l'électronique savent que la SRAM est plus rapide que la DRAM. Mais quand il s'agit de comparer la RAM avec la ROM, je ne suis pas sûr.
Ma question est liée au micro-contrôleur: "Si un code s'exécute directement à partir de RAM / ROM, dont les performances seront meilleures ?? 1) exécution à partir de RAM ou 2) exécution à partir de ROM ou 3) les deux fonctionneront de manière égale"
Considérant également le fait que la ROM est conçue pour avoir des vitesses de lecture plus élevées. alors que pour la RAM, il y a un compromis entre la vitesse de lecture et les capacités d'écriture.
microcontroller
ram
rom
Prince Rambade
la source
la source
Réponses:
La fiche technique devrait vous dire combien de temps prend chaque instruction et quelles sont les différences, le cas échéant, entre l'exécution à partir de la RAM ou de la ROM.
Pour les microcontrôleurs qui offrent la possibilité d'exécuter à partir de la RAM, c'est probablement plus rapide , ce qui est probablement le principal point d'utiliser de l'espace RAM supplémentaire pour exécuter le code. Il peut également y avoir des problèmes de chevauchement de récupération. Dans certains cas, il peut être plus rapide à exécuter à partir de la ROM car il s'agit d'une mémoire distincte et l'accès à la RAM peut se faire simultanément.
Encore une fois, la seule façon de savoir pour un micro particulier est de LIRE LA FICHE TECHNIQUE .
la source
Cela dépend entièrement de la mémoire et de l'architecture du processeur. En règle générale, la SRAM est plus rapide que le flash, en particulier sur les MCU à vitesse plus élevée (> 100 MHz). Les cellules binaires SRAM produisent une sortie de niveau logique (plus ou moins), tandis que la mémoire flash doit passer par un processus de détection de courant plus lent.
La rapidité (le cas échéant) dépend à nouveau de l'architecture - la taille des mots des mémoires, le nombre d'états d'attente sur chacun, la présence de la mise en cache, la taille des instructions du processeur, etc. Si vous utilisez un fréquence suffisamment basse, vous pouvez avoir zéro état d'attente sur le flash et la RAM, afin qu'ils puissent fonctionner à la même vitesse.
Le code est également important. Si votre code est strictement linéaire (pas de branchement), le flash pourrait pré-extraire les instructions assez rapidement pour garder le CPU saturé même à des fréquences plus élevées. Comme l'a dit Olin, un processeur d'architecture Harvard avec des chemins de lecture de programme et de données séparés pourrait fonctionner différemment lorsque le code et les données sont dans des mémoires différentes.
Les ROM métalliques (et autres mémoires non volatiles telles que FRAM) ont leurs propres caractéristiques et peuvent ou non être aussi rapides que SRAM. La capacité d'écrire ne fait pas nécessairement de différence; il s'agit davantage des caractéristiques de la sortie des cellules binaires et des circuits de détection.
La fiche technique vous donnera une idée approximative de la différence de vitesse, mais la seule façon de savoir avec certitude est de profiler votre code.
la source
"Exécuter un programme" nécessite une CPU avec une horloge synchrone. La mémoire lente peut être prise en charge soit en exécutant l'ensemble du système à une horloge suffisamment lente, soit en insérant
wait states
(cycles d'horloge supplémentaires de ne rien faire entre les phases de récupération et de décodage), actifs uniquement pour certaines plages d'adresses (voir l'ancien 8085 par exemple). La récupération des instructions CPU ne sait pas ou ne se soucie pas exactement du moment où les données sont réglées à leur valeur finale, tant qu'elles ne changent pas pendant l'intervalle de configuration / maintien.Un microcontrôleur a généralement toute sa mémoire sur puce, donc sauf indication contraire, je suppose que le système de mémoire est entièrement à zéro attente. (mais lisez la fiche technique pour confirmer). Les microcontrôleurs typiques sont censés être des solutions monopuce plus simples par rapport à un ordinateur de bureau, donc les états d'attente sont peu probables dans un microcontrôleur. Il est donc peu probable qu'un microcontrôleur ait des vitesses de mémoire sur puce incompatibles.
Une mémoire plus rapide coûte généralement plus cher (tension plus élevée, capacité plus faible, plus de demande). Un 80xx86 a une SRAM rapide dans le cache L2 et une SRAM encore plus rapide dans le cache L1, et beaucoup de puces DRAM plus lentes connectées à un contrôleur de mémoire. Ce type de système est beaucoup plus compliqué qu'un microcontrôleur et dépasse la portée de la question. (Mais d'un grand intérêt pour un ingénieur en informatique!)
la source