Trailing 39-14 in the fourth quarter, North Carolina scored 20 unanswered points and had the ball inside the Louisville 10 yard line with four minutes left, but No. 19 Louisville held on for a 39-34 win.
After North Carolina's Bryn Renner connected with Romar Morris for a 50-yard touchdown with 4:48 remaining to cut the lead to 39-34, North Carolina's Adrian Bushell fumbled the ensuing kickoff and North Carolina recovered.
North Carolina advanced the ball to the Louisville 4 yard line, but turned it over on downs.
The Cardinals built a 36-7 halftime lead. Senorise Perry and Jeremy Wright each had rushing touchdowns and Teddy Bridgewater threw touchdown passes to Charles Gaines, Eli Rogers and Nick Heuser. John Wallace kicked a 22-yard field goal in the first quarter and one in the third quarter, which ended up being Louisville's only score in the second half.
UNC got a touchdown late in the first half when Renner connected with Morris. Renner threw five touchdown passes on the day -- two to Morris, two to Eric Ebron and one to Erik Highsmith. He had 358 yards passing.
Louisville improves to 3-0 and UNC is now 1-2 on the season.
Box Score Hero: Both quarterbacks played big. Teddy Bridgewater was 23-for-28 for 278 yards and three touchdowns; Bryn Renner was 26-for-41 for 358 yards and five touchdowns with one interception.
Rankings Ramifications: A loss after having such a big lead may have pushed Louisville out of the rankings, but the Cardinals held on. They probably won't rise in the rankings with the win, but they shouldn't fall much either.
But Did They Cover? Louisville came into the game favored by 3½ points, so they covered despite North Carolina's strong second-half performance.
For More On This Game: For more on Cardinals football, visit Louisville blog Card Chronicle, plus Big East blog Big East Coast Bias and SB Nation Indiana. For more on UNC football, visit North Carolina blog Carolina March.
Next Week's Schedule: Louisville plays at Florida International at 7 p.m. Sept. 22. North Carolina hosts East Carolina at 3:30 p.m. Sept. 22.