Generación de reloj
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 71 de 90.
Un reloj es una señal que cambia 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 bancos de pruebas, necesitas un reloj para probar circuitos secuenciales. El reloj controla el comportamiento de los flip-flops, los registros y las máquinas de estados.
Métodos para generar un reloj
| Método | Descripción |
|---|---|
always con un retraso de # | 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 retraso
reg clk;
initial begin
clk = 0;
end
always #5 clk = ~clk;clk = 0en el tiempo 0- Cada 5 unidades de tiempo,
clkcambia de estado
- Período = 10 unidades de tiempo
- Frecuencia = 1/10 = 0.1 por unidad de tiempo
Método 2: Bucle infinito
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endEl mismo resultado que el método always.
Método 3: Repetir durante ciclos fijos
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
endGenera exactamente 10 flancos de reloj (5 ciclos completos) y después se detiene.
Desafío
Añade el código que falta para generar un reloj que cambie de estado cada 4 unidades de tiempo (periodo = 8 unidades de tiempo).
Qué hacer:
- Inicializa
clka 0 en el tiempo 0 usando un bloqueinitial - Usa un bloque
alwayscon un retraso para cambiar el estado declkcada 4 unidades de tiempo
Pruébalo tú mismo
module clock_challenge;
reg clk;
// TODO: Paso 1 - Añade un bloque initial para establecer clk = 0
// TODO: Paso 2 - Añade un 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 VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operadores, parte 1
Operadores aritméticosOperador móduloOperadores de comparaciónRepaso: matemáticas simplesOperadores bit a bit7Asignaciones y compuertas
Asignación continuaAsignación con operadoresPrimitivas de compuertas integradasCompuertas AND, OR y NOTCompuertas XOR y XNORRepaso: circuito de compuertas lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU13Temporización y retrasos
Qué son los retrasosRetrasos de puertaRetrasos de asignaciónDirectiva de escala temporalGeneración de relojRepaso: control de la temporización5Operadores, parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalRepaso: desafío de operadores11Bucles
Bucle ForBucle WhileBucle de repeticiónBucle infinitoInstrucción DisableRepaso: patrones de bucles3Sistema numérico
Representación binariaNúmeros con tamañoNúmeros sin tamañoNúmeros negativosValores especiales X y ZRepaso: formatos numéricos6Módulos
Estructura de módulosPuertos de entrada y salidaPuertos inoutInstanciación de módulosAsignación de puertos por nombreAsignación de puertos por ordenRepaso: construir un móduloPractica por tu cuenta: Compilador de Verilog online