Use divided clock for timers

Timers are a usual feature/requirement in several applications of digital design. Fundamentally, timers are implemented as counters that increment/decrement at the rate of provided clock. It’s very common to find a large number of different timers distributed throughout design, each ticking with base clock.

There’s a nice opportunity for area saving in such cases. The idea is very simple, let me illustrate with example:

Imagine, your clock’s base frequency is 4MHz (a period of 0.25us). In the design, three timers are required for 1us, 2us and 16us. If you were to implement these timers by clocking them at 4MHz, that would need 14 (3+4+7) bits.

Here’s the idea, you divide the base 4 MHz clock down to 1 MHz, and then use divided clock for implementing timers. Now, you’ll need 8 (1+2+5) bits. Now of course, we would also need some additional bits for clock-division (in this example 2 more)

The area savings can be significant if a large number of timers can be brought into this divided-clock domain, and especially if the base frequency is high. Also, consider the power savings from reduced switching activity…So whenever possible, it can be a good practice to try and identify as many timers as possible that have the potential to be moved under a shared divided clock domain.