systemverilog program examples constraint clocking classes system-verilog

system verilog - program - Diferencia entre always_ff, always_comb, always_latch y always



system verilog examples (1)

Estoy totalmente confundido entre estos 4 términos: always_ff , always_comb , always_latch y always . ¿Cómo y con qué propósito se pueden utilizar?


always es el tipo principal de proceso de Verilog, el otro es una initial que se ejecuta una vez al inicio de una simulación.

always_ff @(posedge clk) :
Representa un flip-flop (ff), el proceso se activa (ejecuta) en cada flanco positivo del reloj. Esto reemplaza always @(posedge clk) . Este es el único tipo donde se deben usar asignaciones sin bloqueo ( <= ), ya que imita la forma en que un flip-flop transfiere datos.

always_ff @(posedge clk) begin a <= b; end

always_latch : es para representar latches.

El uso sería:

always_latch begin if (enable) begin a_latch = something; end //No else clause so a_latch''s value //is not always defined, so it holds its value end

Esto reemplaza:

always @* begin if (enable) begin a_latch = something; end //No else clause so a_latch''s value //is not always defined, so it holds its value end

always_comb :
Es para la lógica combinatoria, es un reemplazo para always @* cuando no desea un pestillo. Ahora podemos diferenciar nuestra intención de diseño cuando queremos y no queremos pestillos.

Los nombres de SystemVerilog always_ff , always_latch y always_comb tienen criterios más estrictos para el momento en que se activan, lo que significa que se reduce la posibilidad de que el desajuste RTL a nivel de puerta (post síntesis) se reduzca. Significa que no son 100% equivalentes a la parte always @ counter y pueden cambiar algunos comportamientos de simulación.