Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

I find it incredible that one year out from  2020, most Allegro HDL customers I come in contact with seem to avoid Hierarchical Schematic Design (HSD) like the plague. The next tier of customers are starting to test out HSD in their workflows. The companies I have worked for  have been reaping the benefits of  HSD since early 2000 when it was known as Concept  (before AllegroHDL, or  Design Entry HDL. (I think we started with version 12.5). The seeds of the cadEnhance tool set were planted to simplify HSD and work around the problems that occurred if you weren't careful. 

When creating an Allegro HDL Hierarchical Schematic, it is worth spending a fair amount of time planning the initial Hierarchical Structure. The design consists of a Top Level where  common circuitry and a mix of Hierarchical Blocks (HBLOCKS)  can be placed.  Each HBLOCK design may instantiate one or more more levels of Hierarchy.  When partitioned properly, the design is easy to work with and modify and allows easy substitution of key blocks and lends itself well to reuse in other designs, saving countless days of development. It is important to understand the the initial plan may not be what you end up with, but a good plan should be easy to morph into the final structure.

Once the Structure is in place, the CadEnhance PartBuilder, CE-HDL tools work best if you create the design from the bottom up.

Starting in the low level HBLOCKS, CE-HDL can be used to create wire names derived from the pinNames of the devices instantiated in those blocks. Any wire that gets connected to an io-port symbol will create a Port for the HBLOCK. Once the wires are created, PartBuilder can be run to create the symbol for the HBLOCK where the automatically named wire names are used to create port names on the HBLOCK. CE-HDL is then  used to wire the  HBLOCK symbol, where  the connection names are created from the HBLOCK port-names, using simple prefixes or more complex rename rules to create unique names. In this way, the majority of the design connections are created using strong naming conventions where signal names can be traced back to the initiating pinNames.  This provides great accuracy in the net-naming and lends itself well to automated checking.  

Planning the Hierarchy

It is important to keep several goals in mind when you plan your Hierarchy

  1. Efficiency of Creation
    1. Many first time Hierarchical designers go a little overboard and create too many hierarchical blocks (HBLOCKS) to try and solve the problem. They create one HBLOCK for every IC, and another HBLOCK  for every function. This becomes difficult to manage because a symbol mus be maintained for each block in the design, and connectivity changes can cause a nightmare ripple effect.
    2. Since version 16.6 Cadence has created the concept of NET_GROUPS which let you bundle multiple disparate signalNames into one port which helps with connectivity issues.  design harder to follow and verify.
    3. With good forethought, the number of HBLOCKS can be kept to a minimum so that design changes are easier to manage
  2. Reuse
    1. If your Hierarchy is designed efficiently, the major blocks will lend themselves to reuse in multiple designs either in their exact form or with simple modifications. This can shave huge amounts of development time when creating a new design from an existing design (or pieces of multiple existing designs).
    2. A well planned design lends itself to packaging using Allegro SUB_DESIGNS. Here the cadEnhance pkgAssitant tool can be used to incrementally package groups of blocks for the design. It provides a a smoother design process. With SUB_DESIGNS the base reference designators are identical between blocks and get uniquified with some levels of suffixing) . The use of Sub-designs also keeps some of the known gremlins that can appear when the  Allegro packager compiles the full complex hierarchical design at bay.  
  3. Substitution
    1. An Intelligent Hierarchical Design will allow the user to substitute out Key functions by simply swapping an HBLOCK.
      1. This can provide incredible time savings  if you have to swap FPGA devices, families or vendors.
        1. An FPGA block with its power HBLOCK inside the block can be helpful here since the port names may not change, but the required power may be completely different. If we feed 12V and 3.3V and a set of enable signals into the FPGA HBLOCK, and have the power HBLOCK provide the more granular rails to the FPGA. The changes required at the high level block interfaces will be minimized.
      2. The same applies to a design with a micro-controller, switch or other networking function. If you want to migrate to a newer more powerful or lower power device, a well designed HBLOCK will lend itself to easy substitution.
  4. Don't be afraid of multiple levels, but don't go crazy with levels either.
    1. multiple HBLOCK levels will allow you to copy and reuse placements and routing at the PCB level.
    2. If you have an FPGA with 2 memory interfaces (either to a DIMM or discrete memory), it often  makes sense to instantiate the 2 DIMMS at the same level in the FPGA block to avoid having to route the DIMM signals out of the FPGA block and into a DIMM block. If the memory interface consists of multiple devices, it would makes sense to make an HBLOCK to contain the multiple memory devices and then instantiate the memory interface HBLOCK twice inside the FPGA Block
    3.  

Instructions

  1. Create Top Level schematic 
    1. This article is focused on creating Hierarchical designs from scratch. The process is similar when you are creating a new product design by gluing together blocks from existing designs.
      1. Create Pages for the top Level design to hold the 1st level HBLOCKS
      2. The page for 




  • No labels