- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
We are recently moving from Quartus 17 to Quartus 22, and have in the past
assembled our Quartus project using TCL scripts.
We encounter some problems when we try hard to continue using Platform
Designer (QSYS) tools to maintain our libraries.
1) Why does Platform Designer insist on being joined at the hip to a Quartus
project? Shouldn't it be possible to use the same QSYS subsystem files in multiple
Quartus projects? Normally in an editor changes are not made to the source file
(in this case the Quartus project) unless we select save from the menu? These are
only some comments from a bewildered user, I am not really optimistic that there
can be any resolution.
2) Given the above troubles we could always run platform designer specifying a
sacrificial Quartus project. Is there any way to, from a tcl script, automate adding
the very large number of generated IP files that a large Platform Designer system
uses to the Quartus project, only after we generate the Quartus project with our
build scrips? In the past we only needed to specify the top level QIP file created
by qsys-generate and all of the subordinate components were pulled into the
Quartus project together.
I have been searching in vain through the Platform Designer Commandline Utiilities
chapter in the Platform Designer documentation and trying various commands trial
and error with no success, hoping to find a script automation for adding all of the IP
of a large QSYS system to the Quartus project.
Lacking a proper script automation of course we could let the script based build fail,
run platform designer using the newly generated project, and copy the new additions
specifying the generated IP files to our build scripts, but this process would need to
be repeated endlessly any time someone on our team makes a minor updates to a
Platform Designer subsystem using the GUI. A bit of messy workflow to impose on our
team!
Thanks for any suggestions, hopefully I am not the only bewildered user!
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
1) Assuming you are talking about Pro, you can duplicate the .qsys and the related .ip files (or use the archive system option to duplicate the system) and then select a different .qpf for it from the File menu in PD (Select Quartus project). The direct connection between system design and Quartus project in Pro provides benefits such as automatic regeneration of the system as needed and incremental regeneration so the entire system doesn't need to be regenerated every time a change is made.
2) Not entirely clear what you're looking for here. Why would you add components in a PD system directly to the Quartus project when they are already connected together in a PD system? Again, if you just change the selected Quartus project file for a copy of the system, everything becomes part of the selected Quartus project.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@sstrell wrote:1) Assuming you are talking about Pro, you can duplicate the .qsys and the related .ip files (or use the archive system option to duplicate the system) and then select a different .qpf for it from the File menu in PD (Select Quartus project). The direct connection between system design and Quartus project in Pro provides benefits such as automatic regeneration of the system as needed and incremental regeneration so the entire system doesn't need to be regenerated every time a change is made.
Yes, we are using pro, but somewhat surprised that the tools would work very differently between the three versions. Yes, I see how this might allow the Quartus build to do some dependency checking and only regenerate/rebuild what has changed. I am more concerned about tracking changes than in improving build speed, but yes build speed does effect my productivity.
@sstrell wrote:2) Not entirely clear what you're looking for here. Why would you add components in a PD system directly to the Quartus project when they are already connected together in a PD system? Again, if you just change the selected Quartus project file for a copy of the system, everything becomes part of the selected Quartus project.
As mentioned we are generating the Quartus project using scripts. I think other sites do this also so that changes can be tracked in source code control. The problem with using a GUI is that it always changes the order in qsf file which causes problems with source code control - creating order related changes that are not functional changes.
At this point I see no path forward other than to use the GUI to maintain the list of IP files, copying changes in the generated project back to the scripts we use to generate the project. In many ways this is similar to how we track changes in the Quartus project options setting them in the GUI and copying them back to the scripts we use to generate the project that are tracked in source code control.
The problem with maintaining a huge list of QSYS IP files for the project is that it introduces significant work for us we didn't have to do in the past. In the past the top level QIP file took care of this.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Note that you can also save a PD system as a Tcl script (PD File menu -> Export System as Platform Designer Script). Maybe that could help you with this.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ok, FWIW, it is quite possible to automate what the platform designer GUI does to your quartus project when changing to a new quartus project using its menus.
After I worked through some issues with TCL, this is the TCL I wrote for use with a qsys-script.
package require qsys 22.1
proc scan_system {} {
# get all instance names in the system and print one by one
set instances [ get_instances ]
foreach inst $instances {
examine_instance $inst
}
}
# recursively print all instances in the system
proc examine_instance { inst } {
set enabled [ get_instance_property $inst "ENABLED" ]
if { $enabled != "true" } {
return
}
set class [ get_instance_property $inst "CLASS_NAME" ]
if { $class == "altera_generic_component" } {
set success [ load_component $inst ]
if { ! $success } {
return
}
set component_class [ get_component_property "CLASS_NAME" ]
set success [ load_instantiation $inst ]
if { ! $success } {
return
}
set ip_file [ get_instantiation_property "IP_FILE" ]
puts "set_global_assignment -name IP_FILE $ip_file"
} else {
set encl_system_file [ get_module_property "FILE" ]
set inst_file [ get_instance_property $inst "FILE" ]
if { [ catch {load_system $inst_file} ] } {
exit 1
puts stderr "Could not load $class.qsys\n"
} else {
puts "set_global_assignment -name QSYS_FILE $inst_file"
scan_system
}
load_system $encl_system_file
}
}
scan_system

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page