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
2.16.1. Des OU exclusif
2.16.2. La Bascule RS
2.16.3. Encodeur BCD - 7 segments
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.16.1. Des OU exclusif

 

A /Avec des ET, OU, NON

module OUX2_1(e1, e2, S);

input e1, e2 ;

output S ;

assign S = (e1 & !e2) | (!e1 & e2) ;

endmodule

B / OU Exclusif à 8 bits

On ne va pas se baser sur les équations à 8 entrées (trop long). Par-contre en instanciant le module précédent, la fonction OU Exclusif étant associative, on peut réaliser la programmation suivante :

module OUX8_1(e1, e2, e3, e4, e5, e6, e7, e8, S) ;

input e1, e2, e2, e3, e4, e5, e6, e7, e8 ;

output S ;

wire n1, n2, n3, n4, n5, n6 ;

OUX2_1 premierOUX (e1, e2, n1) ;

OUX2_1 deuxiemeOUX (e3, e4, n2) ;

OUX2_1 troisiemeOUX (e5, e6, n3) ;

OUX2_1 quatriemeOUX (e7, e8, n4) ;

OUX2_1 cinquiemeOUX (n1 , n2, n5) ;

OUX2_1 sixiemeOUX (n3 , n4, n6) ;

OUX2_1 septiemeOUX (n5 , n6, S) ;

endmodule

C / Avec l'opérateur OU Exclusif

module OUX2_1(e1, e2, S) ;

input e1, e2 ;

output S ;

assign S = e1 ^ e2 ;

endmodule

D / OU Exclusif à 8 bits

module OUX8_1(e1, e2, e3, e4, e5, e6, e7, e8, S) ;

input e1, e2, e2, e3, e4, e5, e6, e7, e8 ;

output S ;

assign S = e1 ^ e2 ^ e3 ^ e4 ^ e5 ^ e6 ^e7 ^ e8 ;

endmodule

Ou encore (en réfléchissant quelque peu) :

module OUX8_1(e1, e2, e3, e4, e5, e6, e7, e8, S) ;

input e1, e2, e2, e3, e4, e5, e6, e7, e8 ;

output S ;

// assign S = (e1 + e2 + e3 + e4 + e5 + e6 +e7 + e8 + 0) % 2 ; Pour comprendre

assign S = e1 + e2 + e3 + e4 + e5 + e6 + e7 + e8 ; // La solution : additions sur 1 bit à cause de S 

endmodule

En utilisant l'opérateur de réduction

module OUX8_1(e, S) ;

input [8 : 1 ] e ;

output S ;

assign S = ^e ;

endmodule

E / Description comportementale

module OUX2_1(e1, e2, S) ;

input e1, e2 ;

output S ;

reg S ;

always

if ((e1 && !e2) || (e2 && !e1))

S = 1 ;

else

S = 0 ;

endmodule

F / Par table de vérité

module OUX2_1(e1, e2, S) ;

input e1, e2 ;

output S ;

reg S ;

always

case ({e1, e2})

'b00 : S = 1 ;

'b11 : S = 1 ;

'b01 : S = 0 ;

'b10 : S = 0 ;

endcase

endmodule

 

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