| InstructionsAs FPGA flip-flops become faster, they can respond to very short 
              clock pulses, even accidental glitches. Fast clock transitions often 
              lead to reflections on long pc-board clock lines, and such reflections 
              can result in overshoot, undershoot and ringing, which might lead 
              to multiple crossings of the input thresholds. There are well-known 
              methods to keep reflections under control, but they require an understanding 
              of high-frequency and transmission-line effects, and they may be 
              difficult and expensive to implement, and impossible to retrofit. 
              In the past, FPGAs were slow enough to be forgiving, so that many 
              high-frequency problems could be ignored. Now, double pulses separated 
              by one or a few nanoseconds can cause double triggering and result 
              in system failure. Here are two effective remedies against such problems. The description 
              assumes rising-edge triggering, but can easily be modified for falling-edge 
              triggering. 
              Double clocking on the rising edge means that a reflection caused 
                the internal clock signal to go L-H-L-H instead of a simple L-H 
                transition. The second L-H transition might clock the flip-flops 
                again, if they are fast enough to respond to two clock edges that 
                are only one or a few nanoseconds apart. The simple solution is 
                to add delay in front of the D-inputs, so that they cannot change 
                in the short time between the two rising clock edges. Use redundant 
                LUTs or additional routing to slow down the few flip-flops that 
                are sensitive, such as the LSBs of a counter.
 
Clocking on the wrong (falling) edge is always caused by a H-L-H-L 
                sequence of clock transitions within a few nanoseconds. (Remember: 
                No flip-flop will ever trigger on the falling edge, if configured 
                to trigger on the rising edge. But no flip-flop will ever ignore 
                the edge it is supposed to trigger on.) This false triggering 
                “on the wrong edge” in the middle of the clock period cannot be 
                cured by slowing down the flip-flop inputs. Instead, a slightly 
                delayed and inverted version of the incoming clock signal must 
                be used as Clock Enable to the flip-flops that are exposed to 
                this type of wrong clocking. CE will be active (High) before and 
                during the legitimate rising clock edge, but will be inactive 
                (Low) before and during the unintended clock glitch, caused by 
                a reflection of the falling clock edge. Note that the two problems on the rising and the falling edge, 
              although caused by the same phenomenon, require two very different 
              solutions. Luckily, both solutions are simple, and are not mutually 
              exclusive. Clock reflections should be avoided by proper PC-board 
              design, but the world is not perfect, and it is nice to have a fix 
              available, especially one that is so easily applied in an FPGA, 
              and so powerful and without any harmful side effects. And it can 
              easily be added to old design that got in trouble when fitted with 
              newer, faster parts.
 |