Understanding Flip-Flops in Sequential Logic