LOGIQUE PROGRAMMABLE EN VERILOG
Chapitre 1. Introduction
Chapitre 2. Traitement combinatoire et syntaxe du langage
Chapitre 3. L'usage de l'outil QUARTUS II
Chapitre 4. Description comportementale
4.1. Le bloc always et le type reg
4.2. Les opérateurs conditionnels
4.3. La mémoire élémentaire
4.4. L'alternative multiple
4.5. Exemple de description par table de vérité
4.6. Traitement séquentiel par l'exemple
4.7. Exercices
4.8. Solutions des exercices
4.8.1. Bascule JK
4.8.2. Compteur-décompteur 4 bits BCD avec chargement synchrone
4.8.3. Bascule 74LS73A
4.8.4. Compteur BCD modulo 100
4.8.5. Le compteur 74LS168
4.8.6. Le registre universel 74LS194
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

4.8.6. Le registre universel 74LS194

La lecture du symbole nous permet de voir qu'il s'agit d'un registre universel 4 bits synchrone permettant des décalages à droite et à gauche, le chargement synchrone. Il possède une entrée de remise à 0 asynchrone.

Son fonctionnement :

  • son évoluton est conditionnée par les fronts de clk,
  • Il présente 4 modes (S1 et S0) :
    • en mode 0 : rien ne se passe,
    • en mode 1 : décalage à droite avec entrée série gauche sur SRSER,
    • en mode 2 : décalage à gauche avec entrée série droite SLSER,
    • en mode 3 : chargement parallèle des entrées A, B, C et D

Remarque : attention au sens des décalages et ce qui est appelé droite et gauche dans le symbole, par rapport à l'ordre d'écriture des bits qui peut se trouver inversé.

Remarque : on se trouvera dans l'impossibilité de faire exactement le composant souhaité (le front montant de clk et l'activité à 0 de l'entrée CLR sont incompatibles). Elle mènerait à : « always @ (posedge clk or negedge clr) … », ce qui n'est pas compilable.

En utilisant le complément de l'entrée CLR, c'est possible et le dispostif fonctionne. La solution peut être la suivante :

module U74194 (clr_bar, s0, s1, clk, srser, a, b, c, d, slser, Q) ;

input clr_bar, s0, s1, clk, srser, a, b, c, d, slser ;

output [3 : 0] Q ;

wire clr ;

assign clr = ! clr_bar ;

always @ (posedge clk or posedge clr)

if (clr)

Q = 0 ;

else

case ({s1, s0}) :

2'b01 : Q = {Q, srser} ;

2'b10 : Q = {slser, Q} >>1;

2'b11 : Q = {d, c, b, a} ;

endcase

endmodule

En considérant les bits numérotés dans l'autre sens, on retrouve plus facilement les appellations (décalage à gauche, ...).

module U74194 (clr_bar, s0, s1, clk, srser, a, b, c, d, slser, Q) ;

input clr_bar, s0, s1, clk, srser, a, b, c, d, slser ;

output [0 : 3] Q ;

wire clr ;

assign clr = ! clr_bar ;

always @ (posedge clk or posedge clr)

if (clr)

Q = 0 ;

else

case ({s1, s0}) :

2'b01 : Q = {srser, Q} >>1 ;

2'b10 : Q = {Q, slser} ;

2'b11 : Q = {a, b, c, d} ;

endcase

endmodule

 

 

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