After synthesizing your design with Synplify and Design Compiler, both tools reported of a combinational timing loop in post_norm stage. Although, they still synthesized the design, some advanced timing features in these tools refuse to deal with a timing loop (such as balance_register feature in Design Compiler). Timing loops in general is not a good idea, and if you ever plan on modifying your code, I would recommend removing the loop.
Also, overall, I'd like to see the code slightly better documented in the code itself, better pipelining (or rather more clear) and perhaps break up stages (such as post_norm) into smaller modules.
I have an exact similar issue when synthesized using Cadence RTL Compiler.
There is a combo loop involving :
exp_rnd_adj2a
exp_out
exp_out_fe
round2
exp_rnd_adj2a
in post_norm.v
Is this intentional? My tool can not process it due to the loop. Is there a way to get around it ?
There are many combo loops in post_norm.v, here is one of them: exp_out exp_out_00 shftl_div shift_left fract_in_shftl fract_out fract_out_pl1 exp_rnd_adj2a exp_zero exp_out Combinatorial loops cause timing violations and cannot synthesize correctly.