Hi Hosni,
There are many techniques for reducing your power consumption. Those at the RTL level have the highest possible impact, since you can change the behaviour of your system and make trade-offs that are not possible in later stages of the RTL-to-FPGA flow.
The "Stratix II Low Power Design Techniques" handbook section
formatting link
provides some suggestions we have found to be helpful on Stratix II devices.
Most hardware designers were taught how to design when power wasn't such a big deal. This means that we often do things such as generate or read results even when we don't need them, since logically it doesn't matter (the downstream logic will be ignoring those inputs, etc.). If you can identify these cases and insert gating or clock control logic to stop unused pieces of logic from toggling when not needed, you can achieve a lot of power savings.
One example is RAMs. Users will often not specify a RAM read enable, thus the RAM will be executing a read every clock cycle. But you probably don't need the RAM result every cycle. By simply making an explicit read enable, you can greatly reduce the RAM power since every read operation initiates a pre-charge/dis-charge cycle within the RAM, and if the result is different than the previous cycle, causes downstream logic to wiggle too.
Regards,
Paul