Okay a further explanation. The reason that things hang on the read is because a waitrequest signal is asserted and not being deasserted. You can write to the DDR2 controller because there is a FIFO. Have you tried performing a lot of writes to the DDR2 controller and seeing if that also causes it to hang? I suspect it just might once the FIFO fills up.
So it sounds like you believe you have all your clocks connected correctly. You may want to check to verify they are actually running.
It sounds like you believe all your resets are connected correctly.
Okay so# 3. No you are using the right controller. Here's the thing. The DDR2 HPC goes through a calibration sequence on startup where it tries to determine the proper alignment for DQ/DQS signals. If it fails to achieve this, it will essentially never accept transactions on its interface. One way to check for this is to look at the "local_init_done" signal from the core. If this signals is low, your DDR2 controller is not going to accept write or read requests. Again, you may be able to shove a few write commands into the FIFO before it fills up.
Now if this is occurring, it's because the controller is unable to properly interface to the DRAM on the board. This could be either because there is a physical problem on the board (layout, routing, assembly, whatever) or it could simply be that the parameters you gave to the DDR2 controller when configuring it weren't quite right. The third would be that things aren't meeting timing but you've indicated that Timequest thinks that is not the case.
The first thing I would do is peek at that "local_init_done" signal and see what it claims.
Jake