It was a tense start between the pair as points were gained by the way of serve in the opening set, but it was defending champion Federer who snatched the first break of serve.
The point proved crucial for the Swiss pro, who took control of the court with precise returns and strong forehands to prevent Berdych from breaking back.
The number two seed was pegged back in the second set as Berdych managed to find a break, but he was unable to hold and Federer broke back instantly to level the scoreline.
Berdych needed just one point to clinch the set with a second break, but Federer fought back to score an advantage and take the set to a tie-break, which was eventually won by Berdych 10-8 to take the match into a third set.
The deciding set started in the same way as the first two with games going by the way of serve, but Berdych was able to break Federer, who struggled to return the Czech's shots.
The number three seed served for the match to set up a final against Djokovic.