<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.cadence.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Custom IC SKILL - Recent Threads</title><link>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill</link><description>[b]Moderator:[/b] Andrew Beckett.</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 29 Sep 2026 04:16:30 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill" /><item><title>Question on Skill Code for Cadence Official MOS PCell</title><link>https://community.cadence.com/thread/70345?ContentTypeID=0</link><pubDate>Tue, 29 Sep 2026 04:16:30 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:018c828b-c248-4723-8545-415b83436ab1</guid><dc:creator>SZ20260803361</dc:creator><slash:comments>9</slash:comments><comments>https://community.cadence.com/thread/70345?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/70345/question-on-skill-code-for-cadence-official-mos-pcell/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Cadence provided us with the Skill code for the MOS PCell. I&amp;#39;ve been learning it and ran into some issues, so I&amp;#39;d appreciate your help. Thanks.&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color:#00ccff;"&gt;Known information&lt;/span&gt; (from Cadence official):&lt;/p&gt;
&lt;p&gt;;;substrateContact? specifies whether contacts are necessary or not on the&lt;br /&gt;;; source and drain of the transistor, and then creates it.&lt;/p&gt;
&lt;p&gt;;;leftContact? the left side of the transistor be it the source or &lt;br /&gt;;; drain&lt;br /&gt;&lt;br /&gt;;;rightContact? the right side of the transistor be it the source or &lt;br /&gt;;; drain&lt;/p&gt;
&lt;p&gt;;;transistor_length length of the transistor&amp;#39;s active area &lt;br /&gt;;; (note: this is a distance measured in the X-direction).&lt;br /&gt;;; (float, default = 1.0)&lt;/p&gt;
&lt;p&gt;;; car(substrateRules) = tap diffusion layer.&lt;br /&gt; ;; cadr(substrateRules) = tap diffusion contact enclosure.&lt;br /&gt; ;; caddr(substrateRules) = tap diffusion to active spacing.&lt;br /&gt; ;; cadddr(substrateRules) = tap diffusion to gate poly spacing.&lt;br /&gt; ;; car(cddddr(substrateRules)) = tap implant rules.&lt;/p&gt;
&lt;p&gt;;;contactWidth the width of the contact layer being used for&lt;br /&gt;;; connections&lt;br /&gt;;; (default = 1.0)&lt;/p&gt;
&lt;p&gt;(leftStretch techGetSpacingRule(techGetCurrentTechFile() &amp;quot;minSpacing&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;techParam(&amp;quot;poly&amp;quot;) techParam(&amp;quot;cont&amp;quot;)) + techGetSpacingRule(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;techGetCurrentTechFile() &amp;quot;minWidth&amp;quot; techParam(&amp;quot;cont&amp;quot;)) +&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;techGetOrderedSpacingRule(techGetCurrentTechFile() &amp;quot;minEnclosure&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;techParam(&amp;quot;ndiff&amp;quot;) techParam(&amp;quot;cont&amp;quot;)) )&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; (rightStretch techGetSpacingRule(techGetCurrentTechFile() &amp;quot;minSpacing&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;techParam(&amp;quot;poly&amp;quot;) techParam(&amp;quot;cont&amp;quot;)) + techGetSpacingRule(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;techGetCurrentTechFile() &amp;quot;minWidth&amp;quot; techParam(&amp;quot;cont&amp;quot;)) +&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;techGetOrderedSpacingRule(techGetCurrentTechFile() &amp;quot;minEnclosure&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;techParam(&amp;quot;ndiff&amp;quot;) techParam(&amp;quot;cont&amp;quot;)) )&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color:#ffff00;"&gt;Code segment with questions&lt;/span&gt;&amp;nbsp;&lt;span&gt;(from Cadence official):&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;;;*************************************************************************&lt;br /&gt;;;&lt;br /&gt;;;The following adjusts the rightStretch to account for the substrateContact&lt;br /&gt;;;---------------------------------------------------------------------&lt;br /&gt;;;&lt;br /&gt;;;*************************************************************************&lt;br /&gt; when( substrateContact? &amp;amp;&amp;amp; substrateContact? !=&amp;quot;FALSE&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( leftContact? &amp;amp;&amp;amp; leftContact? != &amp;quot;FALSE&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rightContact? &amp;amp;&amp;amp; rightContact? != &amp;quot;FALSE&amp;quot; then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;xtrWidth = leftStretch + transistor_length + rightStretch&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;minSubTie = contactWidth + 2 * cadr(substrateRules)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; fprintf( stdout &amp;quot;xtrWidth minSubTie %L\n&amp;quot; list(xtrWidth minSubTie) )&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;when( xtrWidth &amp;lt; minSubTie&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rightStretch = rightStretch + minSubTie - xtrWidth&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)&lt;br /&gt; )&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color:#00ff00;"&gt;My Questions&lt;/span&gt;:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1.The source code uses an if-then-else structure. I believe the correct form should be either if-then or if-else.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2.What is the purpose of this piece of code? Why does it only adjust &lt;code&gt;rightStretch&lt;/code&gt;, with no case to adjust &lt;code&gt;leftStretch&lt;/code&gt;?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3.&lt;/span&gt;I am particularly confused by this line of code:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;when( xtrWidth &amp;lt; minSubTie&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rightStretch = rightStretch + minSubTie - xtrWidth&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;code&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Why do we need to consider the scenario where &lt;code&gt;xtrWidth&lt;/code&gt; is smaller than &lt;code&gt;minSubTie&lt;/code&gt;? And why is &lt;code&gt;rightStretch&lt;/code&gt; calculated as &lt;code&gt;rightStretch + minSubTie - xtrWidth&lt;/code&gt; under this condition?&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I would appreciate your insights. Thank you.&lt;br /&gt;Steve&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Writing lists to file</title><link>https://community.cadence.com/thread/70344?ContentTypeID=0</link><pubDate>Mon, 28 Sep 2026 21:16:27 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:f9c428be-b59a-49b0-b3b3-243e5fbaedad</guid><dc:creator>blankman</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/70344?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/70344/writing-lists-to-file/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have a question in relation to storing captured data to file for recall.&lt;/p&gt;
&lt;p&gt;Brief background: I have 2 procedures, one stores the list of layers in the Layer Palette that are visible, and the other recalls those layers and sets them visible, ie for storing of custom layer visibility sets. (aware that this feature already exists within Virtuoso, coding as part of a larger project)&lt;/p&gt;
&lt;p&gt;Question I have: when the layers set is stored, and then Virtuoso is closed and reopened, the layers set is lost. What I want to do is store the layers list to file, so that any stored list is permanently stored irrespective of whether the tool is closed.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I also want to be able to store 5 different lists of layers,&amp;nbsp;&lt;span&gt;ie for storing of 5 different custom layer visibility sets at a time.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Having not approached a task like this before in skill, I am wondering if there is any examples of this I could reference, or any advice how to go about accomplishing this?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks very much in advance&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Placing a dock window to left of layout screen, above the Layer Palette</title><link>https://community.cadence.com/thread/70343?ContentTypeID=0</link><pubDate>Mon, 28 Sep 2026 14:33:54 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:6a7237fd-b06d-4cbb-bd16-43ab5ce070bb</guid><dc:creator>blankman</dc:creator><slash:comments>4</slash:comments><comments>https://community.cadence.com/thread/70343?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/70343/placing-a-dock-window-to-left-of-layout-screen-above-the-layer-palette/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I am trying to dock a window to the left of my layout window, and above the existing Layer Palette. However no matter what value I place for &amp;quot;?index&amp;quot; (see below), it always places the dock window on the left side, but BELOW the Layer Palette, ie bottom left of layout window. Is it possible to dock the window to the TOP left of the layout window?&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;hiDockWindow&lt;/p&gt;
&lt;p&gt;hiDockWindow(&lt;br /&gt;?window w_dwindowID&lt;br /&gt;[ ?session g_sessionWindowID ]&lt;br /&gt;[ ?side s_side ]&lt;br /&gt;[ ?index x_index ]&lt;br /&gt;[ ?unmapped g_unmapped ]&lt;br /&gt;[ ?tabOnto w_dwindowID ]&lt;br /&gt;)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Does GDS contain prBoundary information?</title><link>https://community.cadence.com/thread/66333?ContentTypeID=0</link><pubDate>Wed, 16 Sep 2026 14:16:38 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:bd6656c4-a2d8-4612-9e31-9b9eda4ce24a</guid><dc:creator>AR202509246930</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/66333?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66333/does-gds-contain-prboundary-information/rss?ContentTypeId=0</wfw:commentRss><description>&lt;div&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Will a cell&amp;rsquo;s &lt;code&gt;prBoundary&lt;/code&gt; be present in the GDS after streaming out the &lt;code&gt;layout.oa&lt;/code&gt; view? If yes, will it be stored as a normal polygon on the mapped GDS layer/datatype, or will the actual &lt;code&gt;prBoundary&lt;/code&gt; object information be preserved?&lt;/p&gt;
&lt;p&gt;Thanks.&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to get ADE outputs priority</title><link>https://community.cadence.com/thread/66331?ContentTypeID=0</link><pubDate>Wed, 16 Sep 2026 07:05:08 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:603baf44-3823-46d4-a145-e075edb67374</guid><dc:creator>kkdesbois</dc:creator><slash:comments>3</slash:comments><comments>https://community.cadence.com/thread/66331?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66331/how-to-get-ade-outputs-priority/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&lt;br /&gt;Is there any way to get the priority of ADE outputs?&lt;br /&gt;&lt;img style="max-height:480px;max-width:640px;" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/48/pastedimage1789542183706v1.png" alt=" " /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The weight can be accessed with the function axlgetSpecWeight but I can not find an equivalent function for priority.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Laurent.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Explorer : menu disappears when switching simulator</title><link>https://community.cadence.com/thread/66326?ContentTypeID=0</link><pubDate>Thu, 10 Sep 2026 09:59:13 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:72967248-0bcf-479a-92ae-6e3b4f42aa9c</guid><dc:creator>kkdesbois</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/66326?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66326/explorer-menu-disappears-when-switching-simulator/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;A custom menu in Explorer, created with&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;deRegUserTriggers&lt;/code&gt;, disappears when switching the simulator.&lt;/p&gt;
&lt;p&gt;Is there any way to prevent that?&lt;/p&gt;
&lt;p&gt;Laurent.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to get the top level coordinate of an instance on lower level?</title><link>https://community.cadence.com/thread/66322?ContentTypeID=0</link><pubDate>Thu, 10 Sep 2026 03:12:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:23f9d736-c9c4-499b-ba02-b827cd0ff722</guid><dc:creator>Martinsh</dc:creator><slash:comments>7</slash:comments><comments>https://community.cadence.com/thread/66322?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66322/how-to-get-the-top-level-coordinate-of-an-instance-on-lower-level/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;There is a cell named CellX in a hierarchical layout design. The cell CellX is placed on one of lower level of the layout design. How to get the top level coordinate of the bBox of the cell CellX?&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Grid layout getting clipped as form is resized</title><link>https://community.cadence.com/thread/66298?ContentTypeID=0</link><pubDate>Mon, 31 Aug 2026 07:24:04 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:8cb1a6d0-a8c9-4f3f-8ff8-31d5768ed4e8</guid><dc:creator>SZ20260803361</dc:creator><slash:comments>5</slash:comments><comments>https://community.cadence.com/thread/66298?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66298/grid-layout-getting-clipped-as-form-is-resized/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/48/pastedimage1788160897931v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I have run into a new issue. Inside my UI built with &lt;code&gt;hiCreateHorizontalBoxLayout&lt;/code&gt; within a &lt;code&gt;hiCreateLayoutForm&lt;/code&gt;, there are seven buttons arranged via &lt;code&gt;hiCreateGridLayout&lt;/code&gt; as shown below:&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-family:georgia, palatino;"&gt;&lt;strong&gt;&lt;code&gt;hiCreateGridLayout( &amp;#39;gridLayout_button
    ?items (list 
        list( button_1 &amp;#39;row 0 &amp;#39;col 0 )
        list( button_2 &amp;#39;row 0 &amp;#39;col 1 )
        list( button_3 &amp;#39;row 1 &amp;#39;col 0 )
        list( button_4 &amp;#39;row 1 &amp;#39;col 1 )
        list( button_5 &amp;#39;row 2 &amp;#39;col 0 )
        list( button_6 &amp;#39;row 2 &amp;#39;col 1 )
        list( button_7 &amp;#39;row 3 &amp;#39;col 0 )
        list( &amp;#39;col_min_width 0 5)
        list( &amp;#39;col_min_width 1 5)
    )
)&lt;/code&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;I have specified the minimum column widths using &lt;code&gt;list( &amp;#39;col_min_width 0 5)&lt;/code&gt; and &lt;code&gt;list( &amp;#39;col_min_width 1 5)&lt;/code&gt;. However, when I drag the right‑hand border of the form with the mouse to shrink the window width, the button widths do not shrink accordingly. Instead, the button sizes remain unchanged and get progressively clipped as the form narrows.&lt;/p&gt;
&lt;p&gt;My form creation code:&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;&lt;span style="font-family:georgia, palatino;"&gt;&lt;code&gt;hiCreateLayoutForm(
    formName &amp;quot;LAYOUT_DEMAND&amp;quot; boxLayout_ver
    ?minSize list(30 200)			 
)
&lt;/code&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;&lt;code&gt;&lt;/code&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Are Virtuoso Skill courses not available anymore?</title><link>https://community.cadence.com/thread/66293?ContentTypeID=0</link><pubDate>Fri, 28 Aug 2026 14:06:03 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:da7bece3-dd42-468f-81ac-c1715f916fef</guid><dc:creator>AL202608035157</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/66293?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66293/are-virtuoso-skill-courses-not-available-anymore/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I followed the advanced skill language programming course last week.&lt;/p&gt;
&lt;p&gt;There were other courses on skill for PCells and others, and it seems I cannot find them anymore on&amp;nbsp;&lt;a id="" href="https://www.cadence.com/en_US/home/training.html"&gt;https://www.cadence.com/en_US/home/training.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Were they removed from the course catalog?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks in advance&lt;/p&gt;
&lt;p&gt;Adrian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How do I create connectivity through derived layers?</title><link>https://community.cadence.com/thread/66286?ContentTypeID=0</link><pubDate>Tue, 25 Aug 2026 13:24:58 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:9dbeca32-6088-4b6e-9f4d-90decf2452e2</guid><dc:creator>MSchuldt</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/66286?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66286/how-do-i-create-connectivity-through-derived-layers/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;I&amp;#39;m writing the techfile for a process, and I have a very special via that has a known top metal, known via layer, but it can land on any of six metal layers.&amp;nbsp; I have defined the top metal, via, and the six lower metals in my techfile, and I&amp;#39;m now trying to create the via definition.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;techDerivedLayers(&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; ( BM1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1001&amp;nbsp; &amp;nbsp; (M1 &amp;#39;or M2) ) ; M1-M6 are standard layers, defined in layerDefinitions&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; ( BM2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1002&amp;nbsp; &amp;nbsp; (M3 &amp;#39;or M4) )&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; ( BM3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1003&amp;nbsp; &amp;nbsp; (M5 &amp;#39;or M6) )&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; ( BM4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1004&amp;nbsp; &amp;nbsp; (BM1 &amp;#39;or BM2) )&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; ( BOTMET&amp;nbsp; &amp;nbsp; 1000&amp;nbsp; &amp;nbsp; (BM4 &amp;#39;or BM3) )&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; ) ; end techDerivedLayers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;viaDefs(&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; standardViaDefs(&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( TETHER&amp;nbsp; &amp;nbsp; &amp;nbsp; BOTMET&amp;nbsp; TOPMET&amp;nbsp; (VIA 5.0 5.0) ; TOPMET and VIA are standard layers, defined in layerDefinitions&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( 1 1 (1.0 1.0) )&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (0.0 0.0) (0.0 0.0) (0.0 0.0) (0.0 0.0) (0.0 0.0) )&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ) ; end standardViaDefs&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; ) ; end viaDefs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;When I try to load my techfile, I see:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;*WARNING* (TECH-2000212): techCreateStdViaDef: Invalid layers.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;And it does not define the via.&amp;nbsp; If I replace BOTMET in the via definition with a standard layer, everything is defined properly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;What is the correct way to create a via using a derived layer, or a via which connects to multiple things in different contexts?&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;M1-6 are local interconnect-ish layers.&amp;nbsp; The TOPMET and VIA layers are a bit like a staple - TOPMET does not ever touch anything but VIA.&amp;nbsp; This via is being defined for connectivity (use in virtuosoDefaultExtractorSetup), not for use in actual layout.&amp;nbsp; Layout will use a staple pcell which is not constrained to Manhattan geometries.&amp;nbsp; One side of the staple might land on M1, and the other side might land on M6.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Or maybe I&amp;#39;m asking the wrong question entirely.&amp;nbsp; How do I define the connectivity of this staple that can land on six different metals?&amp;nbsp; Or do I need to stop being lazy and create six different via definitions for every flavor of staple?&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Any node - Skill for the automatic ruler creation of user-defined lengths ( Working Fine)</title><link>https://community.cadence.com/thread/66285?ContentTypeID=0</link><pubDate>Tue, 25 Aug 2026 04:22:59 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:0ff5a92b-06fa-4b34-b103-60e93cee0460</guid><dc:creator>yogeshjaiswalCAD</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/66285?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66285/any-node---skill-for-the-automatic-ruler-creation-of-user-defined-lengths-working-fine/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;Greetings&lt;span&gt;&amp;nbsp;&lt;/span&gt;All,&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I am grateful for your assistance whenever I am in need. I aspire to contribute by enriching our community, as we consistently work to strengthen our connections.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;After a detailed assessment of this code, I can affirm that it is an exemplary GUI-focused solution. It requires only the entry of the specified ruler length through the GUI and the binding key to be established just one time&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;/***************************************************************&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp;* YOGI_PRULER&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp;* 1. Load code in CIW followed by the procdeure name&amp;nbsp;&lt;span&gt;yogi_pruler_dim()&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp;* 2. Dimension GUI appears&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp;* 3. Enter exact dimension in um&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;* 4&amp;nbsp; Click exact&lt;span&gt;&amp;nbsp;&lt;/span&gt;first point&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp;(Start Point)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp;* 5&amp;nbsp;&amp;nbsp;&lt;span&gt;Click anywhere for the second point in the direction you want to create the ruler ( X-Dir or Y-Dir)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp;* 6. Exact measurement is created&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp;***************************************************************/&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;;; =============================================================================&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;;; MAIN ACTION CALLBACK: This handles drawing the ruler based on the form&amp;#39;s value&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;;; =============================================================================&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;procedure(yogi_pruler_action_cb(form)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; let((win cv dim p1 p2)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; Get the current active window and its layout cellview content&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; win = hiGetCurrentWindow()&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cv &amp;nbsp;= geGetWindowCellView(win)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; Extract the target numeric dimension value directly from the user form&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dim = form-&amp;gt;dimField-&amp;gt;value&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; STEP 1: Ask the user to click the initial starting point of the ruler&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p1 = enterPoint(?prompts list(&amp;quot;Click the starting point for your ruler&amp;quot;))&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when(p1&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; Convert the raw screen cursor coordinates to actual layout canvas coordinates&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p1 = geWindowToEditPoint(win p1)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; STEP 2: Ask the user to click a second point to determine the drawing direction&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p2 = enterPoint(?prompts list(&amp;quot;Click any point to indicate drawing direction&amp;quot;))&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when(p2&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; Convert the second screen coordinates to layout canvas coordinates&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p2 = geWindowToEditPoint(win p2)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; STEP 3: Identify whether the user moved more Horizontally or Vertically&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( abs(car(p2) - car(p1)) &amp;gt;= abs(cadr(p2) - cadr(p1)) then&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; --- HORIZONTAL ROUTE ---&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; If second click is to the right, project rightward. Otherwise, project leftward.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(car(p2) &amp;gt;= car(p1) then&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p2 = list(car(p1) + dim cadr(p1))&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p2 = list(car(p1) - dim cadr(p1))&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; --- VERTICAL ROUTE ---&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; If second click is higher, project upward. Otherwise, project downward.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(cadr(p2) &amp;gt;= cadr(p1) then&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p2 = list(car(p1) cadr(p1) + dim)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p2 = list(car(p1) cadr(p1) - dim)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; STEP 4: Draw the fixed-dimension measurement ruler on the active layout canvas&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; leCreateMeasurement(cv list(p1 p2))&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; )&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;;; =============================================================================&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;;; MAIN EXECUTION FORM: Creates the user interface dialog box and displays it&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;;; =============================================================================&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;procedure(yogi_pruler_dim()&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; let((dimField)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; Create a clean text box field specifically meant for decimal/float entries&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dimField = hiCreateFloatField(&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ?name &amp;#39;dimField&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ?prompt &amp;quot;Ruler Dimension:&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ?value 1.0&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; Construct the overall graphical user interface window wrapper&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hiCreateAppForm(&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ?name &amp;#39;yogiPrulerForm&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ?formTitle &amp;quot;Yogi Precision Ruler&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; Places the input box at dynamic positioning layout coordinates&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ?fields list(list(dimField 0:10 300:30 110))&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; Automatically triggers our simplified callback function when user clicks OK/Apply&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ?callback &amp;quot;yogi_pruler_action_cb(hiGetCurrentForm())&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ?buttonLayout &amp;#39;OKCancelApply&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;; Pop the completed dialog interface onto the user&amp;#39;s workspace screen&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hiDisplayForm(yogiPrulerForm)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; )&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/48/pastedimage1787631772215v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I will wait for your response ,&lt;/strong&gt;&lt;strong&gt;Once again thanks for warm gesture&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Have a pleasant day!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cheers &amp;amp; regards,&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yogesh Jaiswal&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;
&lt;div class="MuiBox-root css-12m0k8p" data-userid="userid"&gt;
&lt;div class="MuiBox-root css-11d2po8"&gt;
&lt;div class="MuiBox-root css-wwi9pm"&gt;
&lt;div class="MuiBox-root css-1ms9mel"&gt;
&lt;div class="MuiBox-root css-xnqsmy"&gt;
&lt;div class="MuiBox-root css-13dtm9z"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;
&lt;div class="MuiBox-root css-12m0k8p" data-userid="userid"&gt;
&lt;div class="MuiBox-root css-11d2po8"&gt;
&lt;div class="MuiBox-root css-wwi9pm"&gt;
&lt;div class="MuiBox-root css-1ms9mel"&gt;
&lt;div class="MuiBox-root css-xnqsmy"&gt;
&lt;div class="MuiBox-root css-13dtm9z"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;
&lt;div class="MuiBox-root css-12m0k8p" data-userid="userid"&gt;
&lt;div class="MuiBox-root css-11d2po8"&gt;
&lt;div class="MuiBox-root css-wwi9pm"&gt;
&lt;div class="MuiBox-root css-1ms9mel"&gt;
&lt;div class="MuiBox-root css-xnqsmy"&gt;
&lt;div class="MuiBox-root css-13dtm9z"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;
&lt;div class="MuiBox-root css-12m0k8p" data-userid="userid"&gt;
&lt;div class="MuiBox-root css-11d2po8"&gt;
&lt;div class="MuiBox-root css-wwi9pm"&gt;
&lt;div class="MuiBox-root css-1ms9mel"&gt;
&lt;div class="MuiBox-root css-xnqsmy"&gt;
&lt;div class="MuiBox-root css-13dtm9z"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;
&lt;div class="MuiBox-root css-12m0k8p" data-userid="userid"&gt;
&lt;div class="MuiBox-root css-fs1aka"&gt;
&lt;div class="MuiBox-root css-wwi9pm"&gt;
&lt;div class="MuiBox-root css-1ms9mel"&gt;
&lt;div class="MuiBox-root css-xnqsmy"&gt;
&lt;div class="MuiBox-root css-13dtm9z"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;
&lt;div class="MuiBox-root css-12m0k8p" data-userid="userid"&gt;
&lt;div class="MuiBox-root css-fs1aka"&gt;
&lt;div class="MuiBox-root css-wwi9pm"&gt;
&lt;div class="MuiBox-root css-1ms9mel"&gt;
&lt;div class="MuiBox-root css-xnqsmy"&gt;
&lt;div class="MuiBox-root css-13dtm9z"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;
&lt;div class="MuiBox-root css-12m0k8p" data-userid="userid"&gt;
&lt;div class="MuiBox-root css-fs1aka"&gt;
&lt;div class="MuiBox-root css-wwi9pm"&gt;
&lt;div class="MuiBox-root css-1ms9mel"&gt;
&lt;div class="MuiBox-root css-xnqsmy"&gt;
&lt;div class="MuiBox-root css-13dtm9z"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="clevertype-extension-root"&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How can a concatenated string be transformed into a variable name?</title><link>https://community.cadence.com/thread/66275?ContentTypeID=0</link><pubDate>Thu, 20 Aug 2026 09:07:56 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:4b349ab0-addb-4d80-b813-fb0ace26d583</guid><dc:creator>SZ20260803361</dc:creator><slash:comments>8</slash:comments><comments>https://community.cadence.com/thread/66275?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66275/how-can-a-concatenated-string-be-transformed-into-a-variable-name/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span style="font-size:150%;"&gt;I want to set a variable name that can change over time. For example: &lt;br /&gt;item=&amp;quot;&amp;quot; &lt;br /&gt;lists=setof(i parseString(getCurrentTime() &amp;quot;&amp;quot;) i!) =&amp;quot; &amp;quot;&amp;amp;&amp;amp;i! =&amp;quot;:&amp;quot;) &lt;br /&gt;foreach(elem lists&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:150%;"&gt;item=strcat(item elem)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:150%;"&gt;)&lt;br /&gt;I received the item with the code &amp;quot;Aug201706212026&amp;quot;. &lt;br /&gt;I want to replace the &amp;quot;item&amp;quot; in the variable name &amp;quot;a_item&amp;quot; with &amp;quot;Aug201706212026&amp;quot;, so that the final variable name becomes &amp;quot;a_Aug201706212026&amp;quot;. How can I do this? I tried using `setq(stringToSymbol(strcat(&amp;quot;a_&amp;quot; item)) 5)`, but this caused an error. How should I proceed?&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to extract only highest metal Power/Ground/Bulk routing from top-level hierarchy using SKILL/Python in Virtuoso Studio IC 23.1?</title><link>https://community.cadence.com/thread/66272?ContentTypeID=0</link><pubDate>Wed, 19 Aug 2026 06:01:36 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:b3bf9e02-911f-4eb1-a7fd-65ee508f2b3b</guid><dc:creator>AR202509246930</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/66272?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66272/how-to-extract-only-highest-metal-power-ground-bulk-routing-from-top-level-hierarchy-using-skill-python-in-virtuoso-studio-ic-23-1/rss?ContentTypeId=0</wfw:commentRss><description>&lt;div&gt;
&lt;p&gt;Hello Cadence Community,&lt;/p&gt;
&lt;p&gt;I am using Cadence Virtuoso Studio IC 23.1 and I am trying to create an automation flow to extract only the highest metal routing shapes for Power/Ground/Bulk nets from a top-level layout.&lt;/p&gt;
&lt;p&gt;I want the script to automatically identify Power, Ground, and Bulk nets from the layout/database, without asking the user to manually provide net names.&lt;/p&gt;
&lt;p&gt;For example, the script should automatically recognize nets like:&lt;/p&gt;
&lt;p&gt;Power nets: VDD, VDD1, VDD2...etc.&lt;br /&gt;Ground nets: VSS, VSSA, VSSB,&amp;nbsp; etc.&lt;br /&gt;Bulk/Well nets: NWELL, DNWELL, BULK, etc.&lt;br /&gt;I am looking for the best way to identify them using net properties, terminal types, global nets, inherited connections, or any recommended Virtuoso database API.&lt;br /&gt;Main challenge&lt;br /&gt;In some designs, the top-level cell may only contain pins for these nets, while the actual metal routing is present inside lower-level sub-blocks.&lt;/p&gt;
&lt;p&gt;So, I do not want to extract only the top-level pin shapes. I want to traverse the hierarchy and identify where the actual routing metal exists for the auto-detected PG/Bulk nets.&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Warning while using asiSelectInst</title><link>https://community.cadence.com/thread/66248?ContentTypeID=0</link><pubDate>Thu, 06 Aug 2026 15:10:04 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:d284a0f5-d60a-4c64-b854-aed5af544e23</guid><dc:creator>SK202511261716</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/66248?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66248/warning-while-using-asiselectinst/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I&amp;#39;m developing a form which at a certain point needs to allow the user to select an instance from their schematic. I then need to fetch the database&amp;nbsp;object of that instance to do some further processing. I&amp;#39;m using &lt;code&gt;asiSelectInst&amp;nbsp;&lt;/code&gt;for this, in the following callback from a button on my form:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;(procedure selectDUT(field scope)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; (sevOpenSchematic (axlGetToolSession sess testname))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; (asiSelectInst &amp;#39;mydutfield ?prompt &amp;quot;select instance...&amp;quot; ?form myform ?tab (list &amp;#39;mytabs &amp;#39;page1))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;quot;mydutfield&amp;quot; is an uneditable string field. I gave it a callback which fetches the database instance, so whenever asiSelectInst changes the value of the field, the callback is initiated:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;(procedure fetchDUTInst(field scope)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; (let&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (cv (geGetEditCellView))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inst&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (setq inst (car (exists obj cv-&amp;gt;instances (equal obj-&amp;gt;name (car (last (parseString scope-&amp;gt;mydutfield-&amp;gt;value &amp;quot;/&amp;quot;)))))))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;...&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This works like a charm....almost. Sometimes, when I open the form for the first time, asiSelectInst fails with the following warning, printed to the CIW:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;*Warning* No window and/or doneProc argument passed to&lt;br /&gt; &amp;quot;astiSelectInst&amp;quot;, selection not started&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The value in mydutfield doesn&amp;#39;t change, and the callback is not executed. If I immediately try again, it works no problem, and continues to work all subsequent times. I&amp;#39;ve not been able to determine the exact conditions under which it fails, but it always seems to be when the form/maestro view is first opened.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Am I doing something wrong here?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m on version&amp;nbsp;IC23.1-64b&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Looking for a SKILL/Python Script to Automatically Run Schematic Netlist in Virtuoso IC23.1</title><link>https://community.cadence.com/thread/66241?ContentTypeID=0</link><pubDate>Tue, 04 Aug 2026 09:36:59 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:07614086-a3d3-4fb4-a4ac-5b538e0b01d9</guid><dc:creator>AR202509246930</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/66241?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66241/looking-for-a-skill-python-script-to-automatically-run-schematic-netlist-in-virtuoso-ic23-1/rss?ContentTypeId=0</wfw:commentRss><description>&lt;div&gt;
&lt;p&gt;Hi Community,&lt;/p&gt;
&lt;p&gt;I am using &lt;strong&gt;Cadence Virtuoso IC23.1&lt;/strong&gt; and am looking for a SKILL or Python script that can automatically &lt;strong&gt;run schematic netlisting&lt;/strong&gt; by simply providing the &lt;strong&gt;library name&lt;/strong&gt; and &lt;strong&gt;cell (schematic) name&lt;/strong&gt; as inputs.&lt;/p&gt;
&lt;p&gt;The requirement is to run the netlisting process &lt;strong&gt;without opening the schematic in the Virtuoso GUI or in the background&lt;/strong&gt;. Ideally, the solution should:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accept &lt;strong&gt;library name&lt;/strong&gt; and &lt;strong&gt;cell/schematic name&lt;/strong&gt; as inputs.&lt;/li&gt;
&lt;li&gt;Run the schematic netlisting automatically.&lt;/li&gt;
&lt;li&gt;Avoid opening any schematic window.&lt;/li&gt;
&lt;li&gt;Support batch/automated execution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Has anyone implemented something similar or know of any available SKILL APIs, Python scripts, or examples that can achieve this in &lt;strong&gt;Virtuoso IC23.1&lt;/strong&gt;?&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>how to use variable in defcell</title><link>https://community.cadence.com/thread/66212?ContentTypeID=0</link><pubDate>Tue, 28 Jul 2026 19:38:29 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:886f48b0-2b6e-4f49-89c9-e330c884e5f6</guid><dc:creator>MorrisDH</dc:creator><slash:comments>9</slash:comments><comments>https://community.cadence.com/thread/66212?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66212/how-to-use-variable-in-defcell/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I am open to suggestions if there is a better way&amp;nbsp;to create a symbol cellview but the following is what I am using.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;defcell(&amp;quot;realCellName&amp;quot; defSymbol( nil ) )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It works fine for a basic symbol with no pins which is all I need. It creates a symbol cellview under the cell &amp;quot;realCellName&amp;quot;.&lt;br /&gt;&lt;br /&gt;The following does not work as expected.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;cellName = &amp;quot;realCellName&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;defcell(cellName defSymbol( nil ))&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It creates a new cell named &amp;quot;cellName&amp;quot; instead of parsing the variable. Is it not possible for defcell to recognize variables?&lt;br /&gt;&lt;br /&gt;Or maybe there is a better way to create simple symbol cellviews.&lt;br /&gt;&lt;br /&gt;Thanks&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Hi, How to hide a set of parameter section in pcell generation using "pcDefinePCell()" fuction</title><link>https://community.cadence.com/thread/66199?ContentTypeID=0</link><pubDate>Sun, 26 Jul 2026 17:44:37 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:24f5e97d-9c4c-4773-940d-16bf19171bfc</guid><dc:creator>Ganesh B</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/66199?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66199/hi-how-to-hide-a-set-of-parameter-section-in-pcell-generation-using-pcdefinepcell-fuction/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi, How to hide a set of parameter section in pcell generation using &amp;quot;pcDefinePCell()&amp;quot; fuction. Can anyone help?&lt;br /&gt;&lt;br /&gt;Just like this.&lt;br /&gt;&lt;br /&gt;&lt;img style="max-height:480px;max-width:640px;" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/48/pastedimage1785087835891v1.png" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>how to make a cellview read-only?</title><link>https://community.cadence.com/thread/66193?ContentTypeID=0</link><pubDate>Thu, 23 Jul 2026 08:44:10 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1497bf8b-a3a8-45d7-b0ca-02c355b78fba</guid><dc:creator>JJ202502261359</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/66193?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66193/how-to-make-a-cellview-read-only/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I want to implement the &lt;span style="color:#0000ff;"&gt;&amp;quot;Make Read Only&amp;quot;&lt;/span&gt; function found in the Virtuoso menu using SKILL.&lt;br /&gt;&lt;br /&gt;Virtuoso must revert to the last saved state without closing the layout GUI.&lt;br /&gt;&lt;br /&gt;1. dbPurge() has an issue where the GUI window closes.&lt;br /&gt;2. When proceeding with dbReopen(&amp;quot;r&amp;quot;) after hiUndo() multiple times,&lt;br /&gt;&amp;nbsp;&amp;nbsp; the undo operation is incomplete due to the limit on the number of undo steps.&lt;br /&gt;3. If I open a layout in &amp;quot;r&amp;quot; mode and then modify it using `dbCreatePath`, the action cannot be undone.&lt;br /&gt;&lt;br /&gt;Based on points 1, 2, and 3, implementing &lt;span style="color:#0000ff;"&gt;&amp;quot;Make Read Only&amp;quot;&lt;/span&gt; using Skill proved difficult.&lt;br /&gt;&lt;br /&gt;Is there a possible way to do it&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Automatization of Maestro view and schematic (testbench) for simulation of multiple results</title><link>https://community.cadence.com/thread/66185?ContentTypeID=0</link><pubDate>Tue, 21 Jul 2026 10:08:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:db1c1968-4a46-4d79-a82d-e48c2051ffba</guid><dc:creator>OG202503213520</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/66185?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66185/automatization-of-maestro-view-and-schematic-testbench-for-simulation-of-multiple-results/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&amp;nbsp;&lt;br /&gt;I have a design that I need to verify and do the simulation , to give an idea , it had multiple inputs and outputs and they depend on internal values. I need to simulate each input with different output to see the delay.&lt;br /&gt;&lt;br /&gt;Is there a way by which I can automatize the changing of equations in maestro setup depending on the inputs and outputs? Also , depending in the inputs and outputs selected , I need to automatically make changes in the testbench.&lt;br /&gt;&lt;br /&gt;For the moment I think using &amp;quot;skillbrigde&amp;quot; (skill functions using python) the generation of schematic can be done writing a code , but I dont understand how I can make the link with maestro testbench.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have any solutions , please let me know.&lt;br /&gt;&lt;br /&gt;Thank you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Specify reference verilog file returns **NONE** in hierarchy editor for grouped cells</title><link>https://community.cadence.com/thread/66184?ContentTypeID=0</link><pubDate>Tue, 21 Jul 2026 08:11:22 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:91301180-2bef-45e9-a63d-bf2cddbd8083</guid><dc:creator>ArthurP</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/66184?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66184/specify-reference-verilog-file-returns-none-in-hierarchy-editor-for-grouped-cells/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&lt;br /&gt;&lt;br /&gt;To give some context I want to run Mixed Signal simulator with AMS and I run Cadence 20.1.&lt;br /&gt;After setting up the simulator, I have to replace the schematic views that we usually use in our analog flow in the Hierarchy Editor by their verilog model: the cells only contains schematic, layout, and symbol views and that cannot be changed.&lt;/p&gt;
&lt;p&gt;Because of a different design methodologies among designers we have two standard cell types: with and without power pins. They both have the same model core. Every verilog modules are listed in a two .v files given by the founder with lib_pwr.v models for cells with power pins and lib.v models for cells without power pins.&lt;br /&gt;&lt;br /&gt;I can easily replace the first cell type by their verilog models by precompiling lib.v verilog file, setting up &amp;quot;View found&amp;quot; as &amp;quot;Symbol&amp;quot;, and changing &amp;quot;View list&amp;quot; so that &amp;quot;verilog&amp;quot; appears first. The simulation runs.&lt;br /&gt;&lt;br /&gt;For the second type of standard cells, I first select relevant cells, use &amp;quot;Set Cell View&amp;quot;, &amp;quot;Specify Reference Verilog&amp;quot; and select lib_pwr.v file in the interface. This also runs.&lt;/p&gt;
&lt;p&gt;However, for grouped cells in the schematic with Ix&amp;lt;N:0&amp;gt; syntax, the Hierarchy Editor reports **NONE**: &amp;quot;This cell is explicitly bound to the &amp;#39;module&amp;#39; view. The &amp;#39;module&amp;#39; view does not exist for this cell&amp;quot; and path to .v file does not appear. The simulation cannot be launched.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;It is possible to set them one by one in &amp;quot;Tree view&amp;quot; and run the simulation properly, but I cannot practically do this as there are hundreds of cells.&lt;/p&gt;
&lt;p&gt;Note that both cells type could be linked to their verilog models using &amp;quot;Specify Reference Verilog&amp;quot;.&lt;br /&gt;&lt;br /&gt;Questions arise:&lt;/p&gt;
&lt;p&gt;Verilog reference file works fine with single cells but not with grouped cells, is this normal behavior ? Is their any known workaround ?&lt;br /&gt;Can the config file be exported, manually modified and imported ? &amp;quot;Save as verilog&amp;quot; returns an empty file.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;&lt;br /&gt;Arthur&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Export measurement units with axlExportOutputView() (ADE Maestro Results/Monte Carlo)</title><link>https://community.cadence.com/thread/66167?ContentTypeID=0</link><pubDate>Thu, 16 Jul 2026 11:13:38 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:38b8b069-0f94-4127-8aac-641144c8d0e1</guid><dc:creator>Johanny Saenz</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/66167?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66167/export-measurement-units-with-axlexportoutputview-ade-maestro-results-monte-carlo/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p class="isSelectedEnd"&gt;&lt;span&gt;Hello,&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;I am using the following SKILL commands to export ADE Maestro Monte Carlo results to CSV:&lt;/span&gt;&lt;/p&gt;
&lt;pre dir="ltr"&gt;&lt;code dir="ltr"&gt;&lt;span&gt;sess = axlGetWindowSession()

csvFilePath = &amp;quot;BANDGAP_MC_Export.csv&amp;quot;

axlExportOutputView(sess csvFilePath &amp;quot;Results&amp;quot; ?history &amp;quot;MC&amp;quot;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;This successfully exports the numerical results, and the same approach also works for other output views (e.g., Summary, Yield, etc.).&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;However, I have not found a way to export the &lt;/span&gt;&lt;strong&gt;&lt;span&gt;measurement units&lt;/span&gt;&lt;/strong&gt;&lt;span&gt; associated with each output. For example, I would like to obtain a column containing units such as:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-spread="false"&gt;
&lt;li&gt;&lt;span&gt;V&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;A&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;dB&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;deg;C&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;deg&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Hz&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;s&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;%&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;or any other unit defined for the measurement.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;I searched the SKILL documentation and experimented with &lt;/span&gt;&lt;code dir="ltr"&gt;&lt;span&gt;axlExportOutputView()&lt;/span&gt;&lt;/code&gt;&lt;span&gt;, but I could not find any option that exports the units together with the results.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;My questions are:&lt;/span&gt;&lt;/p&gt;
&lt;ol start="1" data-spread="false"&gt;
&lt;li&gt;&lt;span&gt;Is there an option in &lt;/span&gt;&lt;code dir="ltr"&gt;&lt;span&gt;axlExportOutputView()&lt;/span&gt;&lt;/code&gt;&lt;span&gt; to include the measurement units in the generated CSV?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;If not, is there another SKILL API that allows retrieving the units for each output expression programmatically?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Are the units stored in the Maestro session database and accessible through another object or function?&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;For reference, I am using Virtuoso ADE Maestro with Spectre (ICADVM 20.1 ISR75).&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;The motivation is to generate automated reports from the exported CSV files, where each measurement includes its corresponding engineering unit.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span&gt;Any suggestions would be greatly appreciated.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thank you.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>preview for analogLib sources without running a simulation,</title><link>https://community.cadence.com/thread/66153?ContentTypeID=0</link><pubDate>Fri, 10 Jul 2026 09:10:52 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:e5ef40d0-0708-46bb-a892-5f5213a6069f</guid><dc:creator>dogman4</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/66153?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66153/preview-for-analoglib-sources-without-running-a-simulation/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi，friends&lt;/p&gt;
&lt;p&gt;&lt;span&gt;What methods are there to preview analogLib sources without running a simulation?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;My virtuoso version: &amp;quot;@(#)$CDS: virtuoso version 6.1.8-64b 09/03/2024 19:11 (sjfhw316) $&amp;quot;&lt;br /&gt;My spectre version: Version19.1.0.063 64bit--10 Aug 2019&lt;/span&gt;&lt;/p&gt;
&lt;div id="phraseJoinewrskdfdswerhnyikyofd" data-v-app=""&gt;
&lt;div class="xx-qy-style-dark" data-v-f4d4888e=""&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to run an interactive external script from SKILL?</title><link>https://community.cadence.com/thread/66124?ContentTypeID=0</link><pubDate>Wed, 01 Jul 2026 11:57:53 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:39e0230a-7a09-4293-bbeb-27ff3690c0dc</guid><dc:creator>LoVyacheslavvVEMs</dc:creator><slash:comments>4</slash:comments><comments>https://community.cadence.com/thread/66124?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66124/how-to-run-an-interactive-external-script-from-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p class="isSelectedEnd"&gt;&lt;span style="font-family:inherit;font-size:150%;"&gt;Hi,&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span style="font-family:inherit;font-size:150%;"&gt;I need to launch an external script from SKILL. The script itself is not under my control - it may be a shell script, Python script, executable, or any other program.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span style="font-family:inherit;font-size:150%;"&gt;The important part is that the script may pause at arbitrary points and wait for user input from stdin. When this happens, I would like to prompt the user in Virtuoso (for example, using an AppForm), send the entered text back to the running process, and then continue its execution.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span style="font-family:inherit;font-size:150%;"&gt;I know about &lt;code dir="ltr"&gt;system()&lt;/code&gt; and &lt;code dir="ltr"&gt;ipcBeginProcess()&lt;/code&gt;, but I&amp;#39;m not sure whether SKILL supports this kind of interactive communication with a child process.&lt;/span&gt;&lt;/p&gt;
&lt;p class="isSelectedEnd"&gt;&lt;span style="font-family:inherit;font-size:150%;"&gt;Is there a supported way to:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-spread="false"&gt;
&lt;li&gt;&lt;span style="font-family:inherit;font-size:150%;"&gt;launch an external interactive process from SKILL;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:inherit;font-size:150%;"&gt;detect when it is waiting for input;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:inherit;font-size:150%;"&gt;send user input back to the process while it is running?&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;Thanks in advance.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>maeGroupAsParametricSet has no ?session argument</title><link>https://community.cadence.com/thread/66122?ContentTypeID=0</link><pubDate>Wed, 01 Jul 2026 09:12:35 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:0231d9be-20f1-4b27-a959-dd9b95b706a4</guid><dc:creator>SK202511261716</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/66122?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66122/maegroupasparametricset-has-no-session-argument/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I have a SKILL script running inside a form which at one point needs to create a parametric set for the Design Variables of a particular Test. I&amp;#39;m using maeGroupAsParametricSet for this, and it&amp;#39;s worked well so far. Unfortunately I&amp;#39;ve just run into a problem: if I have multiple maestro windows open, maeGroupAsParametricSet starts to misbehave. Unlike other mae functions, it can&amp;#39;t be provided a ?session argument. So if I run my form from the second maestro view that I&amp;#39;ve opened, it will fail to find the Test I specify, because it&amp;#39;s looking for it in the first maestro view. I tested this with maeGetTestSession: if I don&amp;#39;t provide the ?session argument, it returns nil, whereas if I do provide it, it runs successfully. This suggests to me that maeGroupAsParametricSet is looking in the first view by &amp;quot;default&amp;quot;, and lacking a ?session argument it can&amp;#39;t be told to look elsewhere. Am I misunderstanding something here, or is there a workaround for this?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The warning message that appears after calling maeGroupAsParametricSet reads as follows:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;WARNING (ASSEMBLER-1602): Cannot find test &amp;lt;TESTNAME&amp;gt; in the setup database. The test name passed to this function does not exist in the setup database. Perhaps the name was misspelled or has not yet been created. The test needs to be created before calling this function.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;I&amp;#39;m on version IC23.1-64b&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Prevent Net Extraction for Shapes</title><link>https://community.cadence.com/thread/66080?ContentTypeID=0</link><pubDate>Wed, 17 Jun 2026 07:44:07 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:0dba0de2-ca40-40b2-9ce7-a749af8f13e4</guid><dc:creator>PK202501238151</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/66080?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/66080/prevent-net-extraction-for-shapes/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;is there a way to prevent net extraction for specific shapes? I&amp;#39;m generating layouts with external tools and mark the with `lxStickyNet = t` to prevent their nets to change by the extraction. However, there are also shapes that have no net assigned, and they change connectivity, even though lxStickyNet is set.&lt;/p&gt;
&lt;p&gt;Thanks, kind regards,&lt;/p&gt;
&lt;p&gt;Patrick&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>