element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Path to Programmable 3
  • Challenges & Projects
  • Design Challenges
  • Path to Programmable 3
  • More
  • Cancel
Path to Programmable 3
Blog Path to Programmable III: Ultra96v2 Basic Hardware Platform - Vivado 2022.2
  • Blog
  • Forum
  • Documents
  • Leaderboard
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Path to Programmable 3 to participate - click to join for free!
  • Share
  • More
  • Cancel
Group Actions
  • Group RSS
  • More
  • Cancel
Engagement
  • Author Author: saadtiwana_int
  • Date Created: 14 Jul 2023 1:17 PM Date Created
  • Views 2043 views
  • Likes 10 likes
  • Comments 3 comments
  • hardware platform
  • ultrascale
  • vivado
  • ultra96-V2-G
  • amd
  • Path to Programmable III
Related
Recommended

Path to Programmable III: Ultra96v2 Basic Hardware Platform - Vivado 2022.2

saadtiwana_int
saadtiwana_int
14 Jul 2023
Path to Programmable III: Ultra96v2 Basic Hardware Platform - Vivado 2022.2

Introduction:

The Ultra96-V2 comes with a lot of good pre-built, out-of-box demo material from Avnet to get started quickly. However, the real power of FPGAs is in being able to build custom hardware. In the case of Zynq Ultrascale, which this board is based on, the custom hardware can run along with "hard" A53 and R5 processor cores. 

In this blog post, I want to start from the very basics, with the hope that in the subsequent posts we can build upon this to go further. We will basically learn to walk, before we start running. The hope is that anyone starting for the first time with Ultra96 or similar Zynq ultrascale hardware can follow along to get started. This will also help us familiarize ourselves with the tool (Vivado) as well as the basic wokflow used.

In this post I will build the most basic hardware platform, the bare minimum that we need to get the system running and start performing basic talks.

Hardware:

We will be using the following hardware:

  • Ultra96-v2-G
  • Power Supply (96Boards 4A)
  • Ultra96 USB-to-JTAG/UART Pod
  • Host machine for development purpose

Software:

For the FPGA "hardware" configuration, the de-facto software from AMD is Vivado. I am using Vivado 2022.2, however the instructions should work with other versions just fine. In my case Vivado (&Vitis) are installed on my windows machine, although the process will stay the same even if you're using Linux (whether directly installed on machine or inside virtual machine).

Project Creation:

We start by launching Vivado.

Once launched we can click "Create Project" to start the new project wizard.

image

Click "Next" on the first page of the wizard.

image

Set the project name, choose appropriate location and make sure the "Create project subdirectory" checkbox is checked so that our projects stay contained within their own folders.

Then click "Next".

image

This is going to be a RTL project, and since it's a new design from scratch, select "Do not specify sources at this time" to skip those steps.

Then click "Next".

image

Since we are working with a board (as opposed to a FPGA part), first we click "Boards" and then click "Refresh" to update the catalog.

image

Once the catalog is refreshed, we select "avnet.com" as vendor and then find the "Ultra96-V2 Single Board Computer" from the list.

image

You will notice that this does not enable the "Next" button. This is because this board's data is not yet downloaded to our Vivado installation.

Click the download button in front of this board to download the data for this board. The process will only take a few seconds. Once finished, you will see more information getting populate about the board in the columns in front. And the "Next" button is not greyed out anymore, so we click it to proceed.

At this point we can review the summary and click "Finish" since all looks good.

image

After a minute or so Vivado is finished with creating the new project and we reach the main Window

image

This concludes the process of creating the project.

Creating the Ultra96v2 Block Design:

To start creating the block design, click "Create Block Design" form the Flow Navigator window.

image

In the window that appears, we can leave things to default, although you could give a different name to the block design. Especially later if you are going to create multiple different block designs, then it's better to name them appropriately.  Click OK to proceed with creating.

image

A progress window will appear, and take several tens of seconds. Once it's done, it will disappear and the empty block design is shown.

To start adding IPs our designs, we click either of the "Add IP" buttons:

image

This will bring forth the list of IPs that we can add. We are interested in the "Zynq Ultrascale+ MPSoC" which is the IP that represents the "hard" Zynq processing system on this board's ZU3EG FPGA. To make it easier to find it, we can type "zynq" in the filter text box and then double click the "Zynq Ultrascale+ MPSoC" IP.

image

Note that some other Zynq IPs are also there, but they are not relevant to the part on this board's FPGA so they are greyed out.

Double-clicking the IP will add it to our system. The block at this point is unconfigured and not connected. To make things work properly, a lot of things need to be configured correctly. Luckily, Vivado makes it very easy for standard boards because it already downloaded the presets for the Ultra96-v2 board. All we need to do is click "Run Block Automation" to execute this automated process.

image

This brings up the "Run Block Automation" window. Make sure the  "Apply Board Preset" checkbox is selected (by default) and click OK.

image

The process only takes  few seconds, and once done, you will notice some changes on the Zynq block. This is because of the  board presets applied by the automation process.

image

The two clock ports on the left side maxihpm0_fpd_aclk and maxihpm1_fpd_aclk must have a clock connected to them. To do this, we can connect them to pl_clk0 clock output from the Zynq block. To make the connection, click and drag the mouse from the pl_clk0 port's pin to the other two ports' pins.

image

This will make the necessary connections and we obtain the following diagram:

image

Since we are going for the most basic hardware platform, we will not make any other connections for now.

To validate the design (check for errors), we click the "Validate Design" icon.

image

If the validation is successful, we receive the following message. Click OK to dismiss it.

image

Now we need to create a HDL wrapper for our block design. In the Block Design window, first click "Sources" tab. Then, find the "design_1" element, right-click it and select "Create HDL Wrapper"

image

A window will appear if we want to manage the wrapper. We let Vivado manage it instead. Click OK to proceed.

image

This process can take few tens of seconds. 

You will notice that in the Sources hierarchy our original design is shown under the new "design_1_wrapper".

image

At this point we can save our project.

Generate bitstream and Export platform for Vitis

Now all that is left is to Synthesize the design, Implement it and generate bitstream. Actually we can just command Vivado to generate the bitstream and it will do the synthesis and implementation already  (since they are required before generating the bitstream). Click the "Generate bitstream" in the Flow Navigator under "Program and Debug"

image

This will start the process of Synthesis -> Followed by Implementation -> Followed by Bitstream Generation.

This can take anywhere between few minutes to several hours depending on the design complexity and the host machine's computing power. Since ours is a relatively basic design, this should only take few minutes.

You can monitor the progress by looking at the status in the top-right of screen

image

Another place to monitor this progress is in the "Design Runs" window at the bottom of the screen which shows the progress in more detail

image

Once the process completes successfully, we will be presented with the following window. Press OK to open the implemented design.

image

Once the implemented design opens, we can look at various reports. For example, under the power report, We can see that our bare minimum design will consume about 1.9 Watts of power. Remember that this is an estimated power based on some assumptions since Vivado doesn't know 100% of your design and it's usage while running. Nevertheless it gives a good ball-park figure.

image

Now all that's left is the export our hardware platform for Vitis.

To do this, Click File -> Export -> Export Hardware. 

image

This opens the Export Hardware Platform wizard. Click Next on the first page.

image

Make sure "Include bitstream" is selected. The pre-synthesis option is if you want your software team to start working even before the hardware design is compiled. 

Click Next.

image

On the last page, you can change the name of exported hardware platform file, as well as change the export location if needed. In my case I proceed with defaults and click Finish.

image

The process will run for a few seconds and then disappear, meaning the hardware platform file has been exported.

Now, if we go into the folder where we eported the file, we will see the exported .xsa file

image

This completes our tutorial for creating a basic  hardware platform for the Ultra96-V2 in Vivado 2022.2. 

In future blogs, we will use this exported platform to run some software applications on our processor(s).


Thanks for reading and following along! See you next time!

  • Sign in to reply

Top Comments

  • saadtiwana_int
    saadtiwana_int over 2 years ago in reply to navadeepganeshu +1
    navadeepganeshu Thank you, and thank you! It's such a small world these days!
Parents
  • navadeepganeshu
    navadeepganeshu over 2 years ago

    Good one. Thanks for explaining step-by-step. 

    Above all, congratulations saadtiwana_int  on your new job role!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
Comment
  • navadeepganeshu
    navadeepganeshu over 2 years ago

    Good one. Thanks for explaining step-by-step. 

    Above all, congratulations saadtiwana_int  on your new job role!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
Children
  • saadtiwana_int
    saadtiwana_int over 2 years ago in reply to navadeepganeshu

     navadeepganeshu 

    Thank you, and thank you! Slight smile It's such a small world these days! Smiley

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube