Skip to content

[BUG] Retiming not applied to fpnew_fma during synthesis with DC

Hi, thank you for your great work on this project.

Recently, I encountered some timing issues when synthesizing the cv64a6_imafdc_sv39 core with the TSMC28 technology library (clk period = 0.8ns (1.25GHz)). Many modules from fpnew, such as fpnew_fma, show critical timing paths.

After checking existing issues, I learned that a common approach is to use retiming to balance the pipeline registers inside fpnew_fma. To apply retiming in Design Compiler, I used the following commands:

set_optimize_registers true -design [get_designs fpnew_fma*]
compile_ultra -no_autoungroup -gate_clock -retime

This should enable Adaptive Retiming and Pipelined-Logic Retiming in DC. However, during synthesis, I received the following warning:

Retiming fpnew_fma_1_00000003_3_902242 (ex_stage_i/fpu_gen.fpu_i/fpu_gen.i_fpnew_bulk/gen_operation_groups[0].i_opgroup_block/gen_parallel_slices[1].active_format.i_fmt_slice/gen_num_lanes[0].active_lane.lane_instance.i_fma)
Warning: There are buffer or inverter cells in the
	clock tree. The clock tree has to be recreated after
	retiming. (RTDC-47)
  Preferred flip-flop is SDFOPTMCD12BWP40P140 with setup = 0.00

Warning: The following cells only drive
	asynchronous pins of sequential cells which have no
	timing constraint. Therefore retiming will not optimize
	delay through them:
	ex_stage_i/fpu_gen.fpu_i/fpu_gen.i_fpnew_bulk/gen_operation_groups[0].i_opgroup_block/gen_parallel_slices[1].active_format.i_fmt_slice/gen_num_lanes[0].active_lane.lane_instance.i_fma/*cell*571100 (INVD9BWP40P140)

 (RTDC-115)

There are still long critical paths in fpnew_fma, similar to that before using retiming.

Retiming base-clock clk_i, rising edge.
  Beginning minimum period retiming ...
  ... minimum period retiming done.
  Beginning minimum area retiming step 1 ...
  ... minimum area retiming step 1 done.
  Beginning minimum area retiming step 2 ...
  5% 10% 15% 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80% 85% 90% 95% 100% 
  ... minimum area retiming step 2 done.
  Beginning minimum area retiming step 3 ...
  10%   ... minimum area retiming step 1 done.
  Beginning minimum area retiming step 2 ...
  5% 10% 15% 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80% 85% 90% 95% 100% 
  ... minimum area retiming step 2 done.
  Beginning minimum area retiming step 3 ...
  10% 20% 30% 40% 50% 60% 70% 80% ... 100% 
  ... minimum area retiming step 3 done.
  Beginning final register move ...
  ... final register move done.
  Lower bound estimate = 1.10
  Critical path length = 1.10
  Clock correction = 0.15 (clock-to-Q delay = 0.06, setup = 0.00, uncertainty = 0.09)

Could you please help me understand the cause of this issue? I’m not sure whether it’s related to my DC commands or something inside the fpnew_fma design itself.

Thanks again for your excellent work and support!