¿Cómo usar la activación de reloj en RTL?

Soy un reloj que abre algunaspestillo y lógica en mi diseño. No tengo mucha experiencia en síntesis, lugar y ruta. ¿Cuál es la forma correcta de implementar la activación de reloj en RTL?

Ejemplo 1:

always_comb begin
    gated_clk  = clk & latch_update_en;
end

always_latch begin
    if(gated_clk) begin
         latch_data <= new_data;
    end
end

Ejemplo 2: Me topé con ejemplos de RTL mientras investigaba sobre las buenas prácticas en la activación de reloj RTL. Ese ejemplo implementó el código anterior como este:

clock_gator cg_cell (.clk(clk), .en(latch_update_en), .scan_en(scan_en_in), .gated_clk(gated_clk));

always_latch begin
    if(gated_clk) begin
         latch_data <= new_data;
    end
end

¿Cuál es el propósito de usar una celda de reloj personalizada? ¿La herramienta tiene dificultades para la síntesis si clk está directamente "y" -ed en un bloque always_comb con otra señal de habilitación? Tengo la sensación de que el uso de una celda de activación de reloj especial es un enfoque estándar para la señal de reloj activada generada. Estoy tratando de entender por qué este es el caso.

Respuestas a la pregunta(2)

Su respuesta a la pregunta