my personal opinion - before trying / adding anything to the existing vanilla script that your using is to debug.
I would review the timing report to see if what causes this violation to occur
- is it the cell delays impacting the timing thereby cell selection during synthesis
- has synthesis not optimized the netlist
- has it not done better opto, is there room to optimize logic to reduce level of hierarchy
- are there any preserves
- constraints are well applied - is it a multicycle , delays, pessimism etc
depending on what you diagnose is something that i would add in the scripts else its all trial and error and machine time while we wait for results.
Say you see that it traverses across hierarchies - i would try ungroup, say cell delays are high or it has not used complex cells - i would review the dont_use list etc and so on