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
- In the dataflow
design, click .
- 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:
- 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
- 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_depthswitch to 10. Rerun theShow Dataflow Pathscommand with this updated and you will have a result with fewer paths to work with.
- 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,-toand-throughswitches. 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
- 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
- From the Tcl Console, you can find the syntax used to generate
the dataflow
paths.
Theshow_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}]]get_dataflow_pathscommand returns objects that you analyze like other objects in Vivado. These can be viewed in the Vivado IDE using theshow_objectscommand. You can also use other commands such asreport_property,get_propertyandselect_objectsas 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]. - 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:
- There are also some other useful ways to leverage the
get_dataflow_pathscommand. For example you can look at paths between different macros such as RAMs – DSPs. We can use theget_cellscommand 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] - 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.