What Is an IP and How Do You Create One?

The acronym IP probably means a lot of things to a lot of different people. But to those of us in the world of FPGAs, it’s something special. IP stands for intellectual property. Intellectual property can be a lot of things, but when I say intellectual property I’m talking about the libraries of HDL (hardware design language) modules that are available for your use. Users and companies build IPs for use, so that designs are easier and faster to build.

An FPGA design can be made up of many IP cores.

It’s like painting vs. doing a puzzle. Rather than building every individual part of your design yourself, you can just take the pieces that you need and focus on the bigger picture. As long as you respect that it’s someone else’s intellectual property, of course. After all, you wouldn’t put together a puzzle and then say you painted it. For example, say you needed to use an Ethernet port but didn’t want to write an Ethernet controller yourself. You could find an existing Ethernet controller and use it in your design. Xilinx has a huge library of IPs to use with Digilent boards, as well as an IP library built into Vivado Design Suite.

 

A snapshot of the Vivado Design Suite. Select IP catalog on the left side of this screen to see the IP catalog.
A snapshot of the Vivado Design Suite. Select IP catalog on the left side of this screen to see the IP catalog.
A zoomed in image of the IP catalog. You can view details about the IP below the list.
A magnified image of the IP catalog. You can view details about the IP below the list.

Not only can you use IPs from the vast libraries available, but you can also create your own IP with the IP packager available from Xilinx Vivado. One benefit to creating an IP, rather than just using .v files and instantiating a top module as you normally would, is that with the Vivado Design tools you can design visually with a schematic. You can take each of your IPs and physically connect the pins, which can be much easier than typing in inputs and outputs for each module instantiation.

As an example I will use my PWM (pulse-width modulation) project from EE352. It generates a square wave with a varying duty cycle depending on the value of an up-down counter. The PWM signal is sent to an LED, which looks to us like it gets brighter and dimmer as the value of the counter changes.

 

Using IPs in Vivado allows you to connect signals between modules visually. To create a block diagram in this project, select Create Block Diagram in the Flow Navigator under IP Integrator.

A snapshot of the Vivado Design Suite. Select IP catalog on the left side of this screen to see the IP catalog.
Vivado Design Studio.

When the block diagram opens, it is empty, so we need to create and add an IP! If you wanted to add an existing IP, you could just click the blue text that says Add IP. We are going to make our own.

When the block diagram opens it is empty, so we need to create and add an IP!
Empty Block Diagram

To create an IP go to the Tools menu and select Create and Package IP.

To create an IP go to the Tools menu and select Create and Package IP.
Tools menu.

The Create and Package IP wizard will open. Select Next.

The create and package IP wizard will open. Select Next.
The wizard!

The next window will prompt you to select what type of IP you need to add. I show how to Create a new AXI4 Peripheral in my Zybo Hands-on Embedded Linux Tutorial. Here I will just create an IP out of the project that is open, my PWM project. If you wanted to make an IP out of a different project you could pick Package a specified directory. Select the Package your current project radio button and click Next.

The next window will prompt you to select what type of IP you need to add.
Which task?

Because of the radio button we selected in the previous step, the PWM project is selected as the IP location. If you wanted a different project you could change that here. Click Next.

Choose the file destination.
Choose the file destination.

 Next the wizard will tell us what information we will need to package the IP. Click Finish to finish creating the IP.

 

New IP configuration.
New IP configuration.

Vivado will notify you that you finished packaging your IP, even though you really didn’t. Select OK.

We finished creating our IP.
We finished creating our IP.

Notice that a new tab called Package IP, opened up. We will have to go through all the Packaging Steps. You can name the Vendor, Library and Name whatever you want. Mine were automatically filled in from my computer. Since I am just now creating this IP, the Version is 1.0. Add whatever display information you want and click on the next step, Compatibility.

Package info tab.
Package info tab.

Review the Compatibility Settings and click the next step, File Groups.

Compatibility tab.
Compatibility tab.

Review the File Groups and click the next step, Customization Parameters.

 

File groups tab
File groups tab

Review the Customization Parameters and click the next step, Ports and Interfaces.

 

Customization Parameters tab.
Customization Parameters tab.

Review the Ports and Interfaces and click the next step, Addressing and Memory.

 

Ports and interfaces tab.
Ports and interfaces tab.

Review the Addressing and Memory and click the next step, Customization GUI.

 

Addressing and Memory Configuration tab.
Addressing and Memory Configuration tab.

Review the Customization GUI and click the next step, Review and Package.

 

Checking to make sure it looks right.
Checking to make sure it looks right.

Review the information and click Package IP.

Finish packaging the IP.
Finish packaging the IP.

Now that we’ve created the PWM IP, we can add it to the blank block diagram. Click the blue text that says Add IP, or right click on the block diagram and click Add IP.

Add IP to the block diagram.
Add IP to the block diagram.

You can search through the catalog of IPs to find the created one by typing part of the name in the search bar. Once it is highlighted, click on it to add it to the block diagram.

We found our IP!
We found our IP!

You can see the IP added to the block diagram. Now you can go on and create your own IPs.

Your completed IP in the block diagram.
Your completed IP in the block diagram.

If you need more background on creating and writing FPGA projects in Vivado or ISE, visit Digilent’s Learn site, select browse by project and select the FPGA category.

Be the 1st to vote.

One Comment on “What Is an IP and How Do You Create One?”

  1. I have a couple of questions.

    When would you need to do something beyond just “reviewing” each of the sections?

    Also, the Ports and Interfaces tab said it had an error; but was it not serious enough to be an actual problem?

Leave a Reply

Your email address will not be published. Required fields are marked *