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