Abstract: UART is one of the most common wired communication protocols used in low data rate applications. There are two UART controller interfaces, namely UART 0, and UART 1, readily available in PS part of Zynq 7000, which can be used to communicate with external devices equipped with UART interface. In this tutorial, Both UARTS are implemented over MIO Pins, where UART1, and UART0 are connected to USB UART, and Pmod E over MIO 48-49, and MIO 14-15 respectively.
Implementation: The block diagram illustrated in the following figure provides an overview of implementation of UART(s) in ZedBoard.
The PS part of Zynq 7000 contains many I/O peripheral (IOP) controller interface for data communication. The two UART interfaces ,UART 0 and UART 1, in PS enable Zynq to communicate with any external devices that incorporates UART interface. These UART interfaces can be mapped to either MIO or EMIO. MIO pins allow PS to directly exchange information with external device over UART interface, while EMIO pins make possible the data exchange between PL and PS within Zynq.
In this tutorial both UARTs are implemented over MIO pins, where UART 0 and UART 1 are mapped on MIO 14-15, and MIO 48-49 respectively. MIO 14-15 pins are mapped to PmodE 9-10 in ZedBoard, therefore external UART pins should be connected on these pins. MIO 48-49 pins are mapped to USB UART connector, hence any micro USB connected on this connector should be able to exchange data. It is worth noting that these UARTs can be mapped on other MIO or EMIO pins.
The TCL file available in the following GitHub link can be used to generate the UART 0, and UART 1 related hardware files in Vivado. The SDK project containing the C driver files of UART interfaces are available in this GitHub Link. Each link has read me files instructing to build the complete project.
The video given below explains all the steps needed to implement UARTs over MIO interfaces in ZedBoard.