Designing Synchronous Circuits