Making any IP in the IP Catalog availabe in QSys
Introduction
I needed the Cyclone V Transceiver Native PHY IP Core inside QSys. Why? Actually, part of a failed attempt to find solve a compilation error.
The IP is available in Quartus 15.1′s IP Catalog, but inside the same toolkit’s QSys it doesn’t appear in the list of IPs. As discussed in this forum thread, this is intentional: Altera doesn’t support having it inside QSys, seemingly because it’s not “fully verified”. OK, so I’ll take the risk. How do I make QSys list this IP, so it can be included?
The fix
As mentioned in this guide, the thing is that IPs which are hidden from QSys have the INTERNAL property set to “true”. All that is left is hence to edit the relevant Tcl file, and update the IP database.
Mission number one is to find the correct Tcl file. The hints on the file’s name are:
- It’s probably related to the IP’s name and functionality
- It ends with *_hw.tcl
- The FPGA family is denoted by “av”, “cv” “sv” etc
Eventually the file I was looking for was at /path/to/quartus/ip/altera/alt_xcvr/altera_xcvr_native_phy/cv/tcl/altera_xcvr_native_cv_hw.tcl. Unlike many other HW Tcl files, it doesn’t just assign parameters directly (in which case it’s easy to spot the assignment to INTERNAL), but it merely consists of adding a couple of directories to some search path, and then it goes:
::altera_xcvr_native_cv::module::declare_module
which refers to module.tcl, which has the following code snippet:
namespace export \
declare_module
# Internal variables
variable module {\
{NAME VERSION INTERNAL ANALYZE_HDL EDITABLE ELABORATION_CALLBACK PARAMETER_UPGRADE_CALLBACK DISPLAY_NAME GROUP AUTHOR DESCRIPTION DATASHEET_URL DESCRIPTION }\
{altera_xcvr_native_cv 15.1 true false false ::altera_xcvr_native_cv::module::elaborate ::altera_xcvr_native_cv::parameters::upgrade "Cyclone V Transceiver Native PHY" "Interface Protocols/Transceiver PHY" "Altera Corporation" NOVAL "http://www.altera.com/literature/ug/xcvr_user_guide.pdf" "Cyclone V Transceiver Native PHY."}\
}
}
This is an assignment of multiple variables: The names of the variables are listed on the first curly brackets, and the values in the second. As the third variable is INTERNAL, that’s the one to fix. So the actual edit consist of changing the “true” marked in red above to “false”.
Updating the IP catalog
Only making the change above isn’t enough. The IP Catalog cache must be updated as well.
Change directory to something like /path/to/quartus/ip/altera/ and set up the environment variables:
$ ../../nios2eds/nios2_command_shell.sh
and then create an IP Catalog cache:
$ ip-make-ipx
Once done, overwrite the previous file (you may want to make a copy of it first):
$ mv components.ipx altera_components.ipx
And now restart Quartus. The said IP now appears in QSys’ IP Catalog.