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 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 controla o comportamento de flip-flops, registradores e máquinas de estados.

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
  • Period = 10 unidades de time
  • Frequência = 1/10 = 0.1 por unidade de time

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: Repeat para 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 ausente para gerar um clock que faz toggle a cada 4 time units (período = 8 time units).

O que fazer:

  1. Inicialize clk para 0 no time 0 usando um block initial
  2. Use um block always com um atraso para fazer toggle do clk a cada 4 time units

Experimente você mesmo

module clock_challenge;
  reg clk;
  
  // TODO: Passo 1 - Adicione o bloco initial para definir clk = 0
  
  
  // TODO: Passo 2 - Adicione o bloco always para alternar 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