Step 4: Floorplanning - 2024.1 English

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

Document ID
UG938
Release Date
2024-06-12
Version
2024.1 English
This step explains how floorplanning must be done when using the DFV. As this is a different design, with different objects, and no timing constraints, information must be gathered in DFV and floorplanning must be done in the parent design.
  1. Run the following Tcl command:
    show_objects [set paths [get_dataflow_paths -max_depth 1]]
    select_objects $paths
    
    In the device view, you again see the individual paths that you saw earlier. When you examine these more closely, you observe that some paths are crossing over each other. For this, you can alleviate the problem by updating the floorplan. The goal is to move all the items in the red box to where the green box is:

  2. In this design, there is a chain and the indices of the cells increase. Identify the first cell name in the red box and the last cell name and fill in the blanks. Zoom in within the device view and select the first cell in the chain in the red box. You should find it is the cell with the following name G_total_RAM_MULTS[3].mult_i/mult_out_reg. Repeat the process and select the final cell in the chain:G_total_RAM_MULTS[9].ram_i/ram_name_reg_bram_0.
  3. From the above, you can conclude that you need to floorplan the following cells:
    
    DSPs:
    G_total_RAM_MULTS[3].mult_i/mult_out_reg
    ..
    G_total_RAM_MULTS[8].mult_i/mult_out_reg
    RAMs:
    G_total_RAM_MULTS[4].ram_i/ram_name_reg_bram_0
    ..
    G_total_RAM_MULTS[9].ram_i/ram_name_reg_bram_0
    
  4. You can create a single path using the following syntax, then select the path and filter it so that only cells are selected
    set path [get_dataflow_paths -max_depth 11 \
    -from [get_cells G_total_RAM_MULTS[3].mult_i/mult_out_reg] \
    -to [get_cells G_total_RAM_MULTS[9].ram_i/ram_name_reg_bram_0]]
    show_objects -name single $path
    select_objects $path
    select_objects [set cells [filter [get_selected_objects] {CLASS==cell}] ]
    puts "[join $cells \n]"
    
    The resulting output should print out the cell names that are in the path. These are also stored in the cells variable:
    G_total_RAM_MULTS[3].mult_i/mult_out_reg
    G_total_RAM_MULTS[4].ram_i/ram_name_reg_bram_0
    G_total_RAM_MULTS[4].mult_i/mult_out_reg
    G_total_RAM_MULTS[5].ram_i/ram_name_reg_bram_0
    G_total_RAM_MULTS[5].mult_i/mult_out_reg
    G_total_RAM_MULTS[6].ram_i/ram_name_reg_bram_0
    G_total_RAM_MULTS[6].mult_i/mult_out_reg
    G_total_RAM_MULTS[7].ram_i/ram_name_reg_bram_0
    G_total_RAM_MULTS[7].mult_i/mult_out_reg
    G_total_RAM_MULTS[8].ram_i/ram_name_reg_bram_0
    G_total_RAM_MULTS[8].mult_i/mult_out_reg
    G_total_RAM_MULTS[9].ram_i/ram_name_reg_bram_0
    
  5. Once you have the cell names, switch designs using the switch icon at the top of the screen. At the Tcl Console, prove that the variable still exists after switching designs by typing the following command:
    puts “$cells”
  6. Next, you have to delete the existing Pblocks in the design. Open the physical constraints window and delete the Pblocks associated with the above cells. The name is not the same but similar enough to figure out. You should have a list like the following before deleting them:

    Once you select these, right click on one and select delete.

  7. Next, you need to create a new Pblock with your cells. Use the following syntax to select the cells: select_objects $cells. Next, with the objects selected, open the Netlist window and on a selected cell, right click Draw Pblock. Ensure that Assign Selected Cells is checked and draw a Pblock anywhere in the approximate area. Click through any boxes that pop up.
  8. At this point the Pblock is created but not saved. You can either save the constraints or you can go into the Tcl console and copy the text output and manually add this to your design constraints.