How to Live with Uncertainties: Exploiting the Performance Benefits of Self-Timed Logic In Synchronous Design