The fitter tries to get timing closure by changing placement and adjusting path lengths but it can't always get there. One of the things to consider when trying to get timing closure is that by improving timing on non-failing paths you can sometimes get closure on the failing paths. This is because the fitter can then put a higher priority on the failing paths without having to worry about the other paths. Identifying multi-cycle paths and entering them in the SDC file is one of the easiest ways to help get to closure. Another thing to do is use the timing optimization adviser in Quartus. It will guide you through which fitter assignments are best suited to timing critical designs. This is the first thing I always do.