Clock Domain Crossing practice problems

Clock domain crossing is where many real chips fail. Practice two-flop synchronizers, pulse synchronizers, Gray-coded pointers and asynchronous FIFOs, the standard ways to move signals between clocks.