Fiorentina were saved by the woodwork three times against Bologna, only to eventually win a tense penalty shoot-out and reach the Coppa Italia semi-final.
They will face either Milan or Atalanta in the two-legged showdown.
The Viola reached the Final last season and were hoping to do so again, but missed Nico Gonzalez, Christian Kouame, Riccardo Sottil, Dodo and Gaetano Castrovilli. Bologna eliminated reigning holders Inter in extra time, but here were without Dan Ndoye, Jesper Karlsson and Adama Soumaoro. When these sides met in Serie A in November, Fiorentina ran out 2-1 winners.
Vincenzo Italiano debuted a new tactical system, defending with three at the back at times.
lexis Saelemaekers stung Oliver Christensen’s gloves from distance, while Lukasz Skorupski pushed the Michael Kayode half-volley out from under the bar.
Joshua Zirkzee was sent clear on goal by Lewis Ferguson only for his first touch to let him down, while Riccardo Orsolini’s strike on the counter was charged down by Nikola Milenkovic.
Zirkzee thought he had scored on 34 minutes after a sensational turn left Milenkovic stranded, but the finish from 12 yards clipped the crossbar as he was leaning back.
Orsolini also thumped the frame of the goal, his low curler from the edge of the box bouncing off the base of the far post straight after the restart. M’Bala Nzola came on and immediately ran onto a Beltran slide-rule pass, forcing Skorupski to come rushing out, while Lewis Ferguson tested Christensen at the near post.
Nzola’s first touch let him down after a smart Beltran headed assist, during which the Argentine got a nasty knock to the nose, forcing him off the field.
Fiorentina almost scored with the last kick of the game when a corner came to Maxime Lopez, the shot was deflected and Lucas Martinez-Quarta’s header to redirect from close range was kept out by Skorupski’s reaction save.
It went to extra time and Christensen pushed a Zirkzee finish onto the outside of the upright on a Saelemaekers assist. Kristiansen’s volley was straight at Christensen, but Martinez-Quarta wasted another golden opportunity with the shot on the turn parried by Skorupski from point-blank range after a corner.
Kayode really should’ve scored on 109 minutes when he was found by Rolando Mandragora’s cross at the back post, but incredibly his free header was so far off target that it went for a throw-in.
Orsolini had a sensational first touch to break away on Zirkzee’s pass, but Christensen came tearing out to smother at his feet. There was no dividing the teams, so it went to a penalty shoot-out, just as Fiorentina had done to get past Parma in the Round of 16.
All the penalties were converted except for the final Bologna kick, which Stefan Posch blazed over the crossbar, allowing Maxime Lopez to seal victory for Fiorentina.
Fiorentina 0-0 Bologna (aet, 5-4 pens)
Penalties: Ferguson (Bologna, goal), Mandragora (Fiorentina, goal), Zirkzee (Bologna, goal), Arthur (Fiorentina, goal), Orsolini (Bologna, goal), Milenkovic (Fiorentina, goal), Calafiori (Bologna, goal), Mina (Fiorentina, goal), Posch (Bologna, miss), Maxime Lopez (Fiorentina, goal)