IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Le blog de f-leb

[FPGA] Créer un circuit logique pour faire un compteur

Noter ce billet
par , 08/08/2022 à 08h00 (2492 Affichages)
Notre compteur N bits en free running se contente d’incrémenter une valeur (interne) à chaque front montant du signal d’horloge CLK. Codée sur N bits, la valeur count du compteur peut évoluer entre 0 et 2N-1, puis reprend à zéro après débordement. Le comptage est bloqué si le signal ENA (Enable) est à l’état bas. Sur une impulsion du signal SCLR (Synchronous Clear), la valeur du compteur est forcée à zéro. Une impulsion est délivrée sur la sortie TC (Terminal Count) lorsque la valeur maximale 2N-1 est atteinte.

Nom : bloc-counter.png
Affichages : 297
Taille : 5,5 Ko

Exemple de simulation pour un compteur 3 bits :

Nom : simul-counter.png
Affichages : 274
Taille : 28,0 Ko

Les fonctionnalités d’un compteur peuvent être étendues avec d’autres signaux de contrôle pour compter dans les deux sens, compter/décompter en free running ou sur événement, signaler une valeur nulle ou un débordement du compteur, réinitialiser sa valeur, bloquer et reprendre le comptage/décomptage, capturer une valeur du compteur, et la comparer à une autre valeur, etc.
Par exemple, connaître l’évolution d’un compteur entre deux événements permet de déterminer la durée entre ces deux événements, connaissant la fréquence de l’horloge CLK. (Pensez à un capteur à ultrason pour mesurer une distance d’un obstacle où un compteur part de zéro au moment de l’émission du train d’ultrasons, et sa valeur relevée au retour du train après réflexion par l’obstacle).

Avec notre version simplifiée, on sait qu’avec une horloge à 50MHz et un compteur 19 bits (N=19), le signal TC délivre une impulsion au bout de (1/50.106)x219=10,49ms (si le compteur part de zéro et n’est pas interrompu).

On donne le code Verilog du module counter.v :
Code verilog : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module counter (CLK, ENA, SCLR, TC);

	parameter N = 3;	// compteur N bits, valeur N par défaut

	input	CLK,	// horloge 'clock'
		ENA,    // enable
		SCLR;	// synchronous clear
	output TC;	// terminal count

	reg [N-1 : 0] count;	// compteur N bits

	assign TC = (count == {N{1'b1}});	// concaténation de 1 en binaire, N fois

	always @(posedge CLK) begin	// sur front montant de l'horloge	
		if (SCLR) count <= 0; // synchronous clear
		else begin
			if (ENA) count <= count + 1'b1;		
		end
	end
	
endmodule

Ci-dessous, une représentation des éléments synthétisés pour notre compteur 3 bits :

Nom : counter-synthesis.png
Affichages : 299
Taille : 35,4 Ko

Bilan de la synthèse : 3 « registres » (count[0], count[1] et count[2]) ont été mobilisés, en fait une bascule D par bit du compteur, et 5 autres éléments logiques (LOGIC_CELL_COMB) qui sont des LookUp Tables (LUT).
La copie d’écran montre en surbrillance le détail de la configuration de la LUT qui alimente la sortie TC (Terminal Count). C’est la LUT la plus facile à analyser, on voit que la sortie TC est à 1 lorsque les 3 bits du compteur sont aussi à 1 (configuration en cellule ET à 3 entrées).
L’analyse complète du circuit reste un bel exercice de logique séquentielle, mais on préférera sans doute faire confiance à sa description par un langage HDL et au synthétiseur

Billet précédent [FPGA] Créer un circuit logique pour détecter les fronts d’un signal

Envoyer le billet « [FPGA] Créer un circuit logique pour faire un compteur » dans le blog Viadeo Envoyer le billet « [FPGA] Créer un circuit logique pour faire un compteur » dans le blog Twitter Envoyer le billet « [FPGA] Créer un circuit logique pour faire un compteur » dans le blog Google Envoyer le billet « [FPGA] Créer un circuit logique pour faire un compteur » dans le blog Facebook Envoyer le billet « [FPGA] Créer un circuit logique pour faire un compteur » dans le blog Digg Envoyer le billet « [FPGA] Créer un circuit logique pour faire un compteur » dans le blog Delicious Envoyer le billet « [FPGA] Créer un circuit logique pour faire un compteur » dans le blog MySpace Envoyer le billet « [FPGA] Créer un circuit logique pour faire un compteur » dans le blog Yahoo

Tags: fpga, verilog
Catégories
Programmation , FPGA

Commentaires