Quantcast
Channel: Cadence Blogs
Viewing all articles
Browse latest Browse all 6670

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 .il . To load the procedure from the saved file into Virtuoso, specify the following command in CIW. load(" .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 Virtuoso Space-based Router User Guide Multi-layer Bus Support in Wire Editing Customizing Multi-Layer Bus Transition Virtuoso Layout Suite SKILL Reference Manual weAddCustomTransitionMenuItem weRemoveCustomTransitionMenuItem weGetCustomTransitionMenuItems Note : For more information on routing related Cadence products and services, visit www.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 6670

Trending Articles