create_ip - 2023.2 English

Vivado Design Suite Tcl Command Reference Guide (UG835)

Document ID
Release Date
2023.2 English

Create an instance of a configurable IP and add it to the fileset


create_ip [‑vlnv <arg>] ‑module_name <arg> [‑dir <arg>] [‑force]
    [‑allow_hidden] [‑vendor <arg>] [‑library <arg>] [‑name <arg>]
    [‑version <arg>] [‑revision <arg>] [‑quiet] [‑verbose]


List of file objects that were added.


Name Description
[-vlnv] VLNV string for the Catalog IP from which the new IP will be created (colon delimited Vendor, Library, Name, Version)
-module_name Name for the new IP that will be added to the project
[-dir] Directory path for remote IP to be created and managed outside the project
[-force] Overwrite existing IP instance; allowed only with -dir option
[-allow_hidden] Allow hidden cores to be instantiated
[-vendor] IP Vendor name
[-library] IP Library name
[-name] IP Name
[-version] IP Version
[-revision] (Optional) IP core revision
[-quiet] Ignore command errors
[-verbose] Suspend message limits during command execution




This command creates an XCI file for a configurable IP core from the IP catalog, and adds it to the source files of the current project. This creates an IP source object which must be instantiated into the HDL design to create an instance of the IP core in the netlist.

For multiple instances of the same core, simply instantiate the core module into the HDL design as many times as needed. However, to use the same IP core with different customizations, use the create_ip command to create separate IP source objects.

The create_ip command is used to import IP cores from the current IP catalog. Use the import_ip command to read existing XCI and XCO files directly, without having to add IP to a catalog.

This command returns a transcript of the IP generation process, concluding with the file path and name of the imported IP core file.

Note: IP cores are native to Vivado™, and can be customized and regenerated within that tool. The convert_ip command lets you to convert legacy IP to native IP supported by Vivado.


-vlnv <arg> - (Optional) Specifies the VLNV string for the existing Catalog IP from which the new IP will be created. The VLNV is the Vendor:Library:Name:Version string which identifies the IP in the catalog. The VLNV string maps to the IPDEF property on the IP core.

Note: You must specify either -vlnv or all of -vendor, -library, -name, and -version.

-module_name <arg> - (Required) Specifies the name for the new IP instance that will be created. The module is created with the <module_name>/<module_name>.xci naming convention.

-dir <arg> - (Optional) The directory to write the IP core files into. If this option is not specified, the IP files (.xci, .veo...) are written in the hierarchy of the <project_name>.srcs directory.

-force - (Optional) Overwrite an existing IP instance of the same <module_name>, if one exists in the specified directory. All files associated with the existing IP will be overwritten by files associated with the newly created IP. This option can only be used with the -dir option.

-vendor <arg> - (Optional) Specifies the vendor name for the IP's creator.

-library <arg> - (Optional) Specifies the IP library from which the core should be added.

-name <arg> - (Optional) Specifies the name of the IP core in the catalog.

-version <arg> - (Optional) Specifies the version number for the IP core.

Note: You must specify either -vlnv or all of -vendor, -library, -name, and -version.
-quiet - (Optional) Execute the command quietly, returning no messages from the command. The command also returns TCL_OK regardless of any errors encountered during execution.
Note: Any errors encountered on the command-line, while launching the command, will be returned. Only errors occurring inside the command will be trapped.
-verbose - (Optional) Temporarily override any message limits and return all messages from this command.
Note: Message limits can be defined with the set_msg_config command.


The example below imports the IP core specified by the -vlnv string, and gives it the specified module name in the current project:

create_ip -vlnv -module_name test_addr

The following example, from Vivado, creates an IP block with the specified -vendor, -library, -name, -version values, and assigns it the specified module name. After the IP is created, attributes of the IP are customized using set_property commands. Then the instantiation template and the synthesis targets are generated for the IP:

create_ip -name c_addsub -version 11.0 -vendor -library ip \
   -module_name c_addsub_v11_0_0
set_property CONFIG.COMPONENT_NAME  c_addsub_v11_0_0 \
   [get_ips c_addsub_v11_0_0]
set_property CONFIG.A_WIDTH  32 [get_ips c_addsub_v11_0_0]
set_property CONFIG.B_WIDTH 32 [get_ips c_addsub_v11_0_0]
set_property CONFIG.ADD_MODE Add_Subtract [get_ips c_addsub_v11_0_0]
set_property CONFIG.C_IN true [get_ips c_addsub_v11_0_0]
generate_target  {instantiation_template synthesis} \
   [get_files C:/Data/c_addsub_v11_0_0/c_addsub_v11_0_0.xci \
   -of_objects [get_filesets sources_1]]