Búsqueda de ruta crítica de lógica combinacional

1

Tengo un circuito combinacional y me gustaría encontrar su ruta crítica en el compilador de diseño. Esencialmente, quiero saber cuánto reducirá la lógica combinacional la frecuencia de reloj máxima del diseño secuencial más grande. Para este propósito, he agregado registros a lo largo de la entrada del circuito combinacional (un simple multiplicador en este caso) que se registran en el flanco ascendente de un reloj como se recomienda en Cómo encontrar el retardo de ruta crítica de un gran bloque combinacional . Luego ejecuto create_clock clk -period 5 -name clk y report_qor en DC, pero obtengo una longitud de ruta crítica de 0.00 ns. Esto se ve extraño. Si muevo el multiplicador directamente al módulo de prueba, obtengo una longitud de ruta crítica de 4.88 ns con un aspecto más razonable.

module my_multiplier(
    output reg [31:0] out,
    input      [15:0] in1, in2,
    input             enable
);

always @(*) begin
   if (enable) begin
         out = in1 * in2;
   end
end

endmodule

He creado un módulo separado para crear una instancia del circuito multiplicador y también sincronizar las entradas al multiplicador:

module Test_multiplier_Tcrit(
    output  [31:0] out,
    input   [15:0] in1, in2,
    input          clk, enable
);

reg  [15:0] in1_reg, in2_reg;

my_multiplier my_multiplier(.out(out), .in1(in1_reg), .in2(in2_reg), .enable(enable)); 

always @(posedge clk) begin
   in1_reg <= in1; 
   in2_reg <= in2;
end

endmodule
    
pregunta Mowgli

1 respuesta

1

Intenta poner un registro en la salida también. Generalmente, el análisis de tiempo se realiza de registro a registro, por lo que sin un registro de salida puede no ser capaz de darle una buena respuesta.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas