I thought it might be helpful to others to post a few of the "gotchas" to look out for when using the great ISE tools from Xilinx. For the most part, ISE is an amazing tool, but there are a few things I found that threw me for a loop.
1) After making too many changes to your UCF file, ISE sometimes "remembers" old pins that no longer exist. Go to "project" and select "cleanup project files" to instantly solve this problem. This also seems to work for a few other bugs when cutting and pasting code blocks.
2) Nesting too many "If Then" statements can sometimes make the compiler gobble up all of your system ram and then chug for 10-15 minutes on a compile. By removing only a single level of nested "If Then" statements, this error can instantly disappear. On several projects, I reduced system ram usage from 2GB (all available) down to 200MB by just taking away a single level! Compile time also went from 10-15 minutes to under a minute.
3) When using large arrays such as "reg [7:0] palette[255:0];", ISE will sometimes make a block ram as intended, and other times, it will decide that 2048 flip flops is a swell idea. There is no rhyme or reason to this, and often a recompile without any code changes will make it decide differently. Sometimes using the initial begin to put a start value in the array will help, but be prepared for the "random factor here".
4) Once and a while you may have an "ahah..." moment after starting a compile, but the "stop" command will cause a crash about 1 out of 10 times, so beware! I just wait now.
Other than those few gotchas, I have found the ISE software to be top notch, and very easy to work with.
Brad