Create a MicroBlaze, Test the UART in SDK, and Boot Linux using 2019.1 Vivado and PetaLinux Tools

This post contains everything needed to create a MicroBlaze design and boot Linux on it over JTAG. It also contains links to all the IP documentation and how to smoke-test a design before using it.

Versions Used

2019.1 Vivado, PetaLinux Tools, and XSDK

VMWare Workstation 14 Player running Ubuntu 16.04.5 LTS running on Windows 10

Update Vivado 2019.1


I needed this patch to build the bitstream.


Step #1: Download the patch at:,will%20not%20generate%20a%20response.

Step #2: Exit Vivado 2019.1

Note: commands assume Vivado is installed at:


Step #3: Run

mkdir /tools/Xilinx/Vivado/2019.1/patches
mkdir /tools/Xilinx/Vivado/2019.1/patches/AR72956
pushd /tools/Xilinx/Vivado/2019.1/patches/AR72956
unzip ~/Downloads/

Step #4: Restart Vivado 2019.1

Step #5: Check that the Patch Applied

Enter in the Design


For Linux to boot on MicroBlaze

Page 19 of lists the requirements to run Linux on a MicroBlaze. I've left out both the Non-volatile memory and Ethernet in this design. Also, I use an AXI Timer, not a Dual channel timer.


Step #1: Run Vivado 2019.1

Step #2: File > Project > New

Step #3: Click Next on the Create New Vivado Project window

Step # 3.1: Click Next in the Project Name window

Step #3.2: (A) Click RTL Project and (B) click Next

Step # 3.3: (A) Click Boards, (B) enter zcu102, (C) click on the line, and (D) click Next

Step #3.4: Click Finish

Create the Block Design


Step #1: Click Create Block Design

Step #1.1: Click OK

Step #2: (A) Click Board, (B) Pull DDR4 SDRAM to the Diagram, and (C) click OK

Step #3: Click Run Connection Automation

Step #3.1: (A) Check all checkboxes and (B) click OK

You should see:

Step #4: (A) Click +, (B) type micro, and (C) double-click MicroBlaze

Step #5: Click Run Block Automation

Step #6: (A) Check the Interrupt Controller checkbox and (B) click OK

Note: we select Linux with MMU later during IP customization

Note 2: this ^^^ step is how you get microblaze_0_local_memory

Step #7: Click Run Connection Automation

Step #7.1: (A) Select all checkboxes and (B) click OK

You should see:

Step #7.2: (A) Click Board, (B) click and drag UART, (C) click OK, and (D) click Run Connection Automation

Step #7.3: Click OK

You should see:

Step #8: (A) Click +, (B) Type AXI Timer, and (C) click AXI Timer

Step #8.1: Click Run Connection Automation

Step # 8.2: Click OK

You should see:

Step #9: Connect the axi_timer_0 interrupt and the axi_uartlite_0 interrupt pins to the microblaze_0_xlconcat

Note: you will still see the UART output in XSDK without this, and Linux will run, but you won't see any UART output.

Customize the MicroBlaze IP


Step #1: Double click on the microblaze_0 instance of the MicroBlaze

Step #1.1: (A) Select Linux with MMU and (B) click OK

You only need to set Linux with MMU. Here are the other pages as a reference.

Page 1

Page 2

Page 3

Page 4

Page 5

Page 6

Page 7

Get Ready to Create the Bitstream


Step #1: Check the Board

Step #2: Check the full design