What is a Block Design Container in Vivado ML?

Block Design Container (BDC) is a new feature in Vivado IP Integrator which allows one or more block designs to be instantiated inside another block design. This enables a seamless team-based design environment for engineers who work on parts of a bigger design. BDC also provides a project-based approach to enable and disable DFX (formerly called Partial 


Use cases Addressed by BDC

  1. Instantiate BD/BDs inside a top-level BD  
  2. Modularize a large BD by adding parts of it inside a BDC
  3. Replicate part of a BD multiple times
  4. Create a DFX design in a project environment

BDC Features

  1. Child BDS

  2. In-Place Expansion: Ability to view the contents of the Child BDs from the Top BD. This feature is useful to visualize the whole designs from the Top BD

  3. Addressing: Addressing the Child's BDs can be changed from the top level adding to the ease of stitching Child BDs.  

  4. Parameter Propagation: Parameter propagation from Top BD to Child BD (ex: Clock Frequency)

  5. Variants: Ability to specify a variant BD for synthesis and simulation. This requires that the port level boundaries do not change. Multiple variants can also be used as RMs in the DFX flow. Variants are very useful when creating a copy of the design with small changes. Example: The clock Frequency of a system might be different for NA vs Europe. Hence instead of creating a new design, a variant of a system can be created with a different clock frequency. We also can have one variant for synthesis and another for simulation

     
  6. DFX **

Want to Try?

Bottom-Up Flow

  1. Unzip the bdc_bottom_up.zip file and open the project in Vivado

  2. Open the bdc_bottom_up BD from the Flow Navigator.
    This is an empty BD. There are also two other BDs, up_counter and down_counter. Each of them contains a counter

  3.  Double click bdc_bottom_up BD from the sources window to set it active. Drag and drop up_counter bd from the Sources window. Alternatively, Right-click on the BD Canvas of bdc_bottom_up_flow → Add Module → Select Module Type to be Block Design from the Drop Down → Select up_counter from the list → Click OK
drag-drop

OR

add-module

4. Observe that up_counter is inserted as a BDC. Now run Connection Automation twice based on the banner for Clock and Reset connections   

5. The BD should look like the following :

clocking-wizard

6. Click on the + sign on the up_counter_0. This will show the BD inside the BDC. This is In Place Expansion

Now let us use the down counter for simulation and the up-counter for synthesis. This is where the concept of variance comes in. We will change select up_counter as the synthesis variant and down_counter as simulation variant

7. Double click on the up_counter_0 to open the BDC customization dialog.

8. Un-check using the same source as the Synthesis checkbox. Click on the '+' sign under Simulation Sources. In the Select Block Design Dialog, select down_counter.bd and click OK. Observe that down_counter.bd is added as a simulation source. Check the radio button next to it to make it active. Click OK

uncheck

Note that there is an option to Freeze the boundary of the container in the BDC Customization GUI. Selecting this option will lock the boundaries and parameter propagation from the top-level BD will not take place.

9. Observe the change in the BD canvas to reflect that up_counter.bd will be used for Synthesis and down_counter.bd will be used for simulation.

Note that for Variants, the port level Boundaries should not change.

Top-Down Flow :

  1. Unzip the bdc_top_down.zip file and open the project in Vivado

  2. Open the BD from the Flow Navigator

    Observe the BD. It is a simple Microblaze Design. We are now going to push the Microblaze, Microblaze Debug Module, and the Microblaze Local Memory into a hierarchy and create a Block Design Container of the Subsystem

  3. Select the Microblaze IP, Microblaze Debug Module, and microblaze_0_local_memory (Hold Ctrl Key while selecting each of the IP), Right Click → Create Hierarchy as shown below 
microblaze-subsystem

4. Name the hierarchy as microblaze_subsystem and click OK

5. Validate the BD

6. Now Right Click on the Microblaze Subsystem and Click on Create Block Design Container. Click OK in the following Popup

microblaze-design

7. Since this is a Microblaze design, any Elf file Associated with Microblaze previously will be lost. Hence you will get a Critical Warning. For this demo, we can safely ignore the Critical Warning.

8. Observe that microblaze_subsystem is now a BDC.

sub-system

9. Additionally, you can see that a separate BD is created for microblaze_subsystem

su-system-2

Conclusion

In Conclusion, BDC is an important feature for a Collaborative Design Scenario. The following three features available in Vivado in 2021.2, when used in conjunction gives a seamless Collaborative Design experience :

  1. Block Design Container
  2. Revision Control Improvements to separate sources from generated output products and 
  3. BD Diff tool to diff 2 BDs

Further Reading



About Snehal Ullagaddi

About Snehal Ullagaddi

Snehal Ullagaddi is a senior product marketing manager at AMD, focused on Vivado ML. Prior to AMD, she has worked at both semiconductor and software companies. She holds a Master’s degree in Electrical Engineering from the University of Minnesota, Twin Cities.

See all Snehal Ullagaddi's articles