Ce composant doit compter modulo 16, posséde une entrée de comptage (Horloge), une entrée
de validation (Enable) et une entrée de remise à zéro (Clear).
Le comportement consiste à prendre
en compte les traitements seulement si Enable est à
1. Pour la suite, la remise à zéro (prise
en compte de Clear) ne peut se faire que sur le front actif
sur Horloge à condition que le signal Enable soit actif.
Le programme est :
module cptdecptmodulo16 (clk, en, clr,
preset , N) ;
input clk , en, clr, preset ;
output[3 : 0] N ;
reg [3 : 0] N ;
always @ (posedge
clk)
if (en)
begin
N = N + 1 ;
if (clr)
N = 0 ;
end
endmodule
L'ordre d'écriture
des traitements a son importance. Les évaluations
sont faites au cours du traitement dans le bloc always.
Il est possible de faire en sorte que l'évaluation
soit faite à la sortie du bloc always. Ceci se fait
par le changement du signe d'affectation "<="
(affectation dite non bloquante)
Ajouter un preset est aussi simple :
module cptdecptmodulo16 (clk, en, clr,
preset , N) ;
input clk , en, clr, preset ;
output[3 : 0] N ;
reg [3 : 0] N ;
always @ (posedge
clk)
if (en)
begin
N = N + 1
;
if (preset)
N = 15 ;
if (clr)
N = 0 ;
end
endmodule