Step 3: Generating Dataflow Paths - Step 3: Generating Dataflow Paths - 2026.1 English - UG938

Vivado Design Suite Tutorial: Design Analysis and Closure Techniques (UG938)

Document ID
UG938
Release Date
2026-06-23
Version
2026.1 English
This step explains how to generate dataflow paths. These are objects that contain paths with multiple cells. These allow you to:
  • Trace the connectivity based on the longer chain connections seen in the design
  • Target analysis to specific paths in the design
  • View connectivity between one object type and another
  1. In the dataflow design, click Tools > Show Dataflow Paths.

  2. Click OK. This generates the top 100 paths in the design. It starts by identifying paths of which the depths are at the value of the -max_depth value, which defaults to 10. Depth can also be referred to as hops as each cell within the dataflow path is considered a hop. It returns a dataflow paths window that looks like the following:

  3. Examine the headers in the Find Results window. Try sorting by the following items:
    • Source Ref - This is the type of primitive of the first cell in the dataflow path
    • Hops - This is the number of jumps from one cell to another in the path
    • Source - This is the cell name
  4. When you sort by Source, you will see that there are many paths from the same source. These have differing number of hops. In this design, the elements are all in a chain so the paths with fewer hops are a subset of the longest path. Tidy this up by increasing the -min_depth switch to 10. Rerun the Show Dataflow Paths command with this updated and you will have a result with fewer paths to work with.

  5. In a lot of cases, to target paths you are interested in, you will have to create a path where specific cells are targeted. Reopen the Show Dataflow Paths dialog box and select "From cells". Then click on the … box. Unlike timing paths, Dataflow Paths can only accept leaf cells as the target objects for the -from, -to and -through switches. Nets, pins and hierarchical pins are excluded. Generate a dataflow path with the following options:
    • Start cell: get_cells {G_total_RAM_MULTS[1].ram_i/ram_name_reg_bram_0} (BLOCKRAM)
    • End cell: get_cells {G_total_RAM_MULTS[10].mult_i/mult_out_reg} (DSP)
    • Maximum depth: 20
    The following tips will help you find the cells more easily:
    • IS_PRIMITIVE=TRUE
    • PRIMITIVE_GROUP set to BLOCKRAM for RAM search
    • PRIMITIVE_GROUP set to ARITHMETIC for DSP search
    • PRIMITIVE_LEVEL is not equal to INTERNAL for DSP search


  6. From the Tcl Console, you can find the syntax used to generate the dataflow paths.
    show_objects -name dataflow_paths_3 [get_dataflow_paths -max_paths 100 -min_width 16 -max_depth 20  -from [get_cells {G_total_RAM_MULTS[1].ram_i/ram_name_reg_bram_0}] -to [get_cells {G_total_RAM_MULTS[10].mult_i/mult_out_reg}]]
    The get_dataflow_paths command returns objects that you analyze like other objects in Vivado. These can be viewed in the Vivado IDE using the show_objects command. You can also use other commands such as report_property, get_property and select_objects as well. Experiment with this, if you need a single object you can use lindex to reference just one object. For example: report_property [lindex [get_dataflow_paths] 0].
  7. Select the returned path. Next, open the Device window if it is not already open. When the parent design is placed, placement of the cells in the dataflow netlist is imported and can be observed in the device view when a dataflow path is selected. In addition, you can also see the direction of the path between the source and the destination as shown in the following figure:

  8. There are also some other useful ways to leverage the get_dataflow_paths command. For example you can look at paths between different macros such as RAMs – DSPs. We can use the get_cells command to return all the block rams and DSP slices and look at paths from RAMs to DSPs along with the max depth set to 1. Lets do this in Tcl:
    set rams [get_cells -hier -filter {PRIMTIVE_GROUP==BLOCKRAM}];
    set dsps [get_cells -hier -filter {PRIMTIVE_GROUP==ARITHMETIC&&PRIMITIVE_LEVEL!=INTERNAL}];
    show_objects [get_dataflow_paths -from $rams -to $dsps -max_depth 1]
  9. Select all the returned paths. It should produce a device view that looks as the following:

    In this design, we have floorplanned the poor placement, but in a more typical design, when you have stretched paths, it can be symptomatic of a type of resource being heavily used and being unavailable locally to the other resource type.