I tried something like this once with DCM and I got some error saying " cannot drive multiple drivers".
Right now you are using the system clock for driving FFT and VGA. The same clock via a DCM you are converting to 30MHz and used to drive microblaze.
Can you try something like this:
Use two DCM's: one with external clock supply and another with internal clock supply.
Use clk1 to drive FFT and VGA. Use clk2 to drive microblaze.
the code may look something like this:
clk1 : dcm1 port map ( CLKIN_IN => Clk50,
CLKDV_OUT => Clk_VGAandFFT, --let the division factor be "1".
CLKIN_IBUFG_OUT => Clk2dcm2,
CLK0_OUT => open );
clk2 : dcm2 port map ( CLKIN_IN => Clk2dcm2,
CLKDV_OUT => Clk_microblaze, --divide clock appropriatly
CLK0_OUT => open );