Quantcast
Channel: Analog/Custom Design
Viewing all articles
Browse latest Browse all 749

Virtuosity: Is it Possible to Create a Bus on Several Metal Layers Simultaneously?

$
0
0


Routing Multiple Nets on Different Metal Layers to Gain Productivity

Have you ever found yourself in a situation where all the wire segments in a bus are on different metal layers? Did you ever think about interactively routing a bus on two metal layers at the same time, for example M1 and M3, to gain productivity and achieve tighter spacing than would be possible on a single metal layer?

Until now, interactive routing did not support bus creation on multiple metal layers at the same time, just one metal layer at a time. You can start a single-layer bus from pins, wires, or vias. But when you start a multi-layer bus from pins, wires, and vias on different metal layers, it becomes difficult to route multiple nets on different metal layers. The methodology required is to manually split the bus into alternating parts (such as odd and even parts) and then route them in two passes. This method is cumbersome and it is difficult to get good results.

So, have there been any improvements in this area and is it now possible to create and route a bus on several metal layers simultaneously? 

Yes, indeed! The multi-layer bus feature is the answer.

Now, with the new multi-layer bus feature, you can create and digitize bus bits on different metal layers. At the same time, you can also adjust the spacing between the bus bits based on default constraints, source and target objects, and spread.

A multi-layer bus can be created from the following starting points:

  • An empty space

When you create a multi-layer bus from an empty space, you can create the multi-layer bus with a customized layer pattern. In a customized layer pattern, each bus bit is defined with a layer name or a layer-purpose pair.

 

The custom layer pattern is a string. The syntax to define a custom layer pattern is:

(layerName1 [purposeName1] layerName2 [purposeName2] ...) [(layerName3 [purposename3]) ...]

Here are some examples of how a multi-layer bus is created when started from an empty space, based on the defined custom layer patterns.

  • Existing pins and pre-routes, such as wires or vias

To create a multi-layer bus from an existing source, such as pins, wire, and vias, enable the Multi Layer Bus Selection option in the Create Bus context-sensitive menu. The figure below shows how a multi-layer bus is created when starting from pins on different metal layers.

  

Transitioning Capabilities in a Multi-Layer Bus

In a multi-layer bus, you can switch bus bits between layers by moving up or down one or multiple layers at a time. You can also move all the bus bits to the same layer, and then switch back to a multi-layer configuration. But this can be done only after inserting the appropriate vias.

 

 

Switching the bus bits between a multi-layer configuration provides an easy way to tunnel the bus on one layer and then quickly and easily switch back to the multi-layer configuration. The example here shows how the bus bits transition from multiple metal layers to the same metal layer and then revert back to the multi-layer bus configuration. 

 

Customizing Multi-Layer Bus Transition

Is it possible to start a single-layer bus and easily switch to a multi-layer bus configuration? Yes, indeed it is.

To maximize the flexibility and power of the multi-layer bus feature, you can define SKILL procedures for creating complex multi-layer bus transition patterns, which makes the feature highly customizable. The steps involved to customize multi-layer bus transition are shown in the figure below.


  • Define the SKILL Procedure

Write a SKILL procedure in the Command Interpreter Window (CIW). You can also write the SKILL procedure in a .il file and then load the file in CIW. The defined procedure can also be saved into a local directory as <filename>.il. To load the procedure from the saved file into Virtuoso, specify the following command in CIW.

load("<file_name>.il")

The following example defines a procedure that alternates the bus bits from Metal1 to Metal4 and from Metal2 to Metal5 and the reverse. This transition of bus bits is applied to the complete bus whatever its size.

(procedure (St14 cellViewId args)

(let (techFileId netLayerPair layerNum newLayerName newLayerNum layerName result)

result = nil

techFileId = (techGetTechFile cellViewId)

foreach netLayerPair args

layerNum = (cadr netLayerPair)

layerName = (techGetLayerName techFileId layerNum)

newLayerName = layerName

(case layerName

("Metal1"

newLayerName = "Metal4"

)

("Metal2"

newLayerName = "Metal5"

)

("Metal4"

newLayerName = "Metal1"

)

("Metal5"

newLayerName = "Metal2"

)

)

result = (tconc result newLayerName)

)

(car result)

)

)

The following figure shows the output when the above SKILL procedure is run.

  • All bits on Metal1 move up to Metal4

  • All bits on Metal2 move up to Metal5

  • All bits on Metal4 move to Metal1

  • All bits on Metal5 move to Metal2

Bus bits on other metal layers remain unchanged.

  • Include the defined SKILL Procedure in Create Bus Context-Sensitive Menu

Include the defined SKILL procedure as a menu item on the Via submenu in the Create Bus context-sensitive menu and assign a bindkey to it. To add the SKILL procedure as a menu option on the Via submenu, use the weAddCustomTransitionMenuItem SKILL API. You can then quickly access and run the SKILL procedure by using the bindkey or by clicking the associated menu option from the submenu.

 

  • Call the Defined SKILL Procedure

The defined procedure is called by the system when you click the associated menu option from the Via submenu or use the assigned bindkey.

 

The How to define custom transitions option available on the Via submenu provides information about how you can customize the multi-layer bus functionality.

 

Related Resources

Note: For more information on routing related Cadence products and services, visitwww.cadence.com.

About Virtuosity

Virtuosity has been our most viewed and admired blog series for a long time that has brought to fore some lesser known, yet very useful software and documentation improvements, and also shed light on some exciting new offerings in Virtuoso. We are now expanding the scope of this series by broadcasting the voice of different bloggers and experts, who would continue to preserve the legacy of Virtuosity, and try to give new dimensions to it by covering topics across the length and breadth of Virtuoso, and a lot more… Click Subscribe to visit the Subscription box at the top of the page in which you can submit your email address to receive notifications about our latest Virtuosity posts. Happy Reading!

 

 Parul Agarwal


Viewing all articles
Browse latest Browse all 749

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>