Architecture du coeur

Le cœur, comme illustré à la figure ci-dessous est composé de quelques registres, d’une unité de calcul, d’un compteur de programme et d’une unité de contrôle.

Tous les registres du microprocesseur sont pilotés par l’horloge sclk (comme horloge système, system clock en anglais) et remis à zéro par l’état bas du signal reset_n.





Le compteur de programme (PC)

Le compteur de programme (8 bits) sert à stocker l’adresse de l’instruction courante.

Son mode "standard" de fonctionnement est de s’auto-incrémenter lors des phases IF et AF pour aller chercher en séquence les différents octets des instructions à exécuter. L’incrémentation se fait au moyen du signal inc_PC.

En cas d’instruction de saut, il n’est pas incrémenté, mais directement chargé (lors de la phase AF) avec le contenu du bus de donnée ram_data[7..0], grâce au signal load_PC.

Le signal load_PC est prioritaire par rapport au signal inc_PC.


Le séquenceur de contrôle (CTR)

Cette unité contient un séquenceur basique en charge de séquencer les différents cycles d’une instruction :
  1. chargement d’une instruction,
  2. chargement de l’opérande,
  3. puis exécution
et de générer les signaux de contrôle des différents blocs, sans oublier, bien sûr, le signal ram_write permettant d'écrire en mémoire.

Les registres de mémorisation

Ce bloc regroupe en fait les quatre registres suivants :
  • le registre de sortie pour le buzzer : BZ
  • le registre d’accumulation : ACC (+Z et C)
  • le registre d’instruction : I
  • le registre d’adresse : ADDR

Tous ces registres fonctionnent de la même façon : l’entrée du registre xxx est mémorisée sur le front montant de l’horloge si le signal d'enable correspondant (load_xxx) est à 1.


Le multiplexeur d’adresses (MUX_ADDR, en sortie du PC)

Ce multiplexeur permet de choisir qui, de l’adresse "pointeur programme" PC ou de l’adresse de données AD, doit être envoyé sur le bus d’adresse ram_addr de la mémoire.

Le choix de l’un ou de l’autre dépend de l’état courant de fonctionnement du microprocesseur. De manière générale, lorsque le microprocesseur va chercher une instruction en mémoire, PC est sélectionné, et lorsque le microprocesseur va traiter une donnée en mémoire, AD est sélectionné.

Le choix est contrôlé par le signal sel_adr. La table de vérité de cette fonction est :

  • sel_adr == 0 implique ram_addr <= PC
  • sel_adr == 1 implique ram_addr <= AD


L’ALU, unité arithmétique et logique

Ce bloc prend comme opérandes le contenu de l’accumulateur et le bus de donnée de la RAM, et effectue dessus l’opération indiquée par I. Selon le type d’opération, une retenue entrante peut éventuellement être prise en compte (C_out).

Deux bits sont générés :
  • Z qui indique si le résultat de l’opération effectuée est nul
  • C qui indique si une éventuelle retenue sortante est générée.



Comments