We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 59335

Vivado IP Flows - Using a Tcl file to add and create a Vivado IP to a project I get errors [Opt 31-30] where the IP core is considerd a Black Box


I use the following Tcl commands to create and add a single IP core to a design, however opt_design fails due to the IP being a black box:

create_project -force -in_memory my_project
set_property target_language vhdl [current_project]
set_property part xc7k70tfbg676-1 [current_project]
read_vhdl my_top.vhd
read_ip core.xci
generate_target -force synthesis [get_files *my_core.xci]
synth_design -top my_top

I receive the error below:

ERROR: [Opt 31-30] Blackbox my_core_1 (my_core) is driving pin I of primitive cell dout_OBUF[14]_inst. This blackbox cannot be found in the existing library.
Resolution: Please check the input design and ensure that the specific blackbox module is defined. Once the design is modified, then re-run the Vivado flow.
ERROR: [Opt 31-30] Blackbox my_core_1 (my_core) is driving pin I of primitive cell dout_OBUF[15]_inst. This blackbox cannot be found in the existing library.

Why does this occur?

Is this expected behavior?


This occurs because the IP is a black box in the design. 

The generate_target command in the script above does not generate the DCP checkpoint for the IP core.

As a result, when opt_design is run, the black box in the Synthesis run is not resolved and remains a black box in opt_design.

This means that these errors are valid. 

To correctly add the IP core to the design, the IP core needs to be synthesized using the synth_ip command. 

See the modified script below with the key line in bold:

# created on disk
create_project -in_memory -part xc7k70tfbg676-1 -force my_project
# read an IP customization
read_ip my_core.xci
# Generate all the output products
generate_target all [get_files *my_core.xci]
# Create a DCP for the IP
synth_ip [get_files *my_core.xci]
# Query all the files for this IP (optional)
get_files -all -of_objects [get_files *my_core.xci]
read_vhdl my_top.vhd
synth_design -top my_top

Linked Answer Records

Associated Answer Records

AR# 59335
Date 11/27/2014
Status Active
Type General Article
  • Vivado Design Suite - 2013.4
Page Bookmarked