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.1. Bascule D

C'est la mémoire élémentaire. Son comportement consiste à recopier l'état de l'entrée vers la sortie sur le signal actif d’horloge (ici le front montant). Elle est appelée « Latch » dans la littérature anglosaxonne.

Ce comportement se traduit en Verilog par :

module D1bit(d, clk, Q) ;

input d, clk ;

output Q ;

reg Q ;

always @ (posedge clk)

Q = d ;

endmodule

 

La bascule s’étend facilement à un nombre défini de bits :

module D8bit(d, clk, Q) ;

input [7 :0] d ;

input clk ;

output [7 :0] Q ;

reg [7 : 0] Q ;

always @ (posedge clk)

Q = d ;

endmodule

Attention : la ligne « input [7 :0] d, clk ; » déclarerait 2 bus 8 bits appelés d et clk.

Elle peut être paramétrable grâce au mot clé « parameter ». Ceci donne :

module Dnbit(d, clk, Q) ;

parameter n = 17;

input [n :0] d ;

input clk ;

output [n :0] Q ;

reg [n : 0] Q ;

always @ (posedge clk)

Q = d ;

endmodule

Il est facile de réaliser une bascule fonctionnant sur un front descendant simplement en remplaçant posedge par negedge.

Il est aussi facile de créer une bascule active sur niveau.

Attention au piège ! En pensant niveau, on peut penser qu'un bloc avec « always@ (clk)... » est la solution. C'est une erreur, le traitement n'est effectué que sur les changements d'état de clk (passage de 1 à 0 et de 0 à 1) et non tant que clk est égal à 1.

La solution consiste à avoir un bloc toujours effectué et une action conditionnelle à l'intérieur de ce bloc. Ceci est illustré par le programme suivant qui permet de faire un latch actif sur niveau 1 :

module D1bit(d, clk, Q) ;

input d, clk ;

output Q ;

reg Q ;

always

if (clk)

Q = d ;

endmodule

  

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