Every counter needs some time after each edge before it's ready for the next. The maximum counting frequency is 1 divided by the shortest safe clock period.
Ripple counter. In the worst case the change ripples through all n stages, so the count settles n × tpd after the edge. The period must cover that, plus the delay of any logic that reads the count:
f_max = 1 / (n × tpd)
It gets slower as you add bits.
Synchronous counter. After an edge, three things happen in series:
- the flip-flop outputs change (tpd);
- the new values pass through the AND / XOR next-state logic;
- the results reach the flip-flop inputs at least a setup time before the next edge.
f_max = 1 / (tpd + logic delay + setup time)
This doesn't multiply by n, so wide synchronous counters stay fast. It's the same setup constraint that governs any register-to-register path.