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.6.1. Bascule D
4.6.2. Compteur modulo 16
4.6.3. Compteur de 4 à 28
4.6.4. Compteur/décompteur modulo 16
4.6.5. Compteur modulo 16 avec entrée de validation et RAZ synchrone
4.6.6. Compteur modulo 16 à chargement asynchrone
4.6.7. Registre à décalage 6 bits (1 entrée série - 1 sortie parallèle)
4.6.8. Registre à décalage 6 bits (1 entrée série - 1 sortie série)
4.7. Exercices
4.8. Solutions des exercices
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.6.7. Registre à décalage 6 bits (1 entrée série - 1 sortie parallèle)

Un registre à décalage 6 bits possède 6 cases mémoire. L'ordre de décalage est délivré par une horloge. Dans le cas présent, le décalage sera imposé vers la droite. L'entrée se fera à gauche. La sortie consiste à mettre en sortie l'ensemble des 6 bits.

Le programme peut dans un premier temps être décrit ainsi :

module RegDecalDr (clk ,e, S) ;

input e, clk;

output [5 : 0] S ;

reg [5 : 0] S ;

always @(posedge clk)

begin

S[0] = S[1] ;

S[1] = S[2] ;

S[2]= S[3] ;

S[3] = S[4] ;

S[4] = S[5] ;

S[5] = e ;

end

endmodule

Attention : l'ordre d'écriture est ici important avec l'opérateur d'affectation choisi (=), sinon il est quelconque avec l'opérateur (<=) qui reporte les affectations en fin de traitement.

 
En utilisant un autre principe, on peut raisonner sur l'opération globale de décalage.

La sortie doit être le contenu précédent sans le bit 0 mais en ayant ajouté à gauche la valeur de l'entrée.

On trouve alors la solution suivante, plus concise et surtout extensible à n bits :

module RegDecalDr (clk ,e, S) ;

input e, clk ;

output [5 : 0] S ;

reg [5 : 0] S ;

always @ (posedge clk)

S = {e, S} >> 1 ;

endmodule

Remarque : on ne peut pas comparer les efficacités de traitement, mais simplement la longueur du programme à écrire. On peut s'interroger  sur les possibilités d'extensions ou de généralisation du module. Il est fort probable que l'efficacité soit la même, c'est simplement une méthode de description différente.

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