Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Verilog

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

  1. Dominar Verilog: Tutorial completo para diseño de circuitos digitales
  2. Dominar la concatenación en Verilog: Guía práctica
  3. Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
  4. Bloqueante vs. No bloqueante en Verilog: Diferencias clave explicadas
  5. Comprender el control de retraso en Verilog: Técnicas de temporización y mejores prácticas
  6. Comprender los retrasos inter e intra asignación en Verilog
  7. Modelado a nivel de puertas: Puentes entre esquemas de hardware y código Verilog
  8. Diseño práctico a nivel de puertas en Verilog: Puertas AND, OR, NOT y Multiplexor 2x1
  9. Generador de reloj en Verilog: Guía de diseño e implementación
  10. Dominar las funciones matemáticas en Verilog para diseño de hardware eficiente
  11. Dominar $timeformat en Verilog: Control de precisión y visualización