If that is what the 'STA engineer' says, then you need to find a different 'STA engineer'. Trying to add buffer delays to fix hold time violations in any FPGA or CPLD design will result in failure.
Setup time violations require one of the following solutions:
- Rewrite the logic to insert registers to break up the combinatorial path into shorter paths
- Slow down the clock
- Switch to a faster part
Hold time violations occur when user generated clocks are created with logic or flip flops. Get rid of those clocks and use a synchronous design approach.
Asynchronous logic is more efficient in complexity but slower due to ripple propagation time and variance with Vcc and temperature. Thus static timing analysis must include worst case delays, setup, hold times for all nodes. Fastest being cold with Vcc max. And slowest, hot with Vcc min.
So static analysis at nominal conditions is not effective but for quick check, is very efficient.
Async logic is thus more tedious to verify, but efficient in reduction of latches. While Sync logic permits faster clock rates with known fixed delays by design using inverse clock, multiple phases, or same clock edge in terms of latency.