Menu
Coddy logo textTech

Génération d'horloge

Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 71 sur 90.

Une horloge est un signal qui bascule continuellement entre 0 et 1 à intervalles réguliers. Les horloges sont essentielles pour la logique séquentielle comme les bascules et les compteurs.

Pourquoi générer une horloge

Dans les bancs d'essai (testbenches), vous avez besoin d'une horloge pour tester les circuits séquentiels. L'horloge pilote le comportement des bascules (flip-flops), des registres et des machines à états.

Méthodes pour générer une horloge

MéthodeDescription
always avec un délai #Méthode la plus courante
Boucle foreverMéthode alternative
Boucle repeatPour un nombre fixe de cycles

Méthode 1 : Bloc Always avec délai

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk;
  • clk = 0 au temps 0
  • Toutes les 5 unités de temps, clk bascule
  • Période = 10 unités de temps
  • Fréquence = 1/10 = 0.1 par unité de temps

Méthode 2 : Boucle Forever

reg clk;

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end

Même résultat que la méthode always.

Méthode 3 : Répéter pour des cycles fixes

reg clk;

initial begin
  clk = 0;
  repeat (10) begin
    #5 clk = ~clk;
  end
end

Génère exactement 10 fronts d'horloge (5 cycles complets), puis s'arrête.

challenge icon

Défi

Ajoutez le code manquant pour générer une horloge qui bascule toutes les 4 unités de temps (période = 8 unités de temps).

Ce qu'il faut faire :

  1. Initialisez clk à 0 au temps 0 en utilisant un bloc initial
  2. Utilisez un bloc always avec un délai pour faire basculer clk toutes les 4 unités de temps

Aide-mémoire

Une horloge bascule entre 0 et 1 à intervalles réguliers. Période = 2 × délai.

Méthode 1 : Bloc always (la plus courante)

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk; // Période = 10

Méthode 2 : Boucle forever

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

Méthode 3 : Repeat (nombre fixe de fronts)

initial begin
  clk = 0;
  repeat(10) #5 clk = ~clk; // 10 fronts = 5 cycles
end

Essayez vous-même

module clock_challenge;
  reg clk;
  
  // TODO: Étape 1 - Ajouter un bloc initial pour définir clk = 0
  
  
  // TODO: Étape 2 - Ajouter un bloc always pour basculer clk toutes les 4 unités de temps
  

  initial begin
    $monitor("Time %0t: clk = %b", $time, clk);
    #20;
    $display("Clock generated for 20 time units");
    $finish;
  end
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux