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étodo | Descrição |
|---|---|
always com atraso # | Método mais comum |
Loop forever | Método alternativo |
Loop repeat | Para 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 = 0no tempo 0- A cada 5 unidades de tempo,
clkalterna
- 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
endMesmo 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
endGera exatamente 10 bordas de clock (5 ciclos completos) e depois para.
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:
- Inicialize
clkpara 0 no time 0 usando um blockinitial - Use um block
alwayscom um atraso para fazer toggle doclka 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
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU13Temporização e Atrasos
O que são AtrasosAtrasos de PortaAtrasos de AtribuiçãoDiretiva TimescaleGeração de ClockRecapitulação - Controle de Temporização2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo