Generación de reloj
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 71 de 90.
Una señal de reloj es una señal que conmuta continuamente entre 0 y 1 a intervalos regulares. Los relojes son esenciales para la lógica secuencial como los flip-flops y los contadores.
Por qué generar un reloj
En los testbenches, necesita un reloj para probar circuitos secuenciales. El reloj impulsa el comportamiento de los flip-flops, registros y máquinas de estados.
Métodos para generar un reloj
| Método | Descripción |
|---|---|
always con retardo # | El método más común |
Bucle forever | Método alternativo |
Bucle repeat | Para un número fijo de ciclos |
Método 1: Bloque Always con Retardo
reg clk;
initial begin
clk = 0;
end
always #5 clk = ~clk;clk = 0en el tiempo 0- Cada 5 unidades de tiempo,
clkconmuta
- Period = 10 unidades de time
- Frecuencia = 1/10 = 0.1 por unidad de time
Método 2: Bucle Forever
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endMismo resultado que el método always.
Método 3: Repeat para Cycles fijos
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
endGenera exactamente 10 edges de reloj (5 cycles completos), después se detiene.
Desafío
Agrega el código que falta para generar un reloj que alterne cada 4 unidades de tiempo (período = 8 unidades de tiempo).
Qué hacer:
- Inicializa
clka 0 en el tiempo 0 usando un bloqueinitial - Usa un bloque
alwayscon un retardo para alternarclkcada 4 unidades de tiempo
Pruébalo tú mismo
module clock_challenge;
reg clk;
// TODO: Paso 1 - Añade el bloque initial para establecer clk = 0
// TODO: Paso 2 - Añade el bloque always para alternar clk cada 4 unidades de tiempo
initial begin
$monitor("Time %0t: clk = %b", $time, clk);
#20;
$display("Clock generated for 20 time units");
$finish;
end
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
¿Qué es Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - Circuito de Compuertas Lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU13Temporización y retardos
¿Qué son los retardos?Retardos de compuertaRetardos de asignaciónDirectiva TimescaleGeneración de relojResumen - Control de temporización5Operadores Parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo