Comprender los retrasos de puertas en Verilog: Temporización precisa para diseños digitales confiables
Los elementos digitales son entidades binarias y solo pueden mantener uno de dos valores: 0 y 1. Sin embargo, la transición de 0 a 1 y de 1 a 0 tiene un retraso transicional y cada elemento de puerta también para propagar el valor de su entrada a su salida.
Por ejemplo, una puerta AND de dos entradas tiene que cambiar la salida a 1 si ambas entradas se vuelven 1 y volver a 0 cuando cualquiera de sus entradas se vuelve 0. Estos retrasos de puerta y de pin a pin pueden especificarse en Verilog al instanciar primitivas lógicas.
Retardos de subida, bajada y apagado
El tiempo que tarda la salida de una puerta en cambiar de algún valor a 1 se llama retardo de subida (rise delay). El tiempo que tarda la salida de una puerta en cambiar de algún valor a 0 se llama retardo de bajada (fall delay). El tiempo que tarda la salida de una puerta en cambiar de algún valor a alta impedancia se llama retardo de apagado (turn-off delay).
Estos retardos son realmente aplicables a cualquier señal ya que todas pueden subir o bajar en cualquier momento en circuitos reales y no están restringidos solo a salidas de puertas. Hay tres formas de representar retardos de puerta y el formato de dos retardos se puede aplicar a la mayoría de primitivas cuyas salidas no transicionan a alta impedancia. Como un formato de tres retardos no se puede aplicar a una puerta AND porque la salida no irá a Z para ninguna combinación de entrada.
// Un solo retraso especificado - usado para los tres tipos de retardos de transición
or #(<retraso>) o1 (out, a, b);
// Dos retardos especificados - usados para transiciones de Subida y Bajada
or #(<subida>, <bajada>) o1 (out, a, b);
// Tres retardos especificados - usados para Subida, Bajada y Apagado
or #(<subida>, <bajada>, <apagado>) o1 (out, a, b);
Si solo se especifica un solo retraso, los tres tipos de retrasos usarán el mismo valor dado. Si se especifican dos retardos, el primero representa subida y el segundo bajada. Si se especifican tres retardos, representan subida, bajada y apagado respectivamente.
Formato de un retraso
module des (
input a, b,
output out1, out2
);
// Puerta AND tiene 2 unidades de tiempo de retardo de puerta
and #(2) o1 (out1, a, b);
// Puerta BUFIF0 tiene 3 unidades de tiempo de retardo de puerta
bufif0 #(3) b1 (out2, a, b);
endmodule
module tb;
reg a, b;
wire out1, out2;
des d0 (.out1(out1), .out2(out2), .a(a), .b(b));
initial begin
{a, b} <= 0;
$monitor ("T=%0t a=%0b b=%0b and=%0b bufif0=%0b", $time, a, b, out1, out2);
#10 a <= 1;
#10 b <= 1;
#10 a <= 0;
#10 b <= 0;
end
endmodule
Vea que la salida de las puertas AND cambia 2 unidades de tiempo después de que una de sus entradas cambia. Por ejemplo, b se vuelve 1 mientras a ya está en 1 en T=20. Pero la salida se vuelve 1 solo en T=22. Similarmente, a vuelve a cero en T=30 y la salida obtiene el nuevo valor en T=32.
El retardo de puerta se especifica como 3 unidades de tiempo para BUFIF0 y por tanto cuando b cambia de 0 a 1 mientras a ya está en 1, la salida toma 3 unidades de tiempo para actualizarse a Z y finalmente lo hace en T=23.
ncsim> run T=0 a=0 b=0 and=x bufif0=x T=2 a=0 b=0 and=0 bufif0=x T=3 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=13 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=23 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=32 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=43 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Formato de dos retardos
Apliquemos el mismo testbench mostrado arriba a un modelo Verilog diferente mostrado abajo donde los retardos de subida y bajada se mencionan explícitamente.
module des (
input a, b,
output out1, out2
);
and #(2, 3) o1 (out1, a, b);
bufif0 #(4, 5) b1 (out2, a, b);
endmodule
ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=5 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=14 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=24 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=45 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Formato de tres retardos
module des (
input a, b,
output out1, out2
);
and #(2, 3) o1 (out1, a, b);
bufif0 #(5, 6, 7) b1 (out2, a, b);
endmodule
ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=6 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=15 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=27 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=46 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Retardos Min/Typ/Max
Los retardos no son los mismos en diferentes partes del chip fabricado ni son los mismos para diferentes temperaturas y otras variaciones. Así que Verilog también proporciona un nivel extra de control para cada uno de los tipos de retraso mencionados arriba. Cada puerta digital y celda de transistor tiene un retardo mínimo, típico y máximo especificado basado en el nodo de proceso y típicamente proporcionado por librerías de la fundición de fabricación.
Para cada tipo de retardo - subida, bajada y apagado - tres valores min, typ y max pueden especificarse y representan retardos mínimo, típico y máximo.
module des (
input a, b,
output out1, out2
);
and #(2:3:4, 3:4:5) o1 (out1, a, b);
bufif0 #(5:6:7, 6:7:8, 7:8:9) b1 (out2, a, b);
endmodule
ncsim> run T=0 a=0 b=0 and=x bufif0=x T=4 a=0 b=0 and=0 bufif0=x T=7 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=16 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=23 a=1 b=1 and=1 bufif0=1 T=28 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=34 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=47 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Verilog
- Dominar Verilog: Tutorial completo para diseño de circuitos digitales
- Dominar la concatenación en Verilog: Guía práctica
- Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
- Bloqueante vs. No bloqueante en Verilog: Diferencias clave explicadas
- Comprender el control de retraso en Verilog: Técnicas de temporización y mejores prácticas
- Comprender los retrasos inter e intra asignación en Verilog
- Modelado a nivel de puertas: Puentes entre esquemas de hardware y código Verilog
- Diseño práctico a nivel de puertas en Verilog: Puertas AND, OR, NOT y Multiplexor 2x1
- Generador de reloj en Verilog: Guía de diseño e implementación
- Dominar las funciones matemáticas en Verilog para diseño de hardware eficiente
- Dominar $timeformat en Verilog: Control de precisión y visualización