I've been for two years in the same exact situation as you were. I checked some custom IPs tutorials to learn how to communicate with the AXI bus, and with the Vivado integrated tool turns out to be pretty easy.
I've created a tutorial showing an example of the exact same thing you wanted: PS-PL USART data exchange. Check it on my GitHub.
I hope that it will help other people, and I'm open to accept PR of code improvements from people more experienced that I am.