Constructing the project in a single, monolithic build process as described in this chapter so far does not account for the iterative nature of practical design scenarios. As a project grows in complexity, managing changes and updates to individual components becomes essential. By adopting an incremental build strategy, you can significantly reduce the project build time by focusing only on the components that are directly affected by a change. This section explains the methods of managing design changes, allowing you to identify the specific steps that require rebuilding, streamlining the development process and optimizing project workflows.
Understanding the Build Order
To effectively manage the build process, it is crucial to understand the order in which various tools and steps are executed. The Vitis Integrated Flow and Vitis Export to Vivado Flow, provide a high-level overview of the build sequence. Next, it is important to consider the file-level handoffs between Vivado and Vitis flows. The following diagram serves as a starting point for the discussion, illustrating the key components involved in this process.
The diagram uses boxes to represent activities and arrows to depict the flow of inputs and outputs between them. The activities are governed by a range of settings which can be specified through the IDE GUI, command line options, or a configuration file. Typically these are defined using tcl, python scripts, Makefiles, and configuration text files. In addition to the settings, the build process also relies on source files representing the design objects.
While it can seem intuitive that any step following an activity would necessitate a rebuild, there are nuanced distinctions to consider. The following table highlights some scenarios to shed light on what triggers a rebuild.
Rebuild Strategies
This section lists common scenarios encountered during incremental design evolution. The scenarios are categorized from both hardware and software perspectives. For hardware changes, the software may need to be rebuilt, as software is often used to control and monitor hardware devices. Conversely, pure software changes allow for significant shortcuts as it only involves simple recompile and repackaging, leading to shorter iteration cycles.
| Scenario | Action | Comments |
|---|---|---|
| Initial build | Build/Compile all steps according to Vitis Integrated Flow or Vitis Export to Vivado Flow. | When using the "part" selection method for the
device, all activities that generate inputs for the Vitis linker can be compiled in any
order. This flexibility allows for parallel processing and
potentially faster build times. Note: For Vitis Integrated Flow projects with XRT host
applications, the extensible XSA can be used to setup Linux OS.
This allows concurrent development of software applications
alongside the AIE and PL kernels.
Important: While
incremental builds offer significant benefits, it's crucial to
perform regular full builds as part of regression testing. This
ensures the design's integrity and readiness for reuse or
branching into other projects.
|
| Modify Vivado RTL or IP integrator blocks not related to the Vitis region. |
|
This scenario involves modifying Vivado RTL or IP integrator blocks that are not directly related to the Vitis region, assuming these changes do not impact the AI Engine or Vitis region itself. Typical use cases include modifying synthesis and implementation strategies, addressing engineering change orders (ECOs), or adding additional debug ILAs. |
| Modify Vivado RTL or IP integrator blocks connected to Vitis region |
|
This scenario involves modifications to Vivado RTL or IP integrator blocks that have connections to the Vitis region. Typical use cases include implementing incremental design strategies or merging ECOs into the base design. |
| Modify RTL or HLS PL kernels |
|
This scenario addresses changes to RTL or HLS IP
kernels within the Vitis region,
assuming these modifications do not impact the physical interfaces
to/from the AI Engine. Note: If you adjust the number of instances of an
existing kernel XO, step 3 can be skipped.
|
| Modify AI Engine graph |
|
Tip: If the
interface protocols between AI Engine and PL or
GMIO remain unchanged, recompiling the graph can be treated as a
software update. This allows for skipping all steps except
recompiling SW host application and rerunning Vitis package and Flash package
steps.
|
| Modify VSS components |
|
Changes to VSS follow the same principle as listed in the previous scenarios with the addition of recompiling the VSS components and repeating the steps mentioned in the respective scenarios. |
| Scenario | Action | Comments |
|---|---|---|
| Modify host software applications |
|
This assumes no new hardware changes are made to
the design. Note: The new
executable can alternatively be downloaded directly to the
boards Linux file system using FTP or secure copy. To ensure the
new file is properly saved, use the
poweroff or reboot command to synchronize the file
system. |
| Modify device drivers |
|
Key takeaways:
- By analyzing these scenarios and the dependencies between the flow steps, you can leverage concurrent development strategies to streamline the design process.
- When multiple designers collaborate in developing a design, it is crucial to ensure the ability to rebuild the design from scratch to a known state.
- A clear understanding of the merge points and opportunities for splitting activities across a team is essential for efficient collaboration.