Menu
Coddy logo textTech

Geração de Clock

Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 71 de 90.

Um clock é um sinal que alterna continuamente entre 0 e 1 em intervalos regulares. Clocks são essenciais para a lógica sequencial, como flip-flops e contadores.

Por que Gerar um Clock

Em testbenches, você precisa de um clock para testar circuitos sequenciais. O clock define o comportamento de flip-flops, registradores e máquinas de estado.

Métodos para Gerar um Clock

MétodoDescrição
always com atraso #Método mais comum
Loop foreverMétodo alternativo
Loop repeatPara um número fixo de ciclos

Método 1: Bloco Always com Atraso

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk;
  • clk = 0 no tempo 0
  • A cada 5 unidades de tempo, clk alterna
  • Período = 10 unidades de tempo
  • Frequência = 1/10 = 0.1 por unidade de tempo

Método 2: Loop Forever

reg clk;

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

Mesmo resultado que o método always.

Método 3: Repetir por Ciclos Fixos

reg clk;

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

Gera exatamente 10 bordas de clock (5 ciclos completos) e depois para.

challenge icon

Desafio

Adicione o código que falta para gerar um clock que alterna a cada 4 unidades de tempo (período = 8 unidades de tempo).

O que fazer:

  1. Inicialize clk como 0 no tempo 0 usando um bloco initial
  2. Use um bloco always com um atraso para alternar clk a cada 4 unidades de tempo

Folha de consulta

Um clock alterna entre 0 e 1 em intervalos regulares. Período = 2 × atraso.

Método 1: Bloco always (mais comum)

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk; // Período = 10

Método 2: Loop forever

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

Método 3: Repeat (número fixo de bordas)

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

Experimente você mesmo

module clock_challenge;
  reg clk;
  
  // TODO: Passo 1 - Adicione um bloco initial para definir clk = 0
  
  
  // TODO: Passo 2 - Adicione um bloco always para alternar o clk a cada 4 unidades de tempo
  

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

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos