Qué son los retrasos
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 67 de 90.
En Verilog, los retardos controlan cuándo se ejecuta una instrucción o cuándo cambia una señal. Se utilizan para modelar el comportamiento temporal del hardware real.
Por qué se necesitan retardos
El hardware real necesita tiempo para que las señales viajen a través de cables y puertas lógicas. Los retardos te permiten simular este comportamiento temporal.
- En la simulación, sin retrasos, todo ocurre en el tiempo 0
- Los retrasos permiten espaciar los eventos a lo largo del tiempo
- Ayudan a probar diseños sensibles a la temporización, como relojes y máquinas de estados
Tipos de retardos
| Tipo de retardo | Propósito |
|---|---|
| Retardos de compuerta | Retardo a través de compuertas lógicas |
| Retardos de asignación | Retardo al asignar valores |
| Directiva de escala de tiempo | Establece las unidades de tiempo para la simulación |
Sintaxis básica
Un retardo se escribe con un # seguido de un número:
#10 clk = ~clk; // Espera 10 unidades de tiempo, luego alterna el reloj
#5 a = b; // Espera 5 unidades de tiempo, luego asigna a = bEl número después de # es el número de unidades de tiempo que se debe esperar.
Ejemplo sencillo
initial begin
a = 0;
#10 a = 1; // Después de 10 unidades de tiempo, a se convierte en 1
#5 a = 0; // Después de otras 5 unidades de tiempo, a se convierte en 0
endTemporización:
- Tiempo 0:
a = 0 - Tiempo 10:
a = 1 - Tiempo 15:
a = 0
Retrasos en bloques Always
always #5 clk = ~clk; // Alternar el reloj cada 5 unidades de tiempoEsto crea una señal de reloj continua (suponiendo que clk se haya inicializado primero en 0 en un bloque initial. De lo contrario, ~x permanece como x).
Reglas importantes
| Regla | Explicación |
|---|---|
Símbolo # | Marca un retraso |
Número después de # | Cuántas unidades de tiempo esperar |
| Los retrasos son acumulativos | #10 después #20 espera un total de 30 |
| No sintetizable | Los retrasos son solo para simulación |
Desafío
Qué hacer:
Add the missing delays to make this code print messages at times 0, 10, 25, and 40.
Pruébalo tú mismo
module delay_challenge;
initial begin
$display("Time %0t: Start", $time);
// TODO: Añade un retardo para alcanzar el tiempo 10
$display("Time %0t: After first delay", $time);
// TODO: Añade un retardo para alcanzar el tiempo 25
$display("Time %0t: After second delay", $time);
// TODO: Añade un retardo para alcanzar el tiempo 40
$display("Time %0t: End", $time);
$finish;
end
endmodule
Esta 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