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.