The following steps are used for custom platform developers.
- Create a Vivado project with
the necessary BD, RTL, test bench, and other sources.
- Note that in 2020.1, only BD can be used in HW EMU, but starting 2020.2, other sources will also be allowed.
- For Versal ACAPs only, test bench needs to include BD wrapper instead of including BD directly, because Vitis does performs jobs on this level to insert NoC into simulation.
- For Versal ACAPs only, to
enable AI Engine in the Vitis platform, the AI Engine block needs to be configured to
have only one slave AXI4 Memory-Mapped port
enabled and connected to NoC. Vitis based on AI Engine Graph software
will make additional auto-connections during
v++
linking stage. - For DFX platforms, specify correct PFM properties in the dynamic region BD so that the Vitis tools can attach accelerators correctly.
- Update the design HW Emulation packaging into XSA.
- Before packaging the design into XSA, it is important that your design step through the simulator correctly.
- For Versal ACAPs only,
prepare the platform design to enable SystemC models. Update the CIPS and
NoC IP setting to change SELECTED_SIM_MODEL property to TLM. This ensures
that for CIPS IP, the design uses QEMU model on which SW can be run.
Following Tcl command can be used in the design. Also, set the parameter to
enable SystemC simulation in Vivado:
foreach tlmCell [get_bd_cells * -hierarchical -filter {VLNV =~ "*:*:axi_noc:*" || VLNV =~ "*:*:versal_cips:*"}] {set_property SELECTED_SIM_MODEL tlm $tlmCell } set_param bd.generateHybridSystemC true
- Create a test bench in
sim_1 fileset
fileset and instantiate the<top>
module of your design. For Versal ACAPs, Vivado requires that the user test bench should not instantiate the<top>
module directly. Instead, it should instantiate<top>_sim_wrapper
module. A file called <top>_sim_wrapper.v is generated when you call thelaunch_simulation -scripts_only
command. The interface of this module is the same as your<top>
module, but it instantiates additional simulations models related to an aggregated NoC module created from various logical NoC modules instantiated in the design. - Compile the design, go through the above steps, and start simulation.
Because the design is configured to use QEMU, the CIPS IP will not generate
any transactions because there is no SW present when doing simulation in
Vivado simulator. You will see the
following ERROR message in the Vivado
simulation, but it indicates that the basic design loads correctly in
simulator.
############################################################## # # Simulation does not work as Versal CIPS Emulation (SELECTED_SIM_MODLE=tlm) only works with Vitis tool(launch_emulator tool in Vitis) # ############################################################## ERROR: [Simtcl 6-50] Simulation engine failed to start: The Simulation shut down unexpectedly during initialization.
Note: To confirm that the design will have correct transactions, you can optionally perform a simulation of the design using the CIPS VIP first before changing it to use TLM (QEMU). First, you must keep the SELECTED_SIM_MODEL property to be RTL for NoC and CIPS IP. Also, create a different test bench which drives the CIPS VIP and also meet the requirement of the NoC Verilog model. Refer to the CIPS VIP and NoC IP documentation for additional details on how to set up test bench for Verilog-based simulation.
- Package the HW Emulation only XSA.
- Use
set_property platform.platform_state "pre_synth" [current_project] write_hw_platform -hw_emu -file platform_hw_emu.xsa
to export a Hardware Emulation platform or use the following
Tcl
command: - This XSA can be used with pre-built Linux images or with PetaLinux to create a custom Linux image to create a full platform. Then, the remainder of the Vitis tools can be used to add a kernel to design with the XRT.
- Use