--- Quote Start ---
But how can avoid glitch or reduce glitch?
--- Quote End ---
Glitches will always occur. The key is to understand where a glitch is acceptable, and where one is not.
When designing with FPGAs, you generally want to implement synchronous logic. This typical of logic is characterized by registers feeding combinatorial logic with outputs captured by additional registers.
The combinatorial logic outputs / register inputs may have glitches on them, however, that is acceptable so long as the glitches have settled to a logic state (high or low) prior to the register setup time, and those levels stay at that logic state for the register hold time. This timing can be analyzed using TimeQuest.
When you have signals leaving or entering the FPGA, you want to make sure those signals are synchronous to your FPGA logic. In the case of inputs, you can either use a synchronous timing constraint (since the external logic uses a clock in common to the FPGA) or you can use synchronizers (a dual-DFF inside the FPGA) to synchronize the external asynchronous signal to the FPGA logic. In the case of FPGA outputs, you should generally try to drive those signals from a register output, as that ensures the signals are glitch free. If the output signals are going to logic clocked by the same clock as the FPGA, then you would setup a TimeQuest timing constraint indicating the timing. If the outputs are going to asynchronous logic, eg., an SRAM, then the fact that you have registered the signals, means there will be no glitches that could result in erroneous writes to SRAM.
Cheers,
Dave