Travail à faire

L'addition de 2 mots de N bits peut être réalisée à partir de N cellules élémentaires d'addition sur 1bit.

Par analogie, l'ALU sera conçue de façon hiérarchique à partir d'une cellule élémentaire réalisant les opérations demandées sur 1bit. On mettra ensuite 4 exemplaires de cette cellule élémentaire côte à côte afin de réaliser l'ALU de 4 bits.

On commencera donc par la réalisation de la cellule élémentaire sur 1 bit.

 

4.1. La "cellule" 1 bit

  • Le tableau suivant définit l'interface externe de la cellule 1 bit.

Nom

Type

Utilisation

Ai

entrée

Premier opérande de la cellule. (sur 1bit)

Bi

entrée

Deuxième opérande de la cellule. (sur 1bit)

CODE[2:0]

entrée

Code déterminant l'opération à effectuer (sur 3 bits)

CIN

entrée

Retenue entrante, utilisée ou non, suivant l'opération demandée

Si

sortie

Résultat sortant de cellule. (sur 1bit)

COUT

sortie

Eventuelle retenue sortante dont l'interprétation dépend de l'opération effectuée

 

  1. En vous aidant du cours sur les fonctions logiques de base et les opérateurs arithmétiques, définissez l'architecture de cette cellule. C'est un travail papier, vous pouvez à votre gré faire un shéma, définir des expressions algébriques ou des tables de vérité.

  2. Prenez le temps de lire les deux premières partie de la page décrivant la syntaxe du SystemVerilog.

  3. Enfin, décrivez en SystemVerilog la structure de votre cellule, en complétant le fichier cellule.sv qui est déjà ouvert dans la fenêtre de l'éditeur eVim. Respectez scrupuleusement les noms des signaux (majuscules-minuscules) et les indications. Vous écrirez séparément le code pour Si et le code pour COUT.

Nous avons préparé un environnement de vérification de votre cellule:

  1. Sauvez votre fichier cellule.sv puis simulez votre cellule. Pour cela, exécutez la commande make sim_cell depuis la fenêtre de terminal déjà ouverte.

Si des erreurs sont signalées, vous devez corriger le fichier de code-source de votre cellule, puis relancer la simulation.

 

4.2. L'ALU 4bits

L'ALU 4 bits est obtenue en assemblant quatre cellules de base.

  1. Définissez l'organisation de cette structure
  2. Complétez le fichier alu.sv

  3. Vérifiez le bon comportement de votre ALU en utilisant la commande make sim_alu

Pour le moment, nous n'avons fait que des simulations, il reste à intégrer réellement votre ALU dans la maquette. La figure suivante décrit l'interface simplifiée entre votre ALU et les éléments de la maquette. Cette interface existe et vous n'avez pas à la réaliser.

 

 

  1. Executez la commande make syn_alu qui permet de réaliser la synthèse de l'ensemble du projet, et de générer la netlist pour la future programmation du FPGA.

Cette étape prend un certain temps de calcul pour s'exécuter, d'où l'intérêt de corriger les erreurs avant, en faisant des simulations. Le synthétiseur peut détecter des erreurs que la simulation n'a pas mises en évidence. Si tel est le cas, faites vous aider par votre encadrant pour en déterminer l'origine.

  1. Avant de passer aux phases suivantes qui utuilisent le FPGA de la maquette ALTERA, vérifiez que la maquette est connectée, alimentée, et mise en marche (LEDs allumées).

  2. Envoyez le programme au FPGA de la maquette, grâce à la commande make prg_alu.

Une fois le téléchargement effectué, vous pouvez tester le fonctionnement de votre ALU (électronique cette fois, non simplement simulé), en jouant sur les interrupteurs et les bouton-poussoirs. Le tableau suivant donne la correspondance des entrées/sorties sur la maquette:

 

Signal

type

correspondance

type

A

entrée

SW[17:14]

interrupteurs

B

entrée

SW[13:10]

interrupteurs

CODE

entrée

SW[9:7]

interrupteurs

CIN

entrée

Key[0]

bouton poussoir

S

sortie

Hex0

Aff. 7 segments

COUT

sortie

Hex1

Aff. 7 segments

  1. Montrez le résultat de votre travail à un encadrant du TP...

4.3 Temps de calcul d'un Additionneur 8bits

  1. A partir de l'ALU 4bits, déterminez la structure d'une ALU 8 bits
  2. Complétez le fichier alu_8bits.sv
  3. Simulez par la commande make sim_8bits.

Mesure des temps de propagation en mode addition

 

Pour mesurer les temps de calcul en mode additionneur de votre ALU 8bits, nous avons préparé une configuration où le code est forcé à la valeur correspondant à l'addition:

 

  • L'entrée A est forcée à 11111111

  • L'entrée B est forcée à 00000000

  • La retenue entrante CIN a été reliée à un signal d'horloge lclk qui prend à intervale régulier les valeurs 1 et 0.

 

  • 4. Synthétisez l'alu 8 bits par la commande make syn_8bits

  • Programmez le FPGA par la commande make prg_8bits

    • Quelle valeur doit prendre la sortie S lorsque Cin vaut 0 ?
    • Quelle valeur doit prendre la sortie S lorsque Cin vaut 1 ?

Quand la retenue entrante passe de 0 à 1, le changement de S n'est pas instantané, c'est ce que vous devez observer. Pour cela nous avons connecté les sondes de l'analyseur logique. Les sorties suivantes sont visualisables:

 

  • lclk

    S0 à S7 : les 8 sorties de l'ALU

    Cout

  • Configurez l'analyseur logique pour qu'il se synchronise sur un front du signal de la sonde correspondant à lclk. (faites vous aider pour cela par un encadrant)
  • Observez les signaux, notez le temps de sortie de chacun des bits de S par rapport à l'arrivée de la retenue.
  • Expliquez le comportement des sorties.
  • Notez de même le temps de calcul total de l'addition.

 

4.4. Addition de 3 mots de 8bits

Nous désirons additionner 3 mots A,B et C codés sur 8bits. Le résultat attendu est codé sur 8 bits.

L'équation attendue est donc : S = A + B + C + Cin

  1. Déterminez la structure de calcul nécessaire en utilisant 2 instances de l'ALU 8bits du paragraphe 4.3
  2. Complétez le fichier alu_abc.sv
  3. Vérifiez votre structure par la commande make sim_abc
  4. Synthétisez vote alu par la commande make syn_abc

Nous allons déterminer la vitesse de calcul de votre structure en utilisant le shéma suivant:

 

 

  1. AVANT DE PROGRAMMER votre alu, répondez au mini qcm suivant, et justifiez votre réponse (jouez le jeu SVP...)

    1. Je pense que le temps de calcul sera proche du temps de calcul de l'ALU 8bits.
    2. Je pense que le temps de calcul sera proche du double du temps de calcul de l'ALU 8bits
    3. Je n'ai aucune idée de la relation avec le temps de calcul de l'ALU 8bits
  2. Programmez votre FPGA par la commande make prg_abc

  3. Examinez la sortie des signaux, et remettez éventuellement en cause la réponse précedente.

 

4.5 Un drôle d'additionneur 8 bits

Le shéma suivant représente une variante d'additionneur 8bits utilisant votre ALU 4 bits (celle du paragraphe 4.2)

 

 

  1. Complétez le fichier alu_csa.sv en reproduisant le montage proposé.
  2. Vérifiez votre ALU par la commande make sim_csa
  3. Synthétisez : make syn_csa
  4. Programmez : make prg_csa
  5. Examinez les sorties, déterminez le temps de calcul de l'addition 8bits et comparez au résultat du paragraphe 4.3
  6. Expliquez le résultat obtenu, et les avantages et inconvénients d'un tel montage.