LOGIQUE PROGRAMMABLE EN VERILOG
Chapitre 1. Introduction
Chapitre 2. Traitement combinatoire et syntaxe du langage
2.1. Le module
2.2. Les entrées - sorties
2.3. Les niveaux logiques
2.4. Le corps du programme
2.5. Les opérations logiques binaires
2.6. Les opérations logiques unaires
2.7. Les opérations arithmétiques
2.8. Les bus
2.9. La déclaration de paramètre
2.10. La concaténation
2.11. Exemple: l'additionneur 1 bit complet
2.12. Taille et codage des nombres
2.13. Extension des modules
2.14. Avantages et Inconvénients des différentes approches sur un exemple
2.15. Exercices
2.16. Solution des exercices
Chapitre 3. L'usage de l'outil QUARTUS II
Chapitre 4. Description comportementale
Chapitre 5. Projets : énoncés
Chapitre 6. Projets : vers la solution
Page d'accueil Table des matières Niveau supérieur Page précédente Bas de la page Page suivante

2.14. Avantages et Inconvénients des différentes approches sur un exemple

Dans la partie précédente, on a vu différentes approches et les conséquences. On doit toujours avoir un raisonnement général pour obtenir des solutions réutilisables. Verilog ne déroge pas à ce principe. A nous d'exploiter.

Soit l’exercice suivant :

Une association est constituée de quatre membres, dont un président. Face à un problème épineux, ils décident de voter à bulletin secret. Etant donné leur nombre, il est décidé qu'en cas d'égalité des suffrages, le vote du président (A ou L.S.B.) sera prépondérant et comptera double, les autres membres (B, C et D ou M.S.B.) intervenant pour une seule voix chacun.

L'un des membres, étant électronicien, leur propose alors une machine à voter de sa fabrication, comportant :

- en entrée : quatre boîtiers contenant chacun un interrupteur à disposition des intéressés (ouvert ? état "0"= NON; fermé ? état "1"= OUI),
- en sortie : une lampe L s'allume seulement si la majorité des OUI est obtenue (lampe L allumée = 1).

En établissant la table de vérité, on obtient, pour la sortie L, l’équation sans simplification suivante :

Doit-on la simplifier ?

  • oui pour diminuer le temps de frappe du programme,
  • pas nécessaire, la solution ne sera pas meilleure,
  • non, ce serait gaspiller son temps.


Si on la programme telle quelle :

module MachineAVoter (A, B, C, D, L) ;

input A, B, C, D ;

output L ;

assign L = (A & B & !C & !D) | (A & !B & C & !D) | (A & B & C & !D) | (A & !B & !C & D) | (A & B & !C & D) | (A & !B & C & D) | ( !A & B & C & D) | (A & B & C & D) ;

endmodule

On peut aussi prendre du recul avec le problème. La lampe s’allumera lorsque le président est favorable avec au moins un des autres membres ou alors que les 3 autres membres sont favorables. Ce qui se traduit par l’équation suivante :

L = A . (B + C + D) + B . C . D

On obtient alors :

module MachineAVoter (A, B, C, D, L) ;

input A, B, C, D ;

output L ;

assign L = A & (B | C | D) | (B & C & D) ;

endmodule

On peut mettre le président à part des autres électeurs. On distingue le président et les membres. Ainsi une solution utilisant les opérateurs unaires peut se montrer très efficace :

 

module MachineAVoter (President, Membres, L) ;

input President ;

input [2 : 0] Membres ;

output L ;

assign L = (President & |Membres) | &Membres ;

endmodule


Page d'accueil Table des matières Niveau supérieur Page précédente Haut de la page Page suivante