Liste des cours‎ > ‎

Nanoprocesseur (23 janvier)

Vous allez construire un microprocesseur 8 bits simple mais efficace. Bien que le sujet de la leçon concerne plus le processeur lui-même que son environnement d’utilisation, nous présentons ici le système complet implanté sur la maquette de test. Le système proposé se compose :
  • Du microprocesseur implanté dans un circuit logique programmable Altera Cyclone II EP2C35 ;
  • D'une mémoire RAM contenant le programme et les données (cette mémoire est elle aussi intégrée dans le FPGA) ;
  • D’un haut-parleur piloté par un port de sortie du microprocesseur.


Quelques autres blocs ne sont pas représentés sur ce schéma : 

  • le générateur d’horloge sclk et la génération de la remise à zéro (reset_n)
  • les afficheurs pour le debug
  • d'éventuels autres périphériques...


Au cours de cette leçon vous allez :

  • étudier l’architecture du microprocesseur abordé dans la leçon sur le processeur,
  • concevoir le compteur de programme (PC) du microprocesseur,
  • concevoir le séquenceur qui contrôle le processeur (CTR)
  • concevoir l'ALU qui effectue les opérations arithmétiques du processeur
  • configurer un circuit logique programmable Altera afin qu’il réalise ce microprocesseur,
  • faire exécuter un programme de test puis un programme musical à votre microprocesseur sur la carte de test DE2,
  • et de manière libre : améliorer votre microprocesseur en enrichissant son jeu d’instructions...


 NomDescription
Type (vu du processeur)

 sclk

Horloge générale du processeur

 Entrée

 reset_n

Remise à zéro asynchrone et active à ’0’

 Entrée

 out

Port dont les bits peuvent être positionnés à ’1’ ou ’0’ et branché ainsi :

  • bit 0 : sur codec audio (et sur haut-parleur externe)
  • bits 7 à 1 : leds rouges

 Sortie

 ram_addr[7:0]

Adresse de l’accès à la RAM

 Sortie

 ram_data_write[7:0]

Sortie de l’accumulateur. Ce mot est mémorisé dans la RAM à l’adresse ram_addr si write vaut 1 (accès à la RAM en écriture)

 Sortie

 ram_data_read[7:0]

Mot lu dans la RAM à l’adresse ram_addr (accès à la RAM en lecture)

 Entrée

 write

Signal indiquant le type d'échange effectué avec la mémoire :

  • 1 pour une écriture
  • 0 pour une lecture

 Sortie




Travail demandé


Nous vous avons déjà préparé un squelette dans lequel ne manquent plus que l'ALU, le PC et le CTR (cf. page sur l'architecture interne du processeur).

À vous de les écrire...

Mais avant tout :
  • décompressez l'archive dans votre dépôt, et ajoutez là (git add / commit / push)
  • dans la suite nous n'ajouterez à votre dépôt que les sources nécessaires que vous rajouterez !
  • une fois que c'est fait, vous pouvez commencer à écrire les modules.

Vous allez les écrire  dans l'ordre suivant :
  1. le PC, qu'on testera en se plaçant dans le répertoire de plus haut niveau et en tapant make simu_pc. Si tout va bien, le simulateur Verilog vous affiche les chronogrammes de test et un message pour vous féliciter.
  2. l'ALU : cf la page sur l'ALU
  3. le contrôleur (séquenceur basique)


Une fois que vous les aurez tous écrits, testez l'ensemble en tapant (toujours le répertoire principal) : make simu. Des chronogrammes d'un programme typique (test.s) s'affichent.


Les chronogrammes doivent ressembler à ceux de la figure ci-dessous (cliquez ici pour l'avoir en grand).


Si tout va bien

Si les chronogrammes sont OK, alors synthétisez un programme musical, et faites le jouer par la maquette :

  • make chicken
  • make prg_chicken


Attention :

  1. si SW0 est à 0, alors c'est KEY3 qui joue le rôle d'horloge manuelle. On peut alors suivre le déroulement du programme sur les afficheurs (mais on entendra rien)
  2. si SW1 est à 1, l'horloge est la bonne (1MHz), et on entend la musique (mais on ne peut plus suivre le déroulement pas à pas...




ą
Alexis Polti,
12 déc. 2011 à 19:32
ċ
chicken.s
(6k)
Alexis Polti,
11 déc. 2011 à 15:35
Ċ
Alexis Polti,
11 déc. 2011 à 17:32
ċ
seance-processeur.tgz
(1081k)
Alexis Polti,
12 déc. 2011 à 20:01
ċ
test.s
(4k)
Alexis Polti,
11 déc. 2011 à 16:21